Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

xrpio.browser.js 3.2MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443614446144561446614476144861449614506145161452614536145461455614566145761458614596146061461614626146361464614656146661467614686146961470614716147261473614746147561476614776147861479614806148161482614836148461485614866148761488614896149061491614926149361494614956149661497614986149961500615016150261503615046150561506615076150861509615106151161512615136151461515615166151761518615196152061521615226152361524615256152661527615286152961530615316153261533615346153561536615376153861539615406154161542615436154461545615466154761548615496155061551615526155361554615556155661557615586155961560615616156261563615646156561566615676156861569615706157161572615736157461575615766157761578615796158061581615826158361584615856158661587615886158961590615916159261593615946159561596615976159861599616006160161602616036160461605616066160761608616096161061611616126161361614616156161661617616186161961620616216162261623616246162561626616276162861629616306163161632616336163461635616366163761638616396164061641616426164361644616456164661647616486164961650616516165261653616546165561656616576165861659616606166161662616636166461665616666166761668616696167061671616726167361674616756167661677616786167961680616816168261683616846168561686616876168861689616906169161692616936169461695616966169761698616996170061701617026170361704617056170661707617086170961710617116171261713617146171561716617176171861719617206172161722617236172461725617266172761728617296173061731617326173361734617356173661737617386173961740617416174261743617446174561746617476174861749617506175161752617536175461755617566175761758617596176061761617626176361764617656176661767617686176961770617716177261773617746177561776617776177861779617806178161782617836178461785617866178761788617896179061791617926179361794617956179661797617986179961800618016180261803618046180561806618076180861809618106181161812618136181461815618166181761818618196182061821618226182361824618256182661827618286182961830618316183261833618346183561836618376183861839618406184161842618436184461845618466184761848618496185061851618526185361854618556185661857618586185961860618616186261863618646186561866618676186861869618706187161872618736187461875618766187761878618796188061881618826188361884618856188661887618886188961890618916189261893618946189561896618976189861899619006190161902619036190461905619066190761908619096191061911619126191361914619156191661917619186191961920619216192261923619246192561926619276192861929619306193161932619336193461935619366193761938619396194061941619426194361944619456194661947619486194961950619516195261953619546195561956619576195861959619606196161962619636196461965619666196761968619696197061971619726197361974619756197661977619786197961980619816198261983619846198561986619876198861989619906199161992619936199461995619966199761998619996200062001620026200362004620056200662007620086200962010620116201262013620146201562016620176201862019620206202162022620236202462025620266202762028620296203062031620326203362034620356203662037620386203962040620416204262043620446204562046620476204862049620506205162052620536205462055620566205762058620596206062061620626206362064620656206662067620686206962070620716207262073620746207562076620776207862079620806208162082620836208462085620866208762088620896209062091620926209362094620956209662097620986209962100621016210262103621046210562106621076210862109621106211162112621136211462115621166211762118621196212062121621226212362124621256212662127621286212962130621316213262133621346213562136621376213862139621406214162142621436214462145621466214762148621496215062151621526215362154621556215662157621586215962160621616216262163621646216562166621676216862169621706217162172621736217462175621766217762178621796218062181621826218362184621856218662187621886218962190621916219262193621946219562196621976219862199622006220162202622036220462205622066220762208622096221062211622126221362214622156221662217622186221962220622216222262223622246222562226622276222862229622306223162232622336223462235622366223762238622396224062241622426224362244622456224662247622486224962250622516225262253622546225562256622576225862259622606226162262622636226462265622666226762268622696227062271622726227362274622756227662277622786227962280622816228262283622846228562286622876228862289622906229162292622936229462295622966229762298622996230062301623026230362304623056230662307623086230962310623116231262313623146231562316623176231862319623206232162322623236232462325623266232762328623296233062331623326233362334623356233662337623386233962340623416234262343623446234562346623476234862349623506235162352623536235462355623566235762358623596236062361623626236362364623656236662367623686236962370623716237262373623746237562376623776237862379623806238162382623836238462385623866238762388623896239062391623926239362394623956239662397623986239962400624016240262403624046240562406624076240862409624106241162412624136241462415624166241762418624196242062421624226242362424624256242662427624286242962430624316243262433624346243562436624376243862439624406244162442624436244462445624466244762448624496245062451624526245362454624556245662457624586245962460624616246262463624646246562466624676246862469624706247162472624736247462475624766247762478624796248062481624826248362484624856248662487624886248962490624916249262493624946249562496624976249862499625006250162502625036250462505625066250762508625096251062511625126251362514625156251662517625186251962520625216252262523625246252562526625276252862529625306253162532625336253462535625366253762538625396254062541625426254362544625456254662547625486254962550625516255262553625546255562556625576255862559625606256162562625636256462565625666256762568625696257062571625726257362574625756257662577625786257962580625816258262583625846258562586625876258862589625906259162592625936259462595625966259762598625996260062601626026260362604626056260662607626086260962610626116261262613626146261562616626176261862619626206262162622626236262462625626266262762628626296263062631626326263362634626356263662637626386263962640626416264262643626446264562646626476264862649626506265162652626536265462655626566265762658626596266062661626626266362664626656266662667626686266962670626716267262673626746267562676626776267862679626806268162682626836268462685626866268762688626896269062691626926269362694626956269662697626986269962700627016270262703627046270562706627076270862709627106271162712627136271462715627166271762718627196272062721627226272362724627256272662727627286272962730627316273262733627346273562736627376273862739627406274162742627436274462745627466274762748627496275062751627526275362754627556275662757627586275962760627616276262763627646276562766627676276862769627706277162772627736277462775627766277762778627796278062781627826278362784627856278662787627886278962790627916279262793627946279562796627976279862799628006280162802628036280462805628066280762808628096281062811628126281362814628156281662817628186281962820628216282262823628246282562826628276282862829628306283162832628336283462835628366283762838628396284062841628426284362844628456284662847628486284962850628516285262853628546285562856628576285862859628606286162862628636286462865628666286762868628696287062871628726287362874628756287662877628786287962880628816288262883628846288562886628876288862889628906289162892628936289462895628966289762898628996290062901629026290362904629056290662907629086290962910629116291262913629146291562916629176291862919629206292162922629236292462925629266292762928629296293062931629326293362934629356293662937629386293962940629416294262943629446294562946629476294862949629506295162952629536295462955629566295762958629596296062961629626296362964629656296662967629686296962970629716297262973629746297562976629776297862979629806298162982629836298462985629866298762988629896299062991629926299362994629956299662997629986299963000630016300263003630046300563006630076300863009630106301163012630136301463015630166301763018630196302063021630226302363024630256302663027630286302963030630316303263033630346303563036630376303863039630406304163042630436304463045630466304763048630496305063051630526305363054630556305663057630586305963060630616306263063630646306563066630676306863069630706307163072630736307463075630766307763078630796308063081630826308363084630856308663087630886308963090630916309263093630946309563096630976309863099631006310163102631036310463105631066310763108631096311063111631126311363114631156311663117631186311963120631216312263123631246312563126631276312863129631306313163132631336313463135631366313763138631396314063141631426314363144631456314663147631486314963150631516315263153631546315563156631576315863159631606316163162631636316463165631666316763168631696317063171631726317363174631756317663177631786317963180631816318263183631846318563186631876318863189631906319163192631936319463195631966319763198631996320063201632026320363204632056320663207632086320963210632116321263213632146321563216632176321863219632206322163222632236322463225632266322763228632296323063231632326323363234632356323663237632386323963240632416324263243632446324563246632476324863249632506325163252632536325463255632566325763258632596326063261632626326363264632656326663267632686326963270632716327263273632746327563276632776327863279632806328163282632836328463285632866328763288632896329063291632926329363294632956329663297632986329963300633016330263303633046330563306633076330863309633106331163312633136331463315633166331763318633196332063321633226332363324633256332663327633286332963330633316333263333633346333563336633376333863339633406334163342633436334463345633466334763348633496335063351633526335363354633556335663357633586335963360633616336263363633646336563366633676336863369633706337163372633736337463375633766337763378633796338063381633826338363384633856338663387633886338963390633916339263393633946339563396633976339863399634006340163402634036340463405634066340763408634096341063411634126341363414634156341663417634186341963420634216342263423634246342563426634276342863429634306343163432634336343463435634366343763438634396344063441634426344363444634456344663447634486344963450634516345263453634546345563456634576345863459634606346163462634636346463465634666346763468634696347063471634726347363474634756347663477634786347963480634816348263483634846348563486634876348863489634906349163492634936349463495634966349763498634996350063501635026350363504635056350663507635086350963510635116351263513635146351563516635176351863519635206352163522635236352463525635266352763528635296353063531635326353363534635356353663537635386353963540635416354263543635446354563546635476354863549635506355163552635536355463555635566355763558635596356063561635626356363564635656356663567635686356963570635716357263573635746357563576635776357863579635806358163582635836358463585635866358763588635896359063591635926359363594635956359663597635986359963600636016360263603636046360563606636076360863609636106361163612636136361463615636166361763618636196362063621636226362363624636256362663627636286362963630636316363263633636346363563636636376363863639636406364163642636436364463645636466364763648636496365063651636526365363654636556365663657636586365963660636616366263663636646366563666636676366863669636706367163672636736367463675636766367763678636796368063681636826368363684636856368663687636886368963690636916369263693636946369563696636976369863699637006370163702637036370463705637066370763708637096371063711637126371363714637156371663717637186371963720637216372263723637246372563726637276372863729637306373163732637336373463735637366373763738637396374063741637426374363744637456374663747637486374963750637516375263753637546375563756637576375863759637606376163762637636376463765637666376763768637696377063771637726377363774637756377663777637786377963780637816378263783637846378563786637876378863789637906379163792637936379463795637966379763798637996380063801638026380363804638056380663807638086380963810638116381263813638146381563816638176381863819638206382163822638236382463825638266382763828638296383063831638326383363834638356383663837638386383963840638416384263843638446384563846638476384863849638506385163852638536385463855638566385763858638596386063861638626386363864638656386663867638686386963870638716387263873638746387563876638776387863879638806388163882638836388463885638866388763888638896389063891638926389363894638956389663897638986389963900639016390263903639046390563906639076390863909639106391163912639136391463915639166391763918639196392063921639226392363924639256392663927639286392963930639316393263933639346393563936639376393863939639406394163942639436394463945639466394763948639496395063951639526395363954639556395663957639586395963960639616396263963639646396563966639676396863969639706397163972639736397463975639766397763978639796398063981639826398363984639856398663987639886398963990639916399263993639946399563996639976399863999640006400164002640036400464005640066400764008640096401064011640126401364014640156401664017640186401964020640216402264023640246402564026640276402864029640306403164032640336403464035640366403764038640396404064041640426404364044640456404664047640486404964050640516405264053640546405564056640576405864059640606406164062640636406464065640666406764068640696407064071640726407364074640756407664077640786407964080640816408264083640846408564086640876408864089640906409164092640936409464095640966409764098640996410064101641026410364104641056410664107641086410964110641116411264113641146411564116641176411864119641206412164122641236412464125641266412764128641296413064131641326413364134641356413664137641386413964140641416414264143641446414564146641476414864149641506415164152641536415464155641566415764158641596416064161641626416364164641656416664167641686416964170641716417264173641746417564176641776417864179641806418164182641836418464185641866418764188641896419064191641926419364194641956419664197641986419964200642016420264203642046420564206642076420864209642106421164212642136421464215642166421764218642196422064221642226422364224642256422664227642286422964230642316423264233642346423564236642376423864239642406424164242642436424464245642466424764248642496425064251642526425364254642556425664257642586425964260642616426264263642646426564266642676426864269642706427164272642736427464275642766427764278642796428064281642826428364284642856428664287642886428964290642916429264293642946429564296642976429864299643006430164302643036430464305643066430764308643096431064311643126431364314643156431664317643186431964320643216432264323643246432564326643276432864329643306433164332643336433464335643366433764338643396434064341643426434364344643456434664347643486434964350643516435264353643546435564356643576435864359643606436164362643636436464365643666436764368643696437064371643726437364374643756437664377643786437964380643816438264383643846438564386643876438864389643906439164392643936439464395643966439764398643996440064401644026440364404644056440664407644086440964410644116441264413644146441564416644176441864419644206442164422644236442464425644266442764428644296443064431644326443364434644356443664437644386443964440644416444264443644446444564446644476444864449644506445164452644536445464455644566445764458644596446064461644626446364464644656446664467644686446964470644716447264473644746447564476644776447864479644806448164482644836448464485644866448764488644896449064491644926449364494644956449664497644986449964500645016450264503645046450564506645076450864509645106451164512645136451464515645166451764518645196452064521645226452364524645256452664527645286452964530645316453264533645346453564536645376453864539645406454164542645436454464545645466454764548645496455064551645526455364554645556455664557645586455964560645616456264563645646456564566645676456864569645706457164572645736457464575645766457764578645796458064581645826458364584645856458664587645886458964590645916459264593645946459564596645976459864599646006460164602646036460464605646066460764608646096461064611646126461364614646156461664617646186461964620646216462264623646246462564626646276462864629646306463164632646336463464635646366463764638646396464064641646426464364644646456464664647646486464964650646516465264653646546465564656646576465864659646606466164662646636466464665646666466764668646696467064671646726467364674646756467664677646786467964680646816468264683646846468564686646876468864689646906469164692646936469464695646966469764698646996470064701647026470364704647056470664707647086470964710647116471264713647146471564716647176471864719647206472164722647236472464725647266472764728647296473064731647326473364734647356473664737647386473964740647416474264743647446474564746647476474864749647506475164752647536475464755647566475764758647596476064761647626476364764647656476664767647686476964770647716477264773647746477564776647776477864779647806478164782647836478464785647866478764788647896479064791647926479364794647956479664797647986479964800648016480264803648046480564806648076480864809648106481164812648136481464815648166481764818648196482064821648226482364824648256482664827648286482964830648316483264833648346483564836648376483864839648406484164842648436484464845648466484764848648496485064851648526485364854648556485664857648586485964860648616486264863648646486564866648676486864869648706487164872648736487464875648766487764878648796488064881648826488364884648856488664887648886488964890648916489264893648946489564896648976489864899649006490164902649036490464905649066490764908649096491064911649126491364914649156491664917649186491964920649216492264923649246492564926649276492864929649306493164932649336493464935649366493764938649396494064941649426494364944649456494664947649486494964950649516495264953649546495564956649576495864959649606496164962649636496464965649666496764968649696497064971649726497364974649756497664977649786497964980649816498264983649846498564986649876498864989649906499164992649936499464995649966499764998649996500065001650026500365004650056500665007650086500965010650116501265013650146501565016650176501865019650206502165022650236502465025650266502765028650296503065031650326503365034650356503665037650386503965040650416504265043650446504565046650476504865049650506505165052650536505465055650566505765058650596506065061650626506365064650656506665067650686506965070650716507265073650746507565076650776507865079650806508165082650836508465085650866508765088650896509065091650926509365094650956509665097650986509965100651016510265103651046510565106651076510865109651106511165112651136511465115651166511765118651196512065121651226512365124651256512665127651286512965130651316513265133651346513565136651376513865139651406514165142651436514465145651466514765148651496515065151651526515365154651556515665157651586515965160651616516265163651646516565166651676516865169651706517165172651736517465175651766517765178651796518065181651826518365184651856518665187651886518965190651916519265193651946519565196651976519865199652006520165202652036520465205652066520765208652096521065211652126521365214652156521665217652186521965220652216522265223652246522565226652276522865229652306523165232652336523465235652366523765238652396524065241652426524365244652456524665247652486524965250652516525265253652546525565256652576525865259652606526165262652636526465265652666526765268652696527065271652726527365274652756527665277652786527965280652816528265283652846528565286652876528865289652906529165292652936529465295652966529765298652996530065301653026530365304653056530665307653086530965310653116531265313653146531565316653176531865319653206532165322653236532465325653266532765328653296533065331653326533365334653356533665337653386533965340653416534265343653446534565346653476534865349653506535165352653536535465355653566535765358653596536065361653626536365364653656536665367653686536965370653716537265373653746537565376653776537865379653806538165382653836538465385653866538765388653896539065391653926539365394653956539665397653986539965400654016540265403654046540565406654076540865409654106541165412654136541465415654166541765418654196542065421654226542365424654256542665427654286542965430654316543265433654346543565436654376543865439654406544165442654436544465445654466544765448654496545065451654526545365454654556545665457654586545965460654616546265463654646546565466654676546865469654706547165472654736547465475654766547765478654796548065481654826548365484654856548665487654886548965490654916549265493654946549565496654976549865499655006550165502655036550465505655066550765508655096551065511655126551365514655156551665517655186551965520655216552265523655246552565526655276552865529655306553165532655336553465535655366553765538655396554065541655426554365544655456554665547655486554965550655516555265553655546555565556655576555865559655606556165562655636556465565655666556765568655696557065571655726557365574655756557665577655786557965580655816558265583655846558565586655876558865589655906559165592655936559465595655966559765598655996560065601656026560365604656056560665607656086560965610656116561265613656146561565616656176561865619656206562165622656236562465625656266562765628656296563065631656326563365634656356563665637656386563965640656416564265643656446564565646656476564865649656506565165652656536565465655656566565765658656596566065661656626566365664656656566665667656686566965670656716567265673656746567565676656776567865679656806568165682656836568465685656866568765688656896569065691656926569365694656956569665697656986569965700657016570265703657046570565706657076570865709657106571165712657136571465715657166571765718657196572065721657226572365724657256572665727657286572965730657316573265733657346573565736657376573865739657406574165742657436574465745657466574765748657496575065751657526575365754657556575665757657586575965760657616576265763657646576565766657676576865769657706577165772657736577465775657766577765778657796578065781657826578365784657856578665787657886578965790657916579265793657946579565796657976579865799658006580165802658036580465805658066580765808658096581065811658126581365814658156581665817658186581965820658216582265823658246582565826658276582865829658306583165832658336583465835658366583765838658396584065841658426584365844658456584665847658486584965850658516585265853658546585565856658576585865859658606586165862658636586465865658666586765868658696587065871658726587365874658756587665877658786587965880658816588265883658846588565886658876588865889658906589165892658936589465895658966589765898658996590065901659026590365904659056590665907659086590965910659116591265913659146591565916659176591865919659206592165922659236592465925659266592765928659296593065931659326593365934659356593665937659386593965940659416594265943659446594565946659476594865949659506595165952659536595465955659566595765958659596596065961659626596365964659656596665967659686596965970659716597265973659746597565976659776597865979659806598165982659836598465985659866598765988659896599065991659926599365994659956599665997659986599966000660016600266003660046600566006660076600866009660106601166012660136601466015660166601766018660196602066021660226602366024660256602666027660286602966030660316603266033660346603566036660376603866039660406604166042660436604466045660466604766048660496605066051660526605366054660556605666057660586605966060660616606266063660646606566066660676606866069660706607166072660736607466075660766607766078660796608066081660826608366084660856608666087660886608966090660916609266093660946609566096660976609866099661006610166102661036610466105661066610766108661096611066111661126611366114661156611666117661186611966120661216612266123661246612566126661276612866129661306613166132661336613466135661366613766138661396614066141661426614366144661456614666147661486614966150661516615266153661546615566156661576615866159661606616166162661636616466165661666616766168661696617066171661726617366174661756617666177661786617966180661816618266183661846618566186661876618866189661906619166192661936619466195661966619766198661996620066201662026620366204662056620666207662086620966210662116621266213662146621566216662176621866219662206622166222662236622466225662266622766228662296623066231662326623366234662356623666237662386623966240662416624266243662446624566246662476624866249662506625166252662536625466255662566625766258662596626066261662626626366264662656626666267662686626966270662716627266273662746627566276662776627866279662806628166282662836628466285662866628766288662896629066291662926629366294662956629666297662986629966300663016630266303663046630566306663076630866309663106631166312663136631466315663166631766318663196632066321663226632366324663256632666327663286632966330663316633266333663346633566336663376633866339663406634166342663436634466345663466634766348663496635066351663526635366354663556635666357663586635966360663616636266363663646636566366663676636866369663706637166372663736637466375663766637766378663796638066381663826638366384663856638666387663886638966390663916639266393663946639566396663976639866399664006640166402664036640466405664066640766408664096641066411664126641366414664156641666417664186641966420664216642266423664246642566426664276642866429664306643166432664336643466435664366643766438664396644066441664426644366444664456644666447664486644966450664516645266453664546645566456664576645866459664606646166462664636646466465664666646766468664696647066471664726647366474664756647666477664786647966480664816648266483664846648566486664876648866489664906649166492664936649466495664966649766498664996650066501665026650366504665056650666507665086650966510665116651266513665146651566516665176651866519665206652166522665236652466525665266652766528665296653066531665326653366534665356653666537665386653966540665416654266543665446654566546665476654866549665506655166552665536655466555665566655766558665596656066561665626656366564665656656666567665686656966570665716657266573665746657566576665776657866579665806658166582665836658466585665866658766588665896659066591665926659366594665956659666597665986659966600666016660266603666046660566606666076660866609666106661166612666136661466615666166661766618666196662066621666226662366624666256662666627666286662966630666316663266633666346663566636666376663866639666406664166642666436664466645666466664766648666496665066651666526665366654666556665666657666586665966660666616666266663666646666566666666676666866669666706667166672666736667466675666766667766678666796668066681666826668366684666856668666687666886668966690666916669266693666946669566696666976669866699667006670166702667036670466705667066670766708667096671066711667126671366714667156671666717667186671966720667216672266723667246672566726667276672866729667306673166732667336673466735667366673766738667396674066741667426674366744667456674666747667486674966750667516675266753667546675566756667576675866759667606676166762667636676466765667666676766768667696677066771667726677366774667756677666777667786677966780667816678266783667846678566786667876678866789667906679166792667936679466795667966679766798667996680066801668026680366804668056680666807668086680966810668116681266813668146681566816668176681866819668206682166822668236682466825668266682766828668296683066831668326683366834668356683666837668386683966840668416684266843668446684566846668476684866849668506685166852668536685466855668566685766858668596686066861668626686366864668656686666867668686686966870668716687266873668746687566876668776687866879668806688166882668836688466885668866688766888668896689066891668926689366894668956689666897668986689966900669016690266903669046690566906669076690866909669106691166912669136691466915669166691766918669196692066921669226692366924669256692666927669286692966930669316693266933669346693566936669376693866939669406694166942669436694466945669466694766948669496695066951669526695366954669556695666957669586695966960669616696266963669646696566966669676696866969669706697166972669736697466975669766697766978669796698066981669826698366984669856698666987669886698966990669916699266993669946699566996669976699866999670006700167002670036700467005670066700767008670096701067011670126701367014670156701667017670186701967020670216702267023670246702567026670276702867029670306703167032670336703467035670366703767038670396704067041670426704367044670456704667047670486704967050670516705267053670546705567056670576705867059670606706167062670636706467065670666706767068670696707067071670726707367074670756707667077670786707967080670816708267083670846708567086670876708867089670906709167092670936709467095670966709767098670996710067101671026710367104671056710667107671086710967110671116711267113671146711567116671176711867119671206712167122671236712467125671266712767128671296713067131671326713367134671356713667137671386713967140671416714267143671446714567146671476714867149671506715167152671536715467155671566715767158671596716067161671626716367164671656716667167671686716967170671716717267173671746717567176671776717867179671806718167182671836718467185671866718767188671896719067191671926719367194671956719667197671986719967200672016720267203672046720567206672076720867209672106721167212672136721467215672166721767218672196722067221672226722367224672256722667227672286722967230672316723267233672346723567236672376723867239672406724167242672436724467245672466724767248672496725067251672526725367254672556725667257672586725967260672616726267263672646726567266672676726867269672706727167272672736727467275672766727767278672796728067281672826728367284672856728667287672886728967290672916729267293672946729567296672976729867299673006730167302673036730467305673066730767308673096731067311673126731367314673156731667317673186731967320673216732267323673246732567326673276732867329673306733167332673336733467335673366733767338673396734067341673426734367344673456734667347673486734967350673516735267353673546735567356673576735867359673606736167362673636736467365673666736767368673696737067371673726737367374673756737667377673786737967380673816738267383673846738567386673876738867389673906739167392673936739467395673966739767398673996740067401674026740367404674056740667407674086740967410674116741267413674146741567416674176741867419674206742167422674236742467425674266742767428674296743067431674326743367434674356743667437674386743967440674416744267443674446744567446674476744867449674506745167452674536745467455674566745767458674596746067461674626746367464674656746667467674686746967470674716747267473674746747567476674776747867479674806748167482674836748467485674866748767488674896749067491674926749367494674956749667497674986749967500675016750267503675046750567506675076750867509675106751167512675136751467515675166751767518675196752067521675226752367524675256752667527675286752967530675316753267533675346753567536675376753867539675406754167542675436754467545675466754767548675496755067551675526755367554675556755667557675586755967560675616756267563675646756567566675676756867569675706757167572675736757467575675766757767578675796758067581675826758367584675856758667587675886758967590675916759267593675946759567596675976759867599676006760167602676036760467605676066760767608676096761067611676126761367614676156761667617676186761967620676216762267623676246762567626676276762867629676306763167632676336763467635676366763767638676396764067641676426764367644676456764667647676486764967650676516765267653676546765567656676576765867659676606766167662676636766467665676666766767668676696767067671676726767367674676756767667677676786767967680676816768267683676846768567686676876768867689676906769167692676936769467695676966769767698676996770067701677026770367704677056770667707677086770967710677116771267713677146771567716677176771867719677206772167722677236772467725677266772767728677296773067731677326773367734677356773667737677386773967740677416774267743677446774567746677476774867749677506775167752677536775467755677566775767758677596776067761677626776367764677656776667767677686776967770677716777267773677746777567776677776777867779677806778167782677836778467785677866778767788677896779067791677926779367794677956779667797677986779967800678016780267803678046780567806678076780867809678106781167812678136781467815678166781767818678196782067821678226782367824678256782667827678286782967830678316783267833678346783567836678376783867839678406784167842678436784467845678466784767848678496785067851678526785367854678556785667857678586785967860678616786267863678646786567866678676786867869678706787167872678736787467875678766787767878678796788067881678826788367884678856788667887678886788967890678916789267893678946789567896678976789867899679006790167902679036790467905679066790767908679096791067911679126791367914679156791667917679186791967920679216792267923679246792567926679276792867929679306793167932679336793467935679366793767938679396794067941679426794367944679456794667947679486794967950679516795267953679546795567956679576795867959679606796167962679636796467965679666796767968679696797067971679726797367974679756797667977679786797967980679816798267983679846798567986679876798867989679906799167992679936799467995679966799767998679996800068001680026800368004680056800668007680086800968010680116801268013680146801568016680176801868019680206802168022680236802468025680266802768028680296803068031680326803368034680356803668037680386803968040680416804268043680446804568046680476804868049680506805168052680536805468055680566805768058680596806068061680626806368064680656806668067680686806968070680716807268073680746807568076680776807868079680806808168082680836808468085680866808768088680896809068091680926809368094680956809668097680986809968100681016810268103681046810568106681076810868109681106811168112681136811468115681166811768118681196812068121681226812368124681256812668127681286812968130681316813268133681346813568136681376813868139681406814168142681436814468145681466814768148681496815068151681526815368154681556815668157681586815968160681616816268163681646816568166681676816868169681706817168172681736817468175681766817768178681796818068181681826818368184681856818668187681886818968190681916819268193681946819568196681976819868199682006820168202682036820468205682066820768208682096821068211682126821368214682156821668217682186821968220682216822268223682246822568226682276822868229682306823168232682336823468235682366823768238682396824068241682426824368244682456824668247682486824968250682516825268253682546825568256682576825868259682606826168262682636826468265682666826768268682696827068271682726827368274682756827668277682786827968280682816828268283682846828568286682876828868289682906829168292682936829468295682966829768298682996830068301683026830368304683056830668307683086830968310683116831268313683146831568316683176831868319683206832168322683236832468325683266832768328683296833068331683326833368334683356833668337683386833968340683416834268343683446834568346683476834868349683506835168352683536835468355683566835768358683596836068361683626836368364683656836668367683686836968370683716837268373683746837568376683776837868379683806838168382683836838468385683866838768388683896839068391683926839368394683956839668397683986839968400684016840268403684046840568406684076840868409684106841168412684136841468415684166841768418684196842068421684226842368424684256842668427684286842968430684316843268433684346843568436684376843868439684406844168442684436844468445684466844768448684496845068451684526845368454684556845668457684586845968460684616846268463684646846568466684676846868469684706847168472684736847468475684766847768478684796848068481684826848368484684856848668487684886848968490684916849268493684946849568496684976849868499685006850168502685036850468505685066850768508685096851068511685126851368514685156851668517685186851968520685216852268523685246852568526685276852868529685306853168532685336853468535685366853768538685396854068541685426854368544685456854668547685486854968550685516855268553685546855568556685576855868559685606856168562685636856468565685666856768568685696857068571685726857368574685756857668577685786857968580685816858268583685846858568586685876858868589685906859168592685936859468595685966859768598685996860068601686026860368604686056860668607686086860968610686116861268613686146861568616686176861868619686206862168622686236862468625686266862768628686296863068631686326863368634686356863668637686386863968640686416864268643686446864568646686476864868649686506865168652686536865468655686566865768658686596866068661686626866368664686656866668667686686866968670686716867268673686746867568676686776867868679686806868168682686836868468685686866868768688686896869068691686926869368694686956869668697686986869968700687016870268703687046870568706687076870868709687106871168712687136871468715687166871768718687196872068721687226872368724687256872668727687286872968730687316873268733687346873568736687376873868739687406874168742687436874468745687466874768748687496875068751687526875368754687556875668757687586875968760687616876268763687646876568766687676876868769687706877168772687736877468775687766877768778687796878068781687826878368784687856878668787687886878968790687916879268793687946879568796687976879868799688006880168802688036880468805688066880768808688096881068811688126881368814688156881668817688186881968820688216882268823688246882568826688276882868829688306883168832688336883468835688366883768838688396884068841688426884368844688456884668847688486884968850688516885268853688546885568856688576885868859688606886168862688636886468865688666886768868688696887068871688726887368874688756887668877688786887968880688816888268883688846888568886688876888868889688906889168892688936889468895688966889768898688996890068901689026890368904689056890668907689086890968910689116891268913689146891568916689176891868919689206892168922689236892468925689266892768928689296893068931689326893368934689356893668937689386893968940689416894268943689446894568946689476894868949689506895168952689536895468955689566895768958689596896068961689626896368964689656896668967689686896968970689716897268973689746897568976689776897868979689806898168982689836898468985689866898768988689896899068991689926899368994689956899668997689986899969000690016900269003690046900569006690076900869009690106901169012690136901469015690166901769018690196902069021690226902369024690256902669027690286902969030690316903269033690346903569036690376903869039690406904169042690436904469045690466904769048690496905069051690526905369054690556905669057690586905969060690616906269063690646906569066690676906869069690706907169072690736907469075690766907769078690796908069081690826908369084690856908669087690886908969090690916909269093690946909569096690976909869099691006910169102691036910469105691066910769108691096911069111691126911369114691156911669117691186911969120691216912269123691246912569126691276912869129691306913169132691336913469135691366913769138691396914069141691426914369144691456914669147691486914969150691516915269153691546915569156691576915869159691606916169162691636916469165691666916769168691696917069171691726917369174691756917669177691786917969180691816918269183691846918569186691876918869189691906919169192691936919469195691966919769198691996920069201692026920369204692056920669207692086920969210692116921269213692146921569216692176921869219692206922169222692236922469225692266922769228692296923069231692326923369234692356923669237692386923969240692416924269243692446924569246692476924869249692506925169252692536925469255692566925769258692596926069261692626926369264692656926669267692686926969270692716927269273692746927569276692776927869279692806928169282692836928469285692866928769288692896929069291692926929369294692956929669297692986929969300693016930269303693046930569306693076930869309693106931169312693136931469315693166931769318693196932069321693226932369324693256932669327693286932969330693316933269333693346933569336693376933869339693406934169342693436934469345693466934769348693496935069351693526935369354693556935669357693586935969360693616936269363693646936569366693676936869369693706937169372693736937469375693766937769378693796938069381693826938369384693856938669387693886938969390693916939269393693946939569396693976939869399694006940169402694036940469405694066940769408694096941069411694126941369414694156941669417694186941969420694216942269423694246942569426694276942869429694306943169432694336943469435694366943769438694396944069441694426944369444694456944669447694486944969450694516945269453694546945569456694576945869459694606946169462694636946469465694666946769468694696947069471694726947369474694756947669477694786947969480694816948269483694846948569486694876948869489694906949169492694936949469495694966949769498694996950069501695026950369504695056950669507695086950969510695116951269513695146951569516695176951869519695206952169522695236952469525695266952769528695296953069531695326953369534695356953669537695386953969540695416954269543695446954569546695476954869549695506955169552695536955469555695566955769558695596956069561695626956369564695656956669567695686956969570695716957269573695746957569576695776957869579695806958169582695836958469585695866958769588695896959069591695926959369594695956959669597695986959969600696016960269603696046960569606696076960869609696106961169612696136961469615696166961769618696196962069621696226962369624696256962669627696286962969630696316963269633696346963569636696376963869639696406964169642696436964469645696466964769648696496965069651696526965369654696556965669657696586965969660696616966269663696646966569666696676966869669696706967169672696736967469675696766967769678696796968069681696826968369684696856968669687696886968969690696916969269693696946969569696696976969869699697006970169702697036970469705697066970769708697096971069711697126971369714697156971669717697186971969720697216972269723697246972569726697276972869729697306973169732697336973469735697366973769738697396974069741697426974369744697456974669747697486974969750697516975269753697546975569756697576975869759697606976169762697636976469765697666976769768697696977069771697726977369774697756977669777697786977969780697816978269783697846978569786697876978869789697906979169792697936979469795697966979769798697996980069801698026980369804698056980669807698086980969810698116981269813698146981569816698176981869819698206982169822698236982469825698266982769828698296983069831698326983369834698356983669837698386983969840698416984269843698446984569846698476984869849698506985169852698536985469855698566985769858698596986069861698626986369864698656986669867698686986969870698716987269873698746987569876698776987869879698806988169882698836988469885698866988769888698896989069891698926989369894698956989669897698986989969900699016990269903699046990569906699076990869909699106991169912699136991469915699166991769918699196992069921699226992369924699256992669927699286992969930699316993269933699346993569936699376993869939699406994169942699436994469945699466994769948699496995069951699526995369954699556995669957699586995969960699616996269963699646996569966699676996869969699706997169972699736997469975699766997769978699796998069981699826998369984699856998669987699886998969990699916999269993699946999569996699976999869999700007000170002700037000470005700067000770008700097001070011700127001370014700157001670017700187001970020700217002270023700247002570026700277002870029700307003170032700337003470035700367003770038700397004070041700427004370044700457004670047700487004970050700517005270053700547005570056700577005870059700607006170062700637006470065700667006770068700697007070071700727007370074700757007670077700787007970080700817008270083700847008570086700877008870089700907009170092700937009470095700967009770098700997010070101701027010370104701057010670107701087010970110701117011270113701147011570116701177011870119701207012170122701237012470125701267012770128701297013070131701327013370134701357013670137701387013970140701417014270143701447014570146701477014870149701507015170152701537015470155701567015770158701597016070161701627016370164701657016670167701687016970170701717017270173701747017570176701777017870179701807018170182701837018470185701867018770188701897019070191701927019370194701957019670197701987019970200702017020270203702047020570206702077020870209702107021170212702137021470215702167021770218702197022070221702227022370224702257022670227702287022970230702317023270233702347023570236702377023870239702407024170242702437024470245702467024770248702497025070251702527025370254702557025670257702587025970260702617026270263702647026570266702677026870269702707027170272702737027470275702767027770278702797028070281702827028370284702857028670287702887028970290702917029270293702947029570296702977029870299703007030170302703037030470305703067030770308703097031070311703127031370314703157031670317703187031970320703217032270323703247032570326703277032870329703307033170332703337033470335703367033770338703397034070341703427034370344703457034670347703487034970350703517035270353703547035570356703577035870359703607036170362703637036470365703667036770368703697037070371703727037370374703757037670377703787037970380703817038270383703847038570386703877038870389703907039170392703937039470395703967039770398703997040070401704027040370404704057040670407704087040970410704117041270413704147041570416704177041870419704207042170422704237042470425704267042770428704297043070431704327043370434704357043670437704387043970440704417044270443704447044570446704477044870449704507045170452704537045470455704567045770458704597046070461704627046370464704657046670467704687046970470704717047270473704747047570476704777047870479704807048170482704837048470485704867048770488704897049070491704927049370494704957049670497704987049970500705017050270503705047050570506705077050870509705107051170512705137051470515705167051770518705197052070521705227052370524705257052670527705287052970530705317053270533705347053570536705377053870539705407054170542705437054470545705467054770548705497055070551705527055370554705557055670557705587055970560705617056270563705647056570566705677056870569705707057170572705737057470575705767057770578705797058070581705827058370584705857058670587705887058970590705917059270593705947059570596705977059870599706007060170602706037060470605706067060770608706097061070611706127061370614706157061670617706187061970620706217062270623706247062570626706277062870629706307063170632706337063470635706367063770638706397064070641706427064370644706457064670647706487064970650706517065270653706547065570656706577065870659706607066170662706637066470665706667066770668706697067070671706727067370674706757067670677706787067970680706817068270683706847068570686706877068870689706907069170692706937069470695706967069770698706997070070701707027070370704707057070670707707087070970710707117071270713707147071570716707177071870719707207072170722707237072470725707267072770728707297073070731707327073370734707357073670737707387073970740707417074270743707447074570746707477074870749707507075170752707537075470755707567075770758707597076070761707627076370764707657076670767707687076970770707717077270773707747077570776707777077870779707807078170782707837078470785707867078770788707897079070791707927079370794707957079670797707987079970800708017080270803708047080570806708077080870809708107081170812708137081470815708167081770818708197082070821708227082370824708257082670827708287082970830708317083270833708347083570836708377083870839708407084170842708437084470845708467084770848708497085070851708527085370854708557085670857708587085970860708617086270863708647086570866708677086870869708707087170872708737087470875708767087770878708797088070881708827088370884708857088670887708887088970890708917089270893708947089570896708977089870899709007090170902709037090470905709067090770908709097091070911709127091370914709157091670917709187091970920709217092270923709247092570926709277092870929709307093170932709337093470935709367093770938709397094070941709427094370944709457094670947709487094970950709517095270953709547095570956709577095870959709607096170962709637096470965709667096770968709697097070971709727097370974709757097670977709787097970980709817098270983709847098570986709877098870989709907099170992709937099470995709967099770998709997100071001710027100371004710057100671007710087100971010710117101271013710147101571016710177101871019710207102171022710237102471025710267102771028710297103071031710327103371034710357103671037710387103971040710417104271043710447104571046710477104871049710507105171052710537105471055710567105771058710597106071061710627106371064710657106671067710687106971070710717107271073710747107571076710777107871079710807108171082710837108471085710867108771088710897109071091710927109371094710957109671097710987109971100711017110271103711047110571106711077110871109711107111171112711137111471115711167111771118711197112071121711227112371124711257112671127711287112971130711317113271133711347113571136711377113871139711407114171142711437114471145711467114771148711497115071151711527115371154711557115671157711587115971160711617116271163711647116571166711677116871169711707117171172711737117471175711767117771178711797118071181711827118371184711857118671187711887118971190711917119271193711947119571196711977119871199712007120171202712037120471205712067120771208712097121071211712127121371214712157121671217712187121971220712217122271223712247122571226712277122871229712307123171232712337123471235712367123771238712397124071241712427124371244712457124671247712487124971250712517125271253712547125571256712577125871259712607126171262712637126471265712667126771268712697127071271712727127371274712757127671277712787127971280712817128271283712847128571286712877128871289712907129171292712937129471295712967129771298712997130071301713027130371304713057130671307713087130971310713117131271313713147131571316713177131871319713207132171322713237132471325713267132771328713297133071331713327133371334713357133671337713387133971340713417134271343713447134571346713477134871349713507135171352713537135471355713567135771358713597136071361713627136371364713657136671367713687136971370713717137271373713747137571376713777137871379713807138171382713837138471385713867138771388713897139071391713927139371394713957139671397713987139971400714017140271403714047140571406714077140871409714107141171412714137141471415714167141771418714197142071421714227142371424714257142671427714287142971430714317143271433714347143571436714377143871439714407144171442714437144471445714467144771448714497145071451714527145371454714557145671457714587145971460714617146271463714647146571466714677146871469714707147171472714737147471475714767147771478714797148071481714827148371484714857148671487714887148971490714917149271493714947149571496714977149871499715007150171502715037150471505715067150771508715097151071511715127151371514715157151671517715187151971520715217152271523715247152571526715277152871529715307153171532715337153471535715367153771538715397154071541715427154371544715457154671547715487154971550715517155271553715547155571556715577155871559715607156171562715637156471565715667156771568715697157071571715727157371574715757157671577715787157971580715817158271583715847158571586715877158871589715907159171592715937159471595715967159771598715997160071601716027160371604716057160671607716087160971610716117161271613716147161571616716177161871619716207162171622716237162471625716267162771628716297163071631716327163371634716357163671637716387163971640716417164271643716447164571646716477164871649716507165171652716537165471655716567165771658716597166071661716627166371664716657166671667716687166971670716717167271673716747167571676716777167871679716807168171682716837168471685716867168771688716897169071691716927169371694716957169671697716987169971700717017170271703717047170571706717077170871709717107171171712717137171471715717167171771718717197172071721717227172371724717257172671727717287172971730717317173271733717347173571736717377173871739717407174171742717437174471745717467174771748717497175071751717527175371754717557175671757717587175971760717617176271763717647176571766717677176871769717707177171772717737177471775717767177771778717797178071781717827178371784717857178671787717887178971790717917179271793717947179571796717977179871799718007180171802718037180471805718067180771808718097181071811718127181371814718157181671817718187181971820718217182271823718247182571826718277182871829718307183171832718337183471835718367183771838718397184071841718427184371844718457184671847718487184971850718517185271853718547185571856718577185871859718607186171862718637186471865718667186771868718697187071871718727187371874718757187671877718787187971880718817188271883718847188571886718877188871889718907189171892718937189471895718967189771898718997190071901719027190371904719057190671907719087190971910719117191271913719147191571916719177191871919719207192171922719237192471925719267192771928719297193071931719327193371934719357193671937719387193971940719417194271943719447194571946719477194871949719507195171952719537195471955719567195771958719597196071961719627196371964719657196671967719687196971970719717197271973719747197571976719777197871979719807198171982719837198471985719867198771988719897199071991719927199371994719957199671997719987199972000720017200272003720047200572006720077200872009720107201172012720137201472015720167201772018720197202072021720227202372024720257202672027720287202972030720317203272033720347203572036720377203872039720407204172042720437204472045720467204772048720497205072051720527205372054720557205672057720587205972060720617206272063720647206572066720677206872069720707207172072720737207472075720767207772078720797208072081720827208372084720857208672087720887208972090720917209272093720947209572096720977209872099721007210172102721037210472105721067210772108721097211072111721127211372114721157211672117721187211972120721217212272123721247212572126721277212872129721307213172132721337213472135721367213772138721397214072141721427214372144721457214672147721487214972150721517215272153721547215572156721577215872159721607216172162721637216472165721667216772168721697217072171721727217372174721757217672177721787217972180721817218272183721847218572186721877218872189721907219172192721937219472195721967219772198721997220072201722027220372204722057220672207722087220972210722117221272213722147221572216722177221872219722207222172222722237222472225722267222772228722297223072231722327223372234722357223672237722387223972240722417224272243722447224572246722477224872249722507225172252722537225472255722567225772258722597226072261722627226372264722657226672267722687226972270722717227272273722747227572276722777227872279722807228172282722837228472285722867228772288722897229072291722927229372294722957229672297722987229972300723017230272303723047230572306723077230872309723107231172312723137231472315723167231772318723197232072321723227232372324723257232672327723287232972330723317233272333723347233572336723377233872339723407234172342723437234472345723467234772348723497235072351723527235372354723557235672357723587235972360723617236272363723647236572366723677236872369723707237172372723737237472375723767237772378723797238072381723827238372384723857238672387723887238972390723917239272393723947239572396723977239872399724007240172402724037240472405724067240772408724097241072411724127241372414724157241672417724187241972420724217242272423724247242572426724277242872429724307243172432724337243472435724367243772438724397244072441724427244372444724457244672447724487244972450724517245272453724547245572456724577245872459724607246172462724637246472465724667246772468724697247072471724727247372474724757247672477724787247972480724817248272483724847248572486724877248872489724907249172492724937249472495724967249772498724997250072501725027250372504725057250672507725087250972510725117251272513725147251572516725177251872519725207252172522725237252472525725267252772528725297253072531725327253372534725357253672537725387253972540725417254272543725447254572546725477254872549725507255172552725537255472555725567255772558725597256072561725627256372564725657256672567725687256972570725717257272573725747257572576725777257872579725807258172582725837258472585725867258772588725897259072591725927259372594725957259672597725987259972600726017260272603726047260572606726077260872609726107261172612726137261472615726167261772618726197262072621726227262372624726257262672627726287262972630726317263272633726347263572636726377263872639726407264172642726437264472645726467264772648726497265072651726527265372654726557265672657726587265972660726617266272663726647266572666726677266872669726707267172672726737267472675726767267772678726797268072681726827268372684726857268672687726887268972690726917269272693726947269572696726977269872699727007270172702727037270472705727067270772708727097271072711727127271372714727157271672717727187271972720727217272272723727247272572726727277272872729727307273172732727337273472735727367273772738727397274072741727427274372744727457274672747727487274972750727517275272753727547275572756727577275872759727607276172762727637276472765727667276772768727697277072771727727277372774727757277672777727787277972780727817278272783727847278572786727877278872789727907279172792727937279472795727967279772798727997280072801728027280372804728057280672807728087280972810728117281272813728147281572816728177281872819728207282172822728237282472825728267282772828728297283072831728327283372834728357283672837728387283972840728417284272843728447284572846728477284872849728507285172852728537285472855728567285772858728597286072861728627286372864728657286672867728687286972870728717287272873728747287572876728777287872879728807288172882728837288472885728867288772888728897289072891728927289372894728957289672897728987289972900729017290272903729047290572906729077290872909729107291172912729137291472915729167291772918729197292072921729227292372924729257292672927729287292972930729317293272933729347293572936729377293872939729407294172942729437294472945729467294772948729497295072951729527295372954729557295672957729587295972960729617296272963729647296572966729677296872969729707297172972729737297472975729767297772978729797298072981729827298372984729857298672987729887298972990729917299272993729947299572996729977299872999730007300173002730037300473005730067300773008730097301073011730127301373014730157301673017730187301973020730217302273023730247302573026730277302873029730307303173032730337303473035730367303773038730397304073041730427304373044730457304673047730487304973050730517305273053730547305573056730577305873059730607306173062730637306473065730667306773068730697307073071730727307373074730757307673077730787307973080730817308273083730847308573086730877308873089730907309173092730937309473095730967309773098730997310073101731027310373104731057310673107731087310973110731117311273113731147311573116731177311873119731207312173122731237312473125731267312773128731297313073131731327313373134731357313673137731387313973140731417314273143731447314573146731477314873149731507315173152731537315473155731567315773158731597316073161731627316373164731657316673167731687316973170731717317273173731747317573176731777317873179731807318173182731837318473185731867318773188731897319073191731927319373194731957319673197731987319973200732017320273203732047320573206732077320873209732107321173212732137321473215732167321773218732197322073221732227322373224732257322673227732287322973230732317323273233732347323573236732377323873239732407324173242732437324473245732467324773248732497325073251732527325373254732557325673257732587325973260732617326273263732647326573266732677326873269732707327173272732737327473275732767327773278732797328073281732827328373284732857328673287732887328973290732917329273293732947329573296732977329873299733007330173302733037330473305733067330773308733097331073311733127331373314733157331673317733187331973320733217332273323733247332573326733277332873329733307333173332733337333473335733367333773338733397334073341733427334373344733457334673347733487334973350733517335273353733547335573356733577335873359733607336173362733637336473365733667336773368733697337073371733727337373374733757337673377733787337973380733817338273383733847338573386733877338873389733907339173392733937339473395733967339773398733997340073401734027340373404734057340673407734087340973410734117341273413734147341573416734177341873419734207342173422734237342473425734267342773428734297343073431734327343373434734357343673437734387343973440734417344273443734447344573446734477344873449734507345173452734537345473455734567345773458734597346073461734627346373464734657346673467734687346973470734717347273473734747347573476734777347873479734807348173482734837348473485734867348773488734897349073491734927349373494734957349673497734987349973500735017350273503735047350573506735077350873509735107351173512735137351473515735167351773518735197352073521735227352373524735257352673527735287352973530735317353273533735347353573536735377353873539735407354173542735437354473545735467354773548735497355073551735527355373554735557355673557735587355973560735617356273563735647356573566735677356873569735707357173572735737357473575735767357773578735797358073581735827358373584735857358673587735887358973590735917359273593735947359573596735977359873599736007360173602736037360473605736067360773608736097361073611736127361373614736157361673617736187361973620736217362273623736247362573626736277362873629736307363173632736337363473635736367363773638736397364073641736427364373644736457364673647736487364973650736517365273653736547365573656736577365873659736607366173662736637366473665736667366773668736697367073671736727367373674736757367673677736787367973680736817368273683736847368573686736877368873689736907369173692736937369473695736967369773698736997370073701737027370373704737057370673707737087370973710737117371273713737147371573716737177371873719737207372173722737237372473725737267372773728737297373073731737327373373734737357373673737737387373973740737417374273743737447374573746737477374873749737507375173752737537375473755737567375773758737597376073761737627376373764737657376673767737687376973770737717377273773737747377573776737777377873779737807378173782737837378473785737867378773788737897379073791737927379373794737957379673797737987379973800738017380273803738047380573806738077380873809738107381173812738137381473815738167381773818738197382073821738227382373824738257382673827738287382973830738317383273833738347383573836738377383873839738407384173842738437384473845738467384773848738497385073851738527385373854738557385673857738587385973860738617386273863738647386573866738677386873869738707387173872738737387473875738767387773878738797388073881738827388373884738857388673887738887388973890738917389273893738947389573896738977389873899739007390173902739037390473905739067390773908739097391073911739127391373914739157391673917739187391973920739217392273923739247392573926739277392873929739307393173932739337393473935739367393773938739397394073941739427394373944739457394673947739487394973950739517395273953739547395573956739577395873959739607396173962739637396473965739667396773968739697397073971739727397373974739757397673977739787397973980739817398273983739847398573986739877398873989739907399173992739937399473995739967399773998739997400074001740027400374004740057400674007740087400974010740117401274013740147401574016740177401874019740207402174022740237402474025740267402774028740297403074031740327403374034740357403674037740387403974040740417404274043740447404574046740477404874049740507405174052740537405474055740567405774058740597406074061740627406374064740657406674067740687406974070740717407274073740747407574076740777407874079740807408174082740837408474085740867408774088740897409074091740927409374094740957409674097740987409974100741017410274103741047410574106741077410874109741107411174112741137411474115741167411774118741197412074121741227412374124741257412674127741287412974130741317413274133741347413574136741377413874139741407414174142741437414474145741467414774148741497415074151741527415374154741557415674157741587415974160741617416274163741647416574166741677416874169741707417174172741737417474175741767417774178741797418074181741827418374184741857418674187741887418974190741917419274193741947419574196741977419874199742007420174202742037420474205742067420774208742097421074211742127421374214742157421674217742187421974220742217422274223742247422574226742277422874229742307423174232742337423474235742367423774238742397424074241742427424374244742457424674247742487424974250742517425274253742547425574256742577425874259742607426174262742637426474265742667426774268742697427074271742727427374274742757427674277742787427974280742817428274283742847428574286742877428874289742907429174292742937429474295742967429774298742997430074301743027430374304743057430674307743087430974310743117431274313743147431574316743177431874319743207432174322743237432474325743267432774328743297433074331743327433374334743357433674337743387433974340743417434274343743447434574346743477434874349743507435174352743537435474355743567435774358743597436074361743627436374364743657436674367743687436974370743717437274373743747437574376743777437874379743807438174382743837438474385743867438774388743897439074391743927439374394743957439674397743987439974400744017440274403744047440574406744077440874409744107441174412744137441474415744167441774418744197442074421744227442374424744257442674427744287442974430744317443274433744347443574436744377443874439744407444174442744437444474445744467444774448744497445074451744527445374454744557445674457744587445974460744617446274463744647446574466744677446874469744707447174472744737447474475744767447774478744797448074481744827448374484744857448674487744887448974490744917449274493744947449574496744977449874499745007450174502745037450474505745067450774508745097451074511745127451374514745157451674517745187451974520745217452274523745247452574526745277452874529745307453174532745337453474535745367453774538745397454074541745427454374544745457454674547745487454974550745517455274553745547455574556745577455874559745607456174562745637456474565745667456774568745697457074571745727457374574745757457674577745787457974580745817458274583745847458574586745877458874589745907459174592745937459474595745967459774598745997460074601746027460374604746057460674607746087460974610746117461274613746147461574616746177461874619746207462174622746237462474625746267462774628746297463074631746327463374634746357463674637746387463974640746417464274643746447464574646746477464874649746507465174652746537465474655746567465774658746597466074661746627466374664746657466674667746687466974670746717467274673746747467574676746777467874679746807468174682746837468474685746867468774688746897469074691746927469374694746957469674697746987469974700747017470274703747047470574706747077470874709747107471174712747137471474715747167471774718747197472074721747227472374724747257472674727747287472974730747317473274733747347473574736747377473874739747407474174742747437474474745747467474774748747497475074751747527475374754747557475674757747587475974760747617476274763747647476574766747677476874769747707477174772747737477474775747767477774778747797478074781747827478374784747857478674787747887478974790747917479274793747947479574796747977479874799748007480174802748037480474805748067480774808748097481074811748127481374814748157481674817748187481974820748217482274823748247482574826748277482874829748307483174832748337483474835748367483774838748397484074841748427484374844748457484674847748487484974850748517485274853748547485574856748577485874859748607486174862748637486474865748667486774868748697487074871748727487374874748757487674877748787487974880748817488274883748847488574886748877488874889748907489174892748937489474895748967489774898748997490074901749027490374904749057490674907749087490974910749117491274913749147491574916749177491874919749207492174922749237492474925749267492774928749297493074931749327493374934749357493674937749387493974940749417494274943749447494574946749477494874949749507495174952749537495474955749567495774958749597496074961749627496374964749657496674967749687496974970749717497274973749747497574976749777497874979749807498174982749837498474985749867498774988749897499074991749927499374994749957499674997749987499975000750017500275003750047500575006750077500875009750107501175012750137501475015750167501775018750197502075021750227502375024750257502675027750287502975030750317503275033750347503575036750377503875039750407504175042750437504475045750467504775048750497505075051750527505375054750557505675057750587505975060750617506275063750647506575066750677506875069750707507175072750737507475075750767507775078750797508075081750827508375084750857508675087750887508975090750917509275093750947509575096750977509875099751007510175102751037510475105751067510775108751097511075111751127511375114751157511675117751187511975120751217512275123751247512575126751277512875129751307513175132751337513475135751367513775138751397514075141751427514375144751457514675147751487514975150751517515275153751547515575156751577515875159751607516175162751637516475165751667516775168751697517075171751727517375174751757517675177751787517975180751817518275183751847518575186751877518875189751907519175192751937519475195751967519775198751997520075201752027520375204752057520675207752087520975210752117521275213752147521575216752177521875219752207522175222752237522475225752267522775228752297523075231752327523375234752357523675237752387523975240752417524275243752447524575246752477524875249752507525175252752537525475255752567525775258752597526075261752627526375264752657526675267752687526975270752717527275273752747527575276752777527875279752807528175282752837528475285752867528775288752897529075291752927529375294752957529675297752987529975300753017530275303753047530575306753077530875309753107531175312753137531475315753167531775318753197532075321753227532375324753257532675327753287532975330753317533275333753347533575336753377533875339753407534175342753437534475345753467534775348753497535075351753527535375354753557535675357753587535975360753617536275363753647536575366753677536875369753707537175372753737537475375753767537775378753797538075381753827538375384753857538675387753887538975390753917539275393753947539575396753977539875399754007540175402754037540475405754067540775408754097541075411754127541375414754157541675417754187541975420754217542275423754247542575426754277542875429754307543175432754337543475435754367543775438754397544075441754427544375444754457544675447754487544975450754517545275453754547545575456754577545875459754607546175462754637546475465754667546775468754697547075471754727547375474754757547675477754787547975480754817548275483754847548575486754877548875489754907549175492754937549475495754967549775498754997550075501755027550375504755057550675507755087550975510755117551275513755147551575516755177551875519755207552175522755237552475525755267552775528755297553075531755327553375534755357553675537755387553975540755417554275543755447554575546755477554875549755507555175552755537555475555755567555775558755597556075561755627556375564755657556675567755687556975570755717557275573755747557575576755777557875579755807558175582755837558475585755867558775588755897559075591755927559375594755957559675597755987559975600756017560275603756047560575606756077560875609756107561175612756137561475615756167561775618756197562075621756227562375624756257562675627756287562975630756317563275633756347563575636756377563875639756407564175642756437564475645756467564775648756497565075651756527565375654756557565675657756587565975660756617566275663756647566575666756677566875669756707567175672756737567475675756767567775678756797568075681756827568375684756857568675687756887568975690756917569275693756947569575696756977569875699757007570175702757037570475705757067570775708757097571075711757127571375714757157571675717757187571975720757217572275723757247572575726757277572875729757307573175732757337573475735757367573775738757397574075741757427574375744757457574675747757487574975750757517575275753757547575575756757577575875759757607576175762757637576475765757667576775768757697577075771757727577375774757757577675777757787577975780757817578275783757847578575786757877578875789757907579175792757937579475795757967579775798757997580075801758027580375804758057580675807758087580975810758117581275813758147581575816758177581875819758207582175822758237582475825758267582775828758297583075831758327583375834758357583675837758387583975840758417584275843758447584575846758477584875849758507585175852758537585475855758567585775858758597586075861758627586375864758657586675867758687586975870758717587275873758747587575876758777587875879758807588175882758837588475885758867588775888758897589075891758927589375894758957589675897758987589975900759017590275903759047590575906759077590875909759107591175912759137591475915759167591775918759197592075921759227592375924759257592675927759287592975930759317593275933759347593575936759377593875939759407594175942759437594475945759467594775948759497595075951759527595375954759557595675957759587595975960759617596275963759647596575966759677596875969759707597175972759737597475975759767597775978759797598075981759827598375984759857598675987759887598975990759917599275993759947599575996759977599875999760007600176002760037600476005760067600776008760097601076011760127601376014760157601676017760187601976020760217602276023760247602576026760277602876029760307603176032760337603476035760367603776038760397604076041760427604376044760457604676047760487604976050760517605276053760547605576056760577605876059760607606176062760637606476065760667606776068760697607076071760727607376074760757607676077760787607976080760817608276083760847608576086760877608876089760907609176092760937609476095760967609776098760997610076101761027610376104761057610676107761087610976110761117611276113761147611576116761177611876119761207612176122761237612476125761267612776128761297613076131761327613376134761357613676137761387613976140761417614276143761447614576146761477614876149761507615176152761537615476155761567615776158761597616076161761627616376164761657616676167761687616976170761717617276173761747617576176761777617876179761807618176182761837618476185761867618776188761897619076191761927619376194761957619676197761987619976200762017620276203762047620576206762077620876209762107621176212762137621476215762167621776218762197622076221762227622376224762257622676227762287622976230762317623276233762347623576236762377623876239762407624176242762437624476245762467624776248762497625076251762527625376254762557625676257762587625976260762617626276263762647626576266762677626876269762707627176272762737627476275762767627776278762797628076281762827628376284762857628676287762887628976290762917629276293762947629576296762977629876299763007630176302763037630476305763067630776308763097631076311763127631376314763157631676317763187631976320763217632276323763247632576326763277632876329763307633176332763337633476335763367633776338763397634076341763427634376344763457634676347763487634976350763517635276353763547635576356763577635876359763607636176362763637636476365763667636776368763697637076371763727637376374763757637676377763787637976380763817638276383763847638576386763877638876389763907639176392763937639476395763967639776398763997640076401764027640376404764057640676407764087640976410764117641276413764147641576416764177641876419764207642176422764237642476425764267642776428764297643076431764327643376434764357643676437764387643976440764417644276443764447644576446764477644876449764507645176452764537645476455764567645776458764597646076461764627646376464764657646676467764687646976470764717647276473764747647576476764777647876479764807648176482764837648476485764867648776488764897649076491764927649376494764957649676497764987649976500765017650276503765047650576506765077650876509765107651176512765137651476515765167651776518765197652076521765227652376524765257652676527765287652976530765317653276533765347653576536765377653876539765407654176542765437654476545765467654776548765497655076551765527655376554765557655676557765587655976560765617656276563765647656576566765677656876569765707657176572765737657476575765767657776578765797658076581765827658376584765857658676587765887658976590765917659276593765947659576596765977659876599766007660176602766037660476605766067660776608766097661076611766127661376614766157661676617766187661976620766217662276623766247662576626766277662876629766307663176632766337663476635766367663776638766397664076641766427664376644766457664676647766487664976650766517665276653766547665576656766577665876659766607666176662766637666476665766667666776668766697667076671766727667376674766757667676677766787667976680766817668276683766847668576686766877668876689766907669176692766937669476695766967669776698766997670076701767027670376704767057670676707767087670976710767117671276713767147671576716767177671876719767207672176722767237672476725767267672776728767297673076731767327673376734767357673676737767387673976740767417674276743767447674576746767477674876749767507675176752767537675476755767567675776758767597676076761767627676376764767657676676767767687676976770767717677276773767747677576776767777677876779767807678176782767837678476785767867678776788767897679076791767927679376794767957679676797767987679976800768017680276803768047680576806768077680876809768107681176812768137681476815768167681776818768197682076821768227682376824768257682676827768287682976830768317683276833768347683576836768377683876839768407684176842768437684476845768467684776848768497685076851768527685376854768557685676857768587685976860768617686276863768647686576866768677686876869768707687176872768737687476875768767687776878768797688076881768827688376884768857688676887768887688976890768917689276893768947689576896768977689876899769007690176902769037690476905769067690776908769097691076911769127691376914769157691676917769187691976920769217692276923769247692576926769277692876929769307693176932769337693476935769367693776938769397694076941769427694376944769457694676947769487694976950769517695276953769547695576956769577695876959769607696176962769637696476965769667696776968769697697076971769727697376974769757697676977769787697976980769817698276983769847698576986769877698876989769907699176992769937699476995769967699776998769997700077001770027700377004770057700677007770087700977010770117701277013770147701577016770177701877019770207702177022770237702477025770267702777028770297703077031770327703377034770357703677037770387703977040770417704277043770447704577046770477704877049770507705177052770537705477055770567705777058770597706077061770627706377064770657706677067770687706977070770717707277073770747707577076770777707877079770807708177082770837708477085770867708777088770897709077091770927709377094770957709677097770987709977100771017710277103771047710577106771077710877109771107711177112771137711477115771167711777118771197712077121771227712377124771257712677127771287712977130771317713277133771347713577136771377713877139771407714177142771437714477145771467714777148771497715077151771527715377154771557715677157771587715977160771617716277163771647716577166771677716877169771707717177172771737717477175771767717777178771797718077181771827718377184771857718677187771887718977190771917719277193771947719577196771977719877199772007720177202772037720477205772067720777208772097721077211772127721377214772157721677217772187721977220772217722277223772247722577226772277722877229772307723177232772337723477235772367723777238772397724077241772427724377244772457724677247772487724977250772517725277253772547725577256772577725877259772607726177262772637726477265772667726777268772697727077271772727727377274772757727677277772787727977280772817728277283772847728577286772877728877289772907729177292772937729477295772967729777298772997730077301773027730377304773057730677307773087730977310773117731277313773147731577316773177731877319773207732177322773237732477325773267732777328773297733077331773327733377334773357733677337773387733977340773417734277343773447734577346773477734877349773507735177352773537735477355773567735777358773597736077361773627736377364773657736677367773687736977370773717737277373773747737577376773777737877379773807738177382773837738477385773867738777388773897739077391773927739377394773957739677397773987739977400774017740277403774047740577406774077740877409774107741177412774137741477415774167741777418774197742077421774227742377424774257742677427774287742977430774317743277433774347743577436774377743877439774407744177442774437744477445774467744777448774497745077451774527745377454774557745677457774587745977460774617746277463774647746577466774677746877469774707747177472774737747477475774767747777478774797748077481774827748377484774857748677487774887748977490774917749277493774947749577496774977749877499775007750177502775037750477505775067750777508775097751077511775127751377514775157751677517775187751977520775217752277523775247752577526775277752877529775307753177532775337753477535775367753777538775397754077541775427754377544775457754677547775487754977550775517755277553775547755577556775577755877559775607756177562775637756477565775667756777568775697757077571775727757377574775757757677577775787757977580775817758277583775847758577586775877758877589775907759177592775937759477595775967759777598775997760077601776027760377604776057760677607776087760977610776117761277613776147761577616776177761877619776207762177622776237762477625776267762777628776297763077631776327763377634776357763677637776387763977640776417764277643776447764577646776477764877649776507765177652776537765477655776567765777658776597766077661776627766377664776657766677667776687766977670776717767277673776747767577676776777767877679776807768177682776837768477685776867768777688776897769077691776927769377694776957769677697776987769977700777017770277703777047770577706777077770877709777107771177712777137771477715777167771777718777197772077721777227772377724777257772677727777287772977730777317773277733777347773577736777377773877739777407774177742777437774477745777467774777748777497775077751777527775377754777557775677757777587775977760777617776277763777647776577766777677776877769777707777177772777737777477775777767777777778777797778077781777827778377784777857778677787777887778977790777917779277793777947779577796777977779877799778007780177802778037780477805778067780777808778097781077811778127781377814778157781677817778187781977820778217782277823778247782577826778277782877829778307783177832778337783477835778367783777838778397784077841778427784377844778457784677847778487784977850778517785277853778547785577856778577785877859778607786177862778637786477865778667786777868778697787077871778727787377874778757787677877778787787977880778817788277883778847788577886778877788877889778907789177892778937789477895778967789777898778997790077901779027790377904779057790677907779087790977910779117791277913779147791577916779177791877919779207792177922779237792477925779267792777928779297793077931779327793377934779357793677937779387793977940779417794277943779447794577946779477794877949779507795177952779537795477955779567795777958779597796077961779627796377964779657796677967779687796977970779717797277973779747797577976779777797877979779807798177982779837798477985779867798777988779897799077991779927799377994779957799677997779987799978000780017800278003780047800578006780077800878009780107801178012780137801478015780167801778018780197802078021780227802378024780257802678027780287802978030780317803278033780347803578036780377803878039780407804178042780437804478045780467804778048780497805078051780527805378054780557805678057780587805978060780617806278063780647806578066780677806878069780707807178072780737807478075780767807778078780797808078081780827808378084780857808678087780887808978090780917809278093780947809578096780977809878099781007810178102781037810478105781067810778108781097811078111781127811378114781157811678117781187811978120781217812278123781247812578126781277812878129781307813178132781337813478135781367813778138781397814078141781427814378144781457814678147781487814978150781517815278153781547815578156781577815878159781607816178162781637816478165781667816778168781697817078171781727817378174781757817678177781787817978180781817818278183781847818578186781877818878189781907819178192781937819478195781967819778198781997820078201782027820378204782057820678207782087820978210782117821278213782147821578216782177821878219782207822178222782237822478225782267822778228782297823078231782327823378234782357823678237782387823978240782417824278243782447824578246782477824878249782507825178252782537825478255782567825778258782597826078261782627826378264782657826678267782687826978270782717827278273782747827578276782777827878279782807828178282782837828478285782867828778288782897829078291782927829378294782957829678297782987829978300783017830278303783047830578306783077830878309783107831178312783137831478315783167831778318783197832078321783227832378324783257832678327783287832978330783317833278333783347833578336783377833878339783407834178342783437834478345783467834778348783497835078351783527835378354783557835678357783587835978360783617836278363783647836578366783677836878369783707837178372783737837478375783767837778378783797838078381783827838378384783857838678387783887838978390783917839278393783947839578396783977839878399784007840178402784037840478405784067840778408784097841078411784127841378414784157841678417784187841978420784217842278423784247842578426784277842878429784307843178432784337843478435784367843778438784397844078441784427844378444784457844678447784487844978450784517845278453784547845578456784577845878459784607846178462784637846478465784667846778468784697847078471784727847378474784757847678477784787847978480784817848278483784847848578486784877848878489784907849178492784937849478495784967849778498784997850078501785027850378504785057850678507785087850978510785117851278513785147851578516785177851878519785207852178522785237852478525785267852778528785297853078531785327853378534785357853678537785387853978540785417854278543785447854578546785477854878549785507855178552785537855478555785567855778558785597856078561785627856378564785657856678567785687856978570785717857278573785747857578576785777857878579785807858178582785837858478585785867858778588785897859078591785927859378594785957859678597785987859978600786017860278603786047860578606786077860878609786107861178612786137861478615786167861778618786197862078621786227862378624786257862678627786287862978630786317863278633786347863578636786377863878639786407864178642786437864478645786467864778648786497865078651786527865378654786557865678657786587865978660786617866278663786647866578666786677866878669786707867178672786737867478675786767867778678786797868078681786827868378684786857868678687786887868978690786917869278693786947869578696786977869878699787007870178702787037870478705787067870778708787097871078711787127871378714787157871678717787187871978720787217872278723787247872578726787277872878729787307873178732787337873478735787367873778738787397874078741787427874378744787457874678747787487874978750787517875278753787547875578756787577875878759787607876178762787637876478765787667876778768787697877078771787727877378774787757877678777787787877978780787817878278783787847878578786787877878878789787907879178792787937879478795787967879778798787997880078801788027880378804788057880678807788087880978810788117881278813788147881578816788177881878819788207882178822788237882478825788267882778828788297883078831788327883378834788357883678837788387883978840788417884278843788447884578846788477884878849788507885178852788537885478855788567885778858788597886078861788627886378864788657886678867788687886978870788717887278873788747887578876788777887878879788807888178882788837888478885788867888778888788897889078891788927889378894788957889678897788987889978900789017890278903789047890578906789077890878909789107891178912789137891478915789167891778918789197892078921789227892378924789257892678927789287892978930789317893278933789347893578936789377893878939789407894178942789437894478945789467894778948789497895078951789527895378954789557895678957789587895978960789617896278963789647896578966789677896878969789707897178972789737897478975789767897778978789797898078981789827898378984789857898678987789887898978990789917899278993789947899578996789977899878999790007900179002790037900479005790067900779008790097901079011790127901379014790157901679017790187901979020790217902279023790247902579026790277902879029790307903179032790337903479035790367903779038790397904079041790427904379044790457904679047790487904979050790517905279053790547905579056790577905879059790607906179062790637906479065790667906779068790697907079071790727907379074790757907679077790787907979080790817908279083790847908579086790877908879089790907909179092790937909479095790967909779098790997910079101791027910379104791057910679107791087910979110791117911279113791147911579116791177911879119791207912179122791237912479125791267912779128791297913079131791327913379134791357913679137791387913979140791417914279143791447914579146791477914879149791507915179152791537915479155791567915779158791597916079161791627916379164791657916679167791687916979170791717917279173791747917579176791777917879179791807918179182791837918479185791867918779188791897919079191791927919379194791957919679197791987919979200792017920279203792047920579206792077920879209792107921179212792137921479215792167921779218792197922079221792227922379224792257922679227792287922979230792317923279233792347923579236792377923879239792407924179242792437924479245792467924779248792497925079251792527925379254792557925679257792587925979260792617926279263792647926579266792677926879269792707927179272792737927479275792767927779278792797928079281792827928379284792857928679287792887928979290792917929279293792947929579296792977929879299793007930179302793037930479305793067930779308793097931079311793127931379314793157931679317793187931979320793217932279323793247932579326793277932879329793307933179332793337933479335793367933779338793397934079341793427934379344793457934679347793487934979350793517935279353793547935579356793577935879359793607936179362793637936479365793667936779368793697937079371793727937379374793757937679377793787937979380793817938279383793847938579386793877938879389793907939179392793937939479395793967939779398793997940079401794027940379404794057940679407794087940979410794117941279413794147941579416794177941879419794207942179422794237942479425794267942779428794297943079431794327943379434794357943679437794387943979440794417944279443794447944579446794477944879449794507945179452794537945479455794567945779458794597946079461794627946379464794657946679467794687946979470794717947279473794747947579476794777947879479794807948179482794837948479485794867948779488794897949079491794927949379494794957949679497794987949979500795017950279503795047950579506795077950879509795107951179512795137951479515795167951779518795197952079521795227952379524795257952679527795287952979530795317953279533795347953579536795377953879539795407954179542795437954479545795467954779548795497955079551795527955379554795557955679557795587955979560795617956279563795647956579566795677956879569795707957179572795737957479575795767957779578795797958079581795827958379584795857958679587795887958979590795917959279593795947959579596795977959879599796007960179602796037960479605796067960779608796097961079611796127961379614796157961679617796187961979620796217962279623796247962579626796277962879629796307963179632796337963479635796367963779638796397964079641796427964379644796457964679647796487964979650796517965279653796547965579656796577965879659796607966179662796637966479665796667966779668796697967079671796727967379674796757967679677796787967979680796817968279683796847968579686796877968879689796907969179692796937969479695796967969779698796997970079701797027970379704797057970679707797087970979710797117971279713797147971579716797177971879719797207972179722797237972479725797267972779728797297973079731797327973379734797357973679737797387973979740797417974279743797447974579746797477974879749797507975179752797537975479755797567975779758797597976079761797627976379764797657976679767797687976979770797717977279773797747977579776797777977879779797807978179782797837978479785797867978779788797897979079791797927979379794797957979679797797987979979800798017980279803798047980579806798077980879809798107981179812798137981479815798167981779818798197982079821798227982379824798257982679827798287982979830798317983279833798347983579836798377983879839798407984179842798437984479845798467984779848798497985079851798527985379854798557985679857798587985979860798617986279863798647986579866798677986879869798707987179872798737987479875798767987779878798797988079881798827988379884798857988679887798887988979890798917989279893798947989579896798977989879899799007990179902799037990479905799067990779908799097991079911799127991379914799157991679917799187991979920799217992279923799247992579926799277992879929799307993179932799337993479935799367993779938799397994079941799427994379944799457994679947799487994979950799517995279953799547995579956799577995879959799607996179962799637996479965799667996779968799697997079971799727997379974799757997679977799787997979980799817998279983799847998579986799877998879989799907999179992799937999479995799967999779998799998000080001800028000380004800058000680007800088000980010800118001280013800148001580016800178001880019800208002180022800238002480025800268002780028800298003080031800328003380034800358003680037800388003980040800418004280043800448004580046800478004880049800508005180052800538005480055800568005780058800598006080061800628006380064800658006680067800688006980070800718007280073800748007580076800778007880079800808008180082800838008480085800868008780088800898009080091800928009380094800958009680097800988009980100801018010280103801048010580106801078010880109801108011180112801138011480115801168011780118801198012080121801228012380124801258012680127801288012980130801318013280133801348013580136801378013880139801408014180142801438014480145801468014780148801498015080151801528015380154801558015680157801588015980160801618016280163801648016580166801678016880169801708017180172801738017480175801768017780178801798018080181801828018380184801858018680187801888018980190801918019280193801948019580196801978019880199802008020180202802038020480205802068020780208802098021080211802128021380214802158021680217802188021980220802218022280223802248022580226802278022880229802308023180232802338023480235802368023780238802398024080241802428024380244802458024680247802488024980250802518025280253802548025580256802578025880259802608026180262802638026480265802668026780268802698027080271802728027380274802758027680277802788027980280802818028280283802848028580286802878028880289802908029180292802938029480295802968029780298802998030080301803028030380304803058030680307803088030980310803118031280313803148031580316803178031880319803208032180322803238032480325803268032780328803298033080331803328033380334803358033680337803388033980340803418034280343803448034580346803478034880349803508035180352803538035480355803568035780358803598036080361803628036380364803658036680367803688036980370803718037280373803748037580376803778037880379803808038180382803838038480385803868038780388803898039080391803928039380394803958039680397803988039980400804018040280403804048040580406804078040880409804108041180412804138041480415804168041780418804198042080421804228042380424804258042680427804288042980430804318043280433804348043580436804378043880439804408044180442804438044480445804468044780448804498045080451804528045380454804558045680457804588045980460804618046280463804648046580466804678046880469804708047180472804738047480475804768047780478804798048080481804828048380484804858048680487804888048980490804918049280493804948049580496804978049880499805008050180502805038050480505805068050780508805098051080511805128051380514805158051680517805188051980520805218052280523805248052580526805278052880529805308053180532805338053480535805368053780538805398054080541805428054380544805458054680547805488054980550805518055280553805548055580556805578055880559805608056180562805638056480565805668056780568805698057080571805728057380574805758057680577805788057980580805818058280583805848058580586805878058880589805908059180592805938059480595805968059780598805998060080601806028060380604806058060680607806088060980610806118061280613806148061580616806178061880619806208062180622806238062480625806268062780628806298063080631806328063380634806358063680637806388063980640806418064280643806448064580646806478064880649806508065180652806538065480655806568065780658806598066080661806628066380664806658066680667806688066980670806718067280673806748067580676806778067880679806808068180682806838068480685806868068780688806898069080691806928069380694806958069680697806988069980700807018070280703807048070580706807078070880709807108071180712807138071480715807168071780718807198072080721807228072380724807258072680727807288072980730807318073280733807348073580736807378073880739807408074180742807438074480745807468074780748807498075080751807528075380754807558075680757807588075980760807618076280763807648076580766807678076880769807708077180772807738077480775807768077780778807798078080781807828078380784807858078680787807888078980790807918079280793807948079580796807978079880799808008080180802808038080480805808068080780808808098081080811808128081380814808158081680817808188081980820808218082280823808248082580826808278082880829808308083180832808338083480835808368083780838808398084080841808428084380844808458084680847808488084980850808518085280853808548085580856808578085880859808608086180862808638086480865808668086780868808698087080871808728087380874808758087680877808788087980880808818088280883808848088580886808878088880889808908089180892808938089480895808968089780898808998090080901809028090380904809058090680907809088090980910809118091280913809148091580916809178091880919809208092180922809238092480925809268092780928809298093080931809328093380934809358093680937809388093980940809418094280943809448094580946809478094880949809508095180952809538095480955809568095780958809598096080961809628096380964809658096680967809688096980970809718097280973809748097580976809778097880979809808098180982809838098480985809868098780988809898099080991809928099380994809958099680997809988099981000810018100281003810048100581006810078100881009810108101181012810138101481015810168101781018810198102081021810228102381024810258102681027810288102981030810318103281033810348103581036810378103881039810408104181042810438104481045810468104781048810498105081051810528105381054810558105681057810588105981060810618106281063810648106581066810678106881069810708107181072810738107481075810768107781078810798108081081810828108381084810858108681087810888108981090810918109281093810948109581096810978109881099811008110181102811038110481105811068110781108811098111081111811128111381114811158111681117811188111981120811218112281123811248112581126811278112881129811308113181132811338113481135811368113781138811398114081141811428114381144811458114681147811488114981150811518115281153811548115581156811578115881159811608116181162811638116481165811668116781168811698117081171811728117381174811758117681177811788117981180811818118281183811848118581186811878118881189811908119181192811938119481195811968119781198811998120081201812028120381204812058120681207812088120981210812118121281213812148121581216812178121881219812208122181222812238122481225812268122781228812298123081231812328123381234812358123681237812388123981240812418124281243812448124581246812478124881249812508125181252812538125481255812568125781258812598126081261812628126381264812658126681267812688126981270812718127281273812748127581276812778127881279812808128181282812838128481285812868128781288812898129081291812928129381294812958129681297812988129981300813018130281303813048130581306813078130881309813108131181312813138131481315813168131781318813198132081321813228132381324813258132681327813288132981330813318133281333813348133581336813378133881339813408134181342813438134481345813468134781348813498135081351813528135381354813558135681357813588135981360813618136281363813648136581366813678136881369813708137181372813738137481375813768137781378813798138081381813828138381384813858138681387813888138981390813918139281393813948139581396813978139881399814008140181402814038140481405814068140781408814098141081411814128141381414814158141681417814188141981420814218142281423814248142581426814278142881429814308143181432814338143481435814368143781438814398144081441814428144381444814458144681447814488144981450814518145281453814548145581456814578145881459814608146181462814638146481465814668146781468814698147081471814728147381474814758147681477814788147981480814818148281483814848148581486814878148881489814908149181492814938149481495814968149781498814998150081501815028150381504815058150681507815088150981510815118151281513815148151581516815178151881519815208152181522815238152481525815268152781528815298153081531815328153381534815358153681537815388153981540815418154281543815448154581546815478154881549815508155181552815538155481555815568155781558815598156081561815628156381564815658156681567815688156981570815718157281573815748157581576815778157881579815808158181582815838158481585815868158781588815898159081591815928159381594815958159681597815988159981600816018160281603816048160581606816078160881609816108161181612816138161481615816168161781618816198162081621816228162381624816258162681627816288162981630816318163281633816348163581636816378163881639816408164181642816438164481645816468164781648816498165081651816528165381654816558165681657816588165981660816618166281663816648166581666816678166881669816708167181672816738167481675816768167781678816798168081681816828168381684816858168681687816888168981690816918169281693816948169581696816978169881699817008170181702817038170481705817068170781708817098171081711817128171381714817158171681717817188171981720817218172281723817248172581726817278172881729817308173181732817338173481735817368173781738817398174081741817428174381744817458174681747817488174981750817518175281753817548175581756817578175881759817608176181762817638176481765817668176781768817698177081771817728177381774817758177681777817788177981780817818178281783817848178581786817878178881789817908179181792817938179481795817968179781798817998180081801818028180381804818058180681807818088180981810818118181281813818148181581816818178181881819818208182181822818238182481825818268182781828818298183081831818328183381834818358183681837818388183981840818418184281843818448184581846818478184881849818508185181852818538185481855818568185781858818598186081861818628186381864818658186681867818688186981870818718187281873818748187581876818778187881879818808188181882818838188481885818868188781888818898189081891818928189381894818958189681897818988189981900819018190281903819048190581906819078190881909819108191181912819138191481915819168191781918819198192081921819228192381924819258192681927819288192981930819318193281933819348193581936819378193881939819408194181942819438194481945819468194781948819498195081951819528195381954819558195681957819588195981960819618196281963819648196581966819678196881969819708197181972819738197481975819768197781978819798198081981819828198381984819858198681987819888198981990819918199281993819948199581996819978199881999820008200182002820038200482005820068200782008820098201082011820128201382014820158201682017820188201982020820218202282023820248202582026820278202882029820308203182032820338203482035820368203782038820398204082041820428204382044820458204682047820488204982050820518205282053820548205582056820578205882059820608206182062820638206482065820668206782068820698207082071820728207382074820758207682077820788207982080820818208282083820848208582086820878208882089820908209182092820938209482095820968209782098820998210082101821028210382104821058210682107821088210982110821118211282113821148211582116821178211882119821208212182122821238212482125821268212782128821298213082131821328213382134821358213682137821388213982140821418214282143821448214582146821478214882149821508215182152821538215482155821568215782158821598216082161821628216382164821658216682167821688216982170821718217282173821748217582176821778217882179821808218182182821838218482185821868218782188821898219082191821928219382194821958219682197821988219982200822018220282203822048220582206822078220882209822108221182212822138221482215822168221782218822198222082221822228222382224822258222682227822288222982230822318223282233822348223582236822378223882239822408224182242822438224482245822468224782248822498225082251822528225382254822558225682257822588225982260822618226282263822648226582266822678226882269822708227182272822738227482275822768227782278822798228082281822828228382284822858228682287822888228982290822918229282293822948229582296822978229882299823008230182302823038230482305823068230782308823098231082311823128231382314823158231682317823188231982320823218232282323823248232582326823278232882329823308233182332823338233482335823368233782338823398234082341823428234382344823458234682347823488234982350823518235282353823548235582356823578235882359823608236182362823638236482365823668236782368823698237082371823728237382374823758237682377823788237982380823818238282383823848238582386823878238882389823908239182392823938239482395823968239782398823998240082401824028240382404824058240682407824088240982410824118241282413824148241582416824178241882419824208242182422824238242482425824268242782428824298243082431824328243382434824358243682437824388243982440824418244282443824448244582446824478244882449824508245182452824538245482455824568245782458824598246082461824628246382464824658246682467824688246982470824718247282473824748247582476824778247882479824808248182482824838248482485824868248782488824898249082491824928249382494824958249682497824988249982500825018250282503825048250582506825078250882509825108251182512825138251482515825168251782518825198252082521825228252382524825258252682527825288252982530825318253282533825348253582536825378253882539825408254182542825438254482545825468254782548825498255082551825528255382554825558255682557825588255982560825618256282563825648256582566825678256882569825708257182572825738257482575825768257782578825798258082581825828258382584825858258682587825888258982590825918259282593825948259582596825978259882599826008260182602826038260482605826068260782608826098261082611826128261382614826158261682617826188261982620826218262282623826248262582626826278262882629826308263182632826338263482635826368263782638826398264082641826428264382644826458264682647826488264982650826518265282653826548265582656826578265882659826608266182662826638266482665826668266782668826698267082671826728267382674826758267682677826788267982680826818268282683826848268582686826878268882689826908269182692826938269482695826968269782698826998270082701827028270382704827058270682707827088270982710827118271282713827148271582716827178271882719827208272182722827238272482725827268272782728827298273082731827328273382734827358273682737827388273982740827418274282743827448274582746827478274882749827508275182752827538275482755827568275782758827598276082761827628276382764827658276682767827688276982770827718277282773827748277582776827778277882779827808278182782827838278482785827868278782788827898279082791827928279382794827958279682797827988279982800828018280282803828048280582806828078280882809828108281182812828138281482815828168281782818828198282082821828228282382824828258282682827828288282982830828318283282833828348283582836828378283882839828408284182842828438284482845828468284782848828498285082851828528285382854828558285682857828588285982860828618286282863828648286582866828678286882869828708287182872828738287482875828768287782878828798288082881828828288382884828858288682887828888288982890828918289282893828948289582896828978289882899829008290182902829038290482905829068290782908829098291082911829128291382914829158291682917829188291982920829218292282923829248292582926829278292882929829308293182932829338293482935829368293782938829398294082941829428294382944829458294682947829488294982950829518295282953829548295582956829578295882959829608296182962829638296482965829668296782968829698297082971829728297382974829758297682977829788297982980829818298282983829848298582986829878298882989829908299182992829938299482995829968299782998829998300083001830028300383004830058300683007830088300983010830118301283013830148301583016830178301883019830208302183022830238302483025830268302783028830298303083031830328303383034830358303683037830388303983040830418304283043830448304583046830478304883049830508305183052830538305483055830568305783058830598306083061830628306383064830658306683067830688306983070830718307283073830748307583076830778307883079830808308183082830838308483085830868308783088830898309083091830928309383094830958309683097830988309983100831018310283103831048310583106831078310883109831108311183112831138311483115831168311783118831198312083121831228312383124831258312683127831288312983130831318313283133831348313583136831378313883139831408314183142831438314483145831468314783148831498315083151831528315383154831558315683157831588315983160831618316283163831648316583166831678316883169831708317183172831738317483175831768317783178831798318083181831828318383184831858318683187831888318983190831918319283193831948319583196831978319883199832008320183202832038320483205832068320783208832098321083211832128321383214832158321683217832188321983220832218322283223832248322583226832278322883229832308323183232832338323483235832368323783238832398324083241832428324383244832458324683247832488324983250832518325283253832548325583256832578325883259832608326183262832638326483265832668326783268832698327083271832728327383274832758327683277832788327983280832818328283283832848328583286832878328883289832908329183292832938329483295832968329783298832998330083301833028330383304833058330683307833088330983310833118331283313833148331583316833178331883319833208332183322833238332483325833268332783328833298333083331833328333383334833358333683337833388333983340833418334283343833448334583346833478334883349833508335183352833538335483355833568335783358833598336083361833628336383364833658336683367833688336983370833718337283373833748337583376833778337883379833808338183382833838338483385833868338783388833898339083391833928339383394833958339683397833988339983400834018340283403834048340583406834078340883409834108341183412834138341483415834168341783418834198342083421834228342383424834258342683427834288342983430834318343283433834348343583436834378343883439834408344183442834438344483445834468344783448834498345083451834528345383454834558345683457834588345983460834618346283463834648346583466834678346883469834708347183472834738347483475834768347783478834798348083481834828348383484834858348683487834888348983490834918349283493834948349583496834978349883499835008350183502835038350483505835068350783508835098351083511835128351383514835158351683517835188351983520835218352283523835248352583526835278352883529835308353183532835338353483535835368353783538835398354083541835428354383544835458354683547835488354983550835518355283553835548355583556835578355883559835608356183562835638356483565835668356783568835698357083571835728357383574835758357683577835788357983580835818358283583835848358583586835878358883589835908359183592835938359483595835968359783598835998360083601836028360383604836058360683607836088360983610836118361283613836148361583616836178361883619836208362183622836238362483625836268362783628836298363083631836328363383634836358363683637836388363983640836418364283643836448364583646836478364883649836508365183652836538365483655836568365783658836598366083661836628366383664836658366683667836688366983670836718367283673836748367583676836778367883679836808368183682836838368483685836868368783688836898369083691836928369383694836958369683697836988369983700837018370283703837048370583706837078370883709837108371183712837138371483715837168371783718837198372083721837228372383724837258372683727837288372983730837318373283733837348373583736837378373883739837408374183742837438374483745837468374783748837498375083751837528375383754837558375683757837588375983760837618376283763837648376583766837678376883769837708377183772837738377483775837768377783778837798378083781837828378383784837858378683787837888378983790837918379283793837948379583796837978379883799838008380183802838038380483805838068380783808838098381083811838128381383814838158381683817838188381983820838218382283823838248382583826838278382883829838308383183832838338383483835838368383783838838398384083841838428384383844838458384683847838488384983850838518385283853838548385583856838578385883859838608386183862838638386483865838668386783868838698387083871838728387383874838758387683877838788387983880838818388283883838848388583886838878388883889838908389183892838938389483895838968389783898838998390083901839028390383904839058390683907839088390983910839118391283913839148391583916839178391883919839208392183922839238392483925839268392783928839298393083931839328393383934839358393683937839388393983940839418394283943839448394583946839478394883949839508395183952839538395483955839568395783958839598396083961839628396383964839658396683967839688396983970839718397283973839748397583976839778397883979839808398183982839838398483985839868398783988839898399083991839928399383994839958399683997839988399984000840018400284003840048400584006840078400884009840108401184012840138401484015840168401784018840198402084021840228402384024840258402684027840288402984030840318403284033840348403584036840378403884039840408404184042840438404484045840468404784048840498405084051840528405384054840558405684057840588405984060840618406284063840648406584066840678406884069840708407184072840738407484075840768407784078840798408084081840828408384084840858408684087840888408984090840918409284093840948409584096840978409884099841008410184102841038410484105841068410784108841098411084111841128411384114841158411684117841188411984120841218412284123841248412584126841278412884129841308413184132841338413484135841368413784138841398414084141841428414384144841458414684147841488414984150841518415284153841548415584156841578415884159841608416184162841638416484165841668416784168841698417084171841728417384174841758417684177841788417984180841818418284183841848418584186841878418884189841908419184192841938419484195841968419784198841998420084201842028420384204842058420684207842088420984210842118421284213842148421584216842178421884219842208422184222842238422484225842268422784228842298423084231842328423384234842358423684237842388423984240842418424284243842448424584246842478424884249842508425184252842538425484255842568425784258842598426084261842628426384264842658426684267842688426984270842718427284273842748427584276842778427884279842808428184282842838428484285842868428784288842898429084291842928429384294842958429684297842988429984300843018430284303843048430584306843078430884309843108431184312843138431484315843168431784318843198432084321843228432384324843258432684327843288432984330843318433284333843348433584336843378433884339843408434184342843438434484345843468434784348843498435084351843528435384354843558435684357843588435984360843618436284363843648436584366843678436884369843708437184372843738437484375843768437784378843798438084381843828438384384843858438684387843888438984390843918439284393843948439584396843978439884399844008440184402844038440484405844068440784408844098441084411844128441384414844158441684417844188441984420844218442284423844248442584426844278442884429844308443184432844338443484435844368443784438844398444084441844428444384444844458444684447844488444984450844518445284453844548445584456844578445884459844608446184462844638446484465844668446784468844698447084471844728447384474844758447684477844788447984480844818448284483844848448584486844878448884489844908449184492844938449484495844968449784498844998450084501845028450384504845058450684507845088450984510845118451284513845148451584516845178451884519845208452184522845238452484525845268452784528845298453084531845328453384534845358453684537845388453984540845418454284543845448454584546845478454884549845508455184552845538455484555845568455784558845598456084561845628456384564845658456684567845688456984570845718457284573845748457584576845778457884579845808458184582845838458484585845868458784588845898459084591845928459384594845958459684597845988459984600846018460284603846048460584606846078460884609846108461184612846138461484615846168461784618846198462084621846228462384624846258462684627846288462984630846318463284633846348463584636846378463884639846408464184642846438464484645846468464784648846498465084651846528465384654846558465684657846588465984660846618466284663846648466584666846678466884669846708467184672846738467484675846768467784678846798468084681846828468384684846858468684687846888468984690846918469284693846948469584696846978469884699847008470184702847038470484705847068470784708847098471084711847128471384714847158471684717847188471984720847218472284723847248472584726847278472884729847308473184732847338473484735847368473784738847398474084741847428474384744847458474684747847488474984750847518475284753847548475584756847578475884759847608476184762847638476484765847668476784768847698477084771847728477384774847758477684777847788477984780847818478284783847848478584786847878478884789847908479184792847938479484795847968479784798847998480084801848028480384804848058480684807848088480984810848118481284813848148481584816848178481884819848208482184822848238482484825848268482784828848298483084831848328483384834848358483684837848388483984840848418484284843848448484584846848478484884849848508485184852848538485484855848568485784858848598486084861848628486384864848658486684867848688486984870848718487284873848748487584876848778487884879848808488184882848838488484885848868488784888848898489084891848928489384894848958489684897848988489984900849018490284903849048490584906849078490884909849108491184912849138491484915849168491784918849198492084921849228492384924849258492684927849288492984930849318493284933849348493584936849378493884939849408494184942849438494484945849468494784948849498495084951849528495384954849558495684957849588495984960849618496284963849648496584966849678496884969849708497184972849738497484975849768497784978849798498084981849828498384984849858498684987849888498984990849918499284993849948499584996849978499884999850008500185002850038500485005850068500785008850098501085011850128501385014850158501685017850188501985020850218502285023850248502585026850278502885029850308503185032850338503485035850368503785038850398504085041850428504385044850458504685047850488504985050850518505285053850548505585056850578505885059850608506185062850638506485065850668506785068850698507085071850728507385074850758507685077850788507985080850818508285083850848508585086850878508885089850908509185092850938509485095850968509785098850998510085101851028510385104851058510685107851088510985110851118511285113851148511585116851178511885119851208512185122851238512485125851268512785128851298513085131851328513385134851358513685137851388513985140851418514285143851448514585146851478514885149851508515185152851538515485155851568515785158851598516085161851628516385164851658516685167851688516985170851718517285173851748517585176851778517885179851808518185182851838518485185851868518785188851898519085191851928519385194851958519685197851988519985200852018520285203852048520585206852078520885209852108521185212852138521485215852168521785218852198522085221852228522385224852258522685227852288522985230852318523285233852348523585236852378523885239852408524185242852438524485245852468524785248852498525085251852528525385254852558525685257852588525985260852618526285263852648526585266852678526885269852708527185272852738527485275852768527785278852798528085281852828528385284852858528685287852888528985290852918529285293852948529585296852978529885299853008530185302853038530485305853068530785308853098531085311853128531385314853158531685317853188531985320853218532285323853248532585326853278532885329853308533185332853338533485335853368533785338853398534085341853428534385344853458534685347853488534985350853518535285353853548535585356853578535885359853608536185362853638536485365853668536785368853698537085371853728537385374853758537685377853788537985380853818538285383853848538585386853878538885389853908539185392853938539485395853968539785398853998540085401854028540385404854058540685407854088540985410854118541285413854148541585416854178541885419854208542185422854238542485425854268542785428854298543085431854328543385434854358543685437854388543985440854418544285443854448544585446854478544885449854508545185452854538545485455854568545785458854598546085461854628546385464854658546685467854688546985470854718547285473854748547585476854778547885479854808548185482854838548485485854868548785488854898549085491854928549385494854958549685497854988549985500855018550285503855048550585506855078550885509855108551185512855138551485515855168551785518855198552085521855228552385524855258552685527855288552985530855318553285533855348553585536855378553885539855408554185542855438554485545855468554785548855498555085551855528555385554855558555685557855588555985560855618556285563855648556585566855678556885569855708557185572855738557485575855768557785578855798558085581855828558385584855858558685587855888558985590855918559285593855948559585596855978559885599856008560185602856038560485605856068560785608856098561085611856128561385614856158561685617856188561985620856218562285623856248562585626856278562885629856308563185632856338563485635856368563785638856398564085641856428564385644856458564685647856488564985650856518565285653856548565585656856578565885659856608566185662856638566485665856668566785668856698567085671856728567385674856758567685677856788567985680856818568285683856848568585686856878568885689856908569185692856938569485695856968569785698856998570085701857028570385704857058570685707857088570985710857118571285713857148571585716857178571885719857208572185722857238572485725857268572785728857298573085731857328573385734857358573685737857388573985740857418574285743857448574585746857478574885749857508575185752857538575485755857568575785758857598576085761857628576385764857658576685767857688576985770857718577285773857748577585776857778577885779857808578185782857838578485785857868578785788857898579085791857928579385794857958579685797857988579985800858018580285803858048580585806858078580885809858108581185812858138581485815858168581785818858198582085821858228582385824858258582685827858288582985830858318583285833858348583585836858378583885839858408584185842858438584485845858468584785848858498585085851858528585385854858558585685857858588585985860858618586285863858648586585866858678586885869858708587185872858738587485875858768587785878858798588085881858828588385884858858588685887858888588985890858918589285893858948589585896858978589885899859008590185902859038590485905859068590785908859098591085911859128591385914859158591685917859188591985920859218592285923859248592585926859278592885929859308593185932859338593485935859368593785938859398594085941859428594385944859458594685947859488594985950859518595285953859548595585956859578595885959859608596185962859638596485965859668596785968859698597085971859728597385974859758597685977859788597985980859818598285983859848598585986859878598885989859908599185992859938599485995859968599785998859998600086001860028600386004860058600686007860088600986010860118601286013860148601586016860178601886019860208602186022860238602486025860268602786028860298603086031860328603386034860358603686037860388603986040860418604286043860448604586046860478604886049860508605186052860538605486055860568605786058860598606086061860628606386064860658606686067860688606986070860718607286073860748607586076860778607886079860808608186082860838608486085860868608786088860898609086091860928609386094860958609686097860988609986100861018610286103861048610586106861078610886109861108611186112861138611486115861168611786118861198612086121861228612386124861258612686127861288612986130861318613286133861348613586136861378613886139861408614186142861438614486145861468614786148861498615086151861528615386154861558615686157861588615986160861618616286163861648616586166861678616886169861708617186172861738617486175861768617786178861798618086181861828618386184861858618686187861888618986190861918619286193861948619586196861978619886199862008620186202862038620486205862068620786208862098621086211862128621386214862158621686217862188621986220862218622286223862248622586226862278622886229862308623186232862338623486235862368623786238862398624086241862428624386244862458624686247862488624986250862518625286253862548625586256862578625886259862608626186262862638626486265862668626786268862698627086271862728627386274862758627686277862788627986280862818628286283862848628586286862878628886289862908629186292862938629486295862968629786298862998630086301863028630386304863058630686307863088630986310863118631286313863148631586316863178631886319863208632186322863238632486325863268632786328863298633086331863328633386334863358633686337863388633986340863418634286343863448634586346863478634886349863508635186352863538635486355863568635786358863598636086361863628636386364863658636686367863688636986370863718637286373863748637586376863778637886379863808638186382863838638486385863868638786388863898639086391863928639386394863958639686397863988639986400864018640286403864048640586406864078640886409864108641186412864138641486415864168641786418864198642086421864228642386424864258642686427864288642986430864318643286433864348643586436864378643886439864408644186442864438644486445864468644786448864498645086451864528645386454864558645686457864588645986460864618646286463864648646586466864678646886469864708647186472864738647486475864768647786478864798648086481864828648386484864858648686487864888648986490864918649286493864948649586496864978649886499865008650186502865038650486505865068650786508865098651086511865128651386514865158651686517865188651986520865218652286523865248652586526865278652886529865308653186532865338653486535865368653786538865398654086541865428654386544865458654686547865488654986550865518655286553865548655586556865578655886559865608656186562865638656486565865668656786568865698657086571865728657386574865758657686577865788657986580865818658286583865848658586586865878658886589865908659186592865938659486595865968659786598865998660086601866028660386604866058660686607866088660986610866118661286613866148661586616866178661886619866208662186622866238662486625866268662786628866298663086631866328663386634866358663686637866388663986640866418664286643866448664586646866478664886649866508665186652866538665486655866568665786658866598666086661866628666386664866658666686667866688666986670866718667286673866748667586676866778667886679866808668186682866838668486685866868668786688866898669086691866928669386694866958669686697866988669986700867018670286703867048670586706867078670886709867108671186712867138671486715867168671786718867198672086721867228672386724867258672686727867288672986730867318673286733867348673586736867378673886739867408674186742867438674486745867468674786748867498675086751867528675386754867558675686757867588675986760867618676286763867648676586766867678676886769867708677186772867738677486775867768677786778867798678086781867828678386784867858678686787867888678986790867918679286793867948679586796867978679886799868008680186802868038680486805868068680786808868098681086811868128681386814868158681686817868188681986820868218682286823868248682586826868278682886829868308683186832868338683486835868368683786838868398684086841868428684386844868458684686847868488684986850868518685286853868548685586856868578685886859868608686186862868638686486865868668686786868868698687086871868728687386874868758687686877868788687986880868818688286883868848688586886868878688886889868908689186892868938689486895868968689786898868998690086901869028690386904869058690686907869088690986910869118691286913869148691586916869178691886919869208692186922869238692486925869268692786928869298693086931869328693386934869358693686937869388693986940869418694286943869448694586946869478694886949869508695186952869538695486955869568695786958869598696086961869628696386964869658696686967869688696986970869718697286973869748697586976869778697886979869808698186982869838698486985869868698786988869898699086991869928699386994869958699686997869988699987000870018700287003870048700587006870078700887009870108701187012870138701487015870168701787018870198702087021870228702387024870258702687027870288702987030870318703287033870348703587036870378703887039870408704187042870438704487045870468704787048870498705087051870528705387054870558705687057870588705987060870618706287063870648706587066870678706887069870708707187072870738707487075870768707787078870798708087081870828708387084870858708687087870888708987090870918709287093870948709587096870978709887099871008710187102871038710487105871068710787108871098711087111871128711387114871158711687117871188711987120871218712287123871248712587126871278712887129871308713187132871338713487135871368713787138871398714087141871428714387144871458714687147871488714987150871518715287153871548715587156871578715887159871608716187162871638716487165871668716787168871698717087171871728717387174871758717687177871788717987180871818718287183871848718587186871878718887189871908719187192871938719487195871968719787198871998720087201872028720387204872058720687207872088720987210872118721287213872148721587216872178721887219872208722187222872238722487225872268722787228872298723087231872328723387234872358723687237872388723987240872418724287243872448724587246872478724887249872508725187252872538725487255872568725787258872598726087261872628726387264872658726687267872688726987270872718727287273872748727587276872778727887279872808728187282872838728487285872868728787288872898729087291872928729387294872958729687297872988729987300873018730287303873048730587306873078730887309873108731187312873138731487315873168731787318873198732087321873228732387324873258732687327873288732987330873318733287333873348733587336873378733887339873408734187342873438734487345873468734787348873498735087351873528735387354873558735687357873588735987360873618736287363873648736587366873678736887369873708737187372873738737487375873768737787378873798738087381873828738387384873858738687387873888738987390873918739287393873948739587396873978739887399874008740187402874038740487405874068740787408874098741087411874128741387414874158741687417874188741987420874218742287423874248742587426874278742887429874308743187432874338743487435874368743787438874398744087441874428744387444874458744687447874488744987450874518745287453874548745587456874578745887459874608746187462874638746487465874668746787468874698747087471874728747387474874758747687477874788747987480874818748287483874848748587486874878748887489874908749187492874938749487495874968749787498874998750087501875028750387504875058750687507875088750987510875118751287513875148751587516875178751887519875208752187522875238752487525875268752787528875298753087531875328753387534875358753687537875388753987540875418754287543875448754587546875478754887549875508755187552875538755487555875568755787558875598756087561875628756387564875658756687567875688756987570875718757287573875748757587576875778757887579875808758187582875838758487585875868758787588875898759087591875928759387594875958759687597875988759987600876018760287603876048760587606876078760887609876108761187612876138761487615876168761787618876198762087621876228762387624876258762687627876288762987630876318763287633876348763587636876378763887639876408764187642876438764487645876468764787648876498765087651876528765387654876558765687657876588765987660876618766287663876648766587666876678766887669876708767187672876738767487675876768767787678876798768087681876828768387684876858768687687876888768987690876918769287693876948769587696876978769887699877008770187702877038770487705877068770787708877098771087711877128771387714877158771687717877188771987720877218772287723877248772587726877278772887729877308773187732877338773487735877368773787738877398774087741877428774387744877458774687747877488774987750877518775287753877548775587756877578775887759877608776187762877638776487765877668776787768877698777087771877728777387774877758777687777877788777987780877818778287783877848778587786877878778887789877908779187792877938779487795877968779787798877998780087801878028780387804878058780687807878088780987810878118781287813878148781587816878178781887819878208782187822878238782487825878268782787828878298783087831878328783387834878358783687837878388783987840878418784287843878448784587846878478784887849878508785187852878538785487855878568785787858878598786087861878628786387864878658786687867878688786987870878718787287873878748787587876878778787887879878808788187882878838788487885878868788787888878898789087891878928789387894878958789687897878988789987900879018790287903879048790587906879078790887909879108791187912879138791487915879168791787918879198792087921879228792387924879258792687927879288792987930879318793287933879348793587936879378793887939879408794187942879438794487945879468794787948879498795087951879528795387954879558795687957879588795987960879618796287963879648796587966879678796887969879708797187972879738797487975879768797787978879798798087981879828798387984879858798687987879888798987990879918799287993879948799587996879978799887999880008800188002880038800488005880068800788008880098801088011880128801388014880158801688017880188801988020880218802288023880248802588026880278802888029880308803188032880338803488035880368803788038880398804088041880428804388044880458804688047880488804988050880518805288053880548805588056880578805888059880608806188062880638806488065880668806788068880698807088071880728807388074880758807688077880788807988080880818808288083880848808588086880878808888089880908809188092880938809488095880968809788098880998810088101881028810388104881058810688107881088810988110881118811288113881148811588116881178811888119881208812188122881238812488125881268812788128881298813088131881328813388134881358813688137881388813988140881418814288143881448814588146881478814888149881508815188152881538815488155881568815788158881598816088161881628816388164881658816688167881688816988170881718817288173881748817588176881778817888179881808818188182881838818488185881868818788188881898819088191881928819388194881958819688197881988819988200882018820288203882048820588206882078820888209882108821188212882138821488215882168821788218882198822088221882228822388224882258822688227882288822988230882318823288233882348823588236882378823888239882408824188242882438824488245882468824788248882498825088251882528825388254882558825688257882588825988260882618826288263882648826588266882678826888269882708827188272882738827488275882768827788278882798828088281882828828388284882858828688287882888828988290882918829288293882948829588296882978829888299883008830188302883038830488305883068830788308883098831088311883128831388314883158831688317883188831988320883218832288323883248832588326883278832888329883308833188332883338833488335883368833788338883398834088341883428834388344883458834688347883488834988350883518835288353883548835588356883578835888359883608836188362883638836488365883668836788368883698837088371883728837388374883758837688377883788837988380883818838288383883848838588386883878838888389883908839188392883938839488395883968839788398883998840088401884028840388404884058840688407884088840988410884118841288413884148841588416884178841888419884208842188422884238842488425884268842788428884298843088431884328843388434884358843688437884388843988440884418844288443884448844588446884478844888449884508845188452884538845488455884568845788458884598846088461884628846388464884658846688467884688846988470884718847288473884748847588476884778847888479884808848188482884838848488485884868848788488884898849088491884928849388494884958849688497884988849988500885018850288503885048850588506885078850888509885108851188512885138851488515885168851788518885198852088521885228852388524885258852688527885288852988530885318853288533885348853588536885378853888539885408854188542885438854488545885468854788548885498855088551885528855388554885558855688557885588855988560885618856288563885648856588566885678856888569885708857188572885738857488575885768857788578885798858088581885828858388584885858858688587885888858988590885918859288593885948859588596885978859888599886008860188602886038860488605886068860788608886098861088611886128861388614886158861688617886188861988620886218862288623886248862588626886278862888629886308863188632886338863488635886368863788638886398864088641886428864388644886458864688647886488864988650886518865288653886548865588656886578865888659886608866188662886638866488665886668866788668886698867088671886728867388674886758867688677886788867988680886818868288683886848868588686886878868888689886908869188692886938869488695886968869788698886998870088701887028870388704887058870688707887088870988710887118871288713887148871588716887178871888719887208872188722887238872488725887268872788728887298873088731887328873388734887358873688737887388873988740887418874288743887448874588746887478874888749887508875188752887538875488755887568875788758887598876088761887628876388764887658876688767887688876988770887718877288773887748877588776887778877888779887808878188782887838878488785887868878788788887898879088791887928879388794887958879688797887988879988800888018880288803888048880588806888078880888809888108881188812888138881488815888168881788818888198882088821888228882388824888258882688827888288882988830888318883288833888348883588836888378883888839888408884188842888438884488845888468884788848888498885088851888528885388854888558885688857888588885988860888618886288863888648886588866888678886888869888708887188872888738887488875888768887788878888798888088881888828888388884888858888688887888888888988890888918889288893888948889588896888978889888899889008890188902889038890488905889068890788908889098891088911889128891388914889158891688917889188891988920889218892288923889248892588926889278892888929889308893188932889338893488935889368893788938889398894088941889428894388944889458894688947889488894988950889518895288953889548895588956889578895888959889608896188962889638896488965889668896788968889698897088971889728897388974889758897688977889788897988980889818898288983889848898588986889878898888989889908899188992889938899488995889968899788998889998900089001890028900389004890058900689007890088900989010890118901289013890148901589016890178901889019890208902189022890238902489025890268902789028890298903089031890328903389034890358903689037890388903989040890418904289043890448904589046890478904889049890508905189052890538905489055890568905789058890598906089061890628906389064890658906689067890688906989070890718907289073890748907589076890778907889079890808908189082890838908489085890868908789088890898909089091890928909389094890958909689097890988909989100891018910289103891048910589106891078910889109891108911189112891138911489115891168911789118891198912089121891228912389124891258912689127891288912989130891318913289133891348913589136891378913889139891408914189142891438914489145891468914789148891498915089151891528915389154891558915689157891588915989160891618916289163891648916589166891678916889169891708917189172891738917489175891768917789178891798918089181891828918389184891858918689187891888918989190891918919289193891948919589196891978919889199892008920189202892038920489205892068920789208892098921089211892128921389214892158921689217892188921989220892218922289223892248922589226892278922889229892308923189232892338923489235892368923789238892398924089241892428924389244892458924689247892488924989250892518925289253892548925589256892578925889259892608926189262892638926489265892668926789268892698927089271892728927389274892758927689277892788927989280892818928289283892848928589286892878928889289892908929189292892938929489295892968929789298892998930089301893028930389304893058930689307893088930989310893118931289313893148931589316893178931889319893208932189322893238932489325893268932789328893298933089331893328933389334893358933689337893388933989340893418934289343893448934589346893478934889349893508935189352893538935489355893568935789358893598936089361893628936389364893658936689367893688936989370893718937289373893748937589376893778937889379893808938189382893838938489385893868938789388893898939089391893928939389394893958939689397893988939989400894018940289403894048940589406894078940889409894108941189412894138941489415894168941789418894198942089421894228942389424894258942689427894288942989430894318943289433894348943589436894378943889439894408944189442894438944489445894468944789448894498945089451894528945389454894558945689457894588945989460894618946289463894648946589466894678946889469894708947189472894738947489475894768947789478894798948089481894828948389484894858948689487894888948989490894918949289493894948949589496894978949889499895008950189502895038950489505895068950789508895098951089511895128951389514895158951689517895188951989520895218952289523895248952589526895278952889529895308953189532895338953489535895368953789538895398954089541895428954389544895458954689547895488954989550895518955289553895548955589556895578955889559895608956189562895638956489565895668956789568895698957089571895728957389574895758957689577895788957989580895818958289583895848958589586895878958889589895908959189592895938959489595895968959789598895998960089601896028960389604896058960689607896088960989610896118961289613896148961589616896178961889619896208962189622896238962489625896268962789628896298963089631896328963389634896358963689637896388963989640896418964289643896448964589646896478964889649896508965189652896538965489655896568965789658896598966089661896628966389664896658966689667896688966989670896718967289673896748967589676896778967889679896808968189682896838968489685896868968789688896898969089691896928969389694896958969689697896988969989700897018970289703897048970589706897078970889709897108971189712897138971489715897168971789718897198972089721897228972389724897258972689727897288972989730897318973289733897348973589736897378973889739897408974189742897438974489745897468974789748897498975089751897528975389754897558975689757897588975989760897618976289763897648976589766897678976889769897708977189772897738977489775897768977789778897798978089781897828978389784897858978689787897888978989790897918979289793897948979589796897978979889799898008980189802898038980489805898068980789808898098981089811898128981389814898158981689817898188981989820898218982289823898248982589826898278982889829898308983189832898338983489835898368983789838898398984089841898428984389844898458984689847898488984989850898518985289853898548985589856898578985889859898608986189862898638986489865898668986789868898698987089871898728987389874898758987689877898788987989880898818988289883898848988589886898878988889889898908989189892898938989489895898968989789898898998990089901899028990389904899058990689907899088990989910899118991289913899148991589916899178991889919899208992189922899238992489925899268992789928899298993089931899328993389934899358993689937899388993989940899418994289943899448994589946899478994889949899508995189952899538995489955899568995789958899598996089961899628996389964899658996689967899688996989970899718997289973899748997589976899778997889979899808998189982899838998489985899868998789988899898999089991899928999389994899958999689997899988999990000900019000290003900049000590006900079000890009900109001190012900139001490015900169001790018900199002090021900229002390024900259002690027900289002990030900319003290033900349003590036900379003890039900409004190042900439004490045900469004790048900499005090051900529005390054900559005690057900589005990060900619006290063900649006590066900679006890069900709007190072900739007490075900769007790078900799008090081900829008390084900859008690087900889008990090900919009290093900949009590096900979009890099901009010190102901039010490105901069010790108901099011090111901129011390114901159011690117901189011990120901219012290123901249012590126901279012890129901309013190132901339013490135901369013790138901399014090141901429014390144901459014690147901489014990150901519015290153901549015590156901579015890159901609016190162901639016490165901669016790168901699017090171901729017390174901759017690177901789017990180901819018290183901849018590186901879018890189901909019190192901939019490195901969019790198901999020090201902029020390204902059020690207902089020990210902119021290213902149021590216902179021890219902209022190222902239022490225902269022790228902299023090231902329023390234902359023690237902389023990240902419024290243902449024590246902479024890249902509025190252902539025490255902569025790258902599026090261902629026390264902659026690267902689026990270902719027290273902749027590276902779027890279902809028190282902839028490285902869028790288902899029090291902929029390294902959029690297902989029990300903019030290303903049030590306903079030890309903109031190312903139031490315903169031790318903199032090321903229032390324903259032690327903289032990330903319033290333903349033590336903379033890339903409034190342903439034490345903469034790348903499035090351903529035390354903559035690357903589035990360903619036290363903649036590366903679036890369903709037190372903739037490375903769037790378903799038090381903829038390384903859038690387903889038990390903919039290393903949039590396903979039890399904009040190402904039040490405904069040790408904099041090411904129041390414904159041690417904189041990420904219042290423904249042590426904279042890429904309043190432904339043490435904369043790438904399044090441904429044390444904459044690447904489044990450904519045290453904549045590456904579045890459904609046190462904639046490465904669046790468904699047090471904729047390474904759047690477904789047990480904819048290483904849048590486904879048890489904909049190492904939049490495904969049790498904999050090501905029050390504905059050690507905089050990510905119051290513905149051590516905179051890519905209052190522905239052490525905269052790528905299053090531905329053390534905359053690537905389053990540905419054290543905449054590546905479054890549905509055190552905539055490555905569055790558905599056090561905629056390564905659056690567905689056990570905719057290573905749057590576905779057890579905809058190582905839058490585905869058790588905899059090591905929059390594905959059690597905989059990600906019060290603906049060590606906079060890609906109061190612906139061490615906169061790618906199062090621906229062390624906259062690627906289062990630906319063290633906349063590636906379063890639906409064190642906439064490645906469064790648906499065090651906529065390654906559065690657906589065990660906619066290663906649066590666906679066890669906709067190672906739067490675906769067790678906799068090681906829068390684906859068690687906889068990690906919069290693906949069590696906979069890699907009070190702907039070490705907069070790708907099071090711907129071390714907159071690717907189071990720907219072290723907249072590726907279072890729907309073190732907339073490735907369073790738907399074090741907429074390744907459074690747907489074990750907519075290753907549075590756907579075890759907609076190762907639076490765907669076790768907699077090771907729077390774907759077690777907789077990780907819078290783907849078590786907879078890789907909079190792907939079490795907969079790798907999080090801908029080390804908059080690807908089080990810908119081290813908149081590816908179081890819908209082190822908239082490825908269082790828908299083090831908329083390834908359083690837908389083990840908419084290843908449084590846908479084890849908509085190852908539085490855908569085790858908599086090861908629086390864908659086690867908689086990870908719087290873908749087590876908779087890879908809088190882908839088490885908869088790888908899089090891908929089390894908959089690897908989089990900909019090290903909049090590906909079090890909909109091190912909139091490915909169091790918909199092090921909229092390924909259092690927909289092990930909319093290933909349093590936909379093890939909409094190942909439094490945909469094790948909499095090951909529095390954909559095690957909589095990960909619096290963909649096590966909679096890969909709097190972909739097490975909769097790978909799098090981909829098390984909859098690987909889098990990909919099290993909949099590996909979099890999910009100191002910039100491005910069100791008910099101091011910129101391014910159101691017910189101991020910219102291023910249102591026910279102891029910309103191032910339103491035910369103791038910399104091041910429104391044910459104691047910489104991050910519105291053910549105591056910579105891059910609106191062910639106491065910669106791068910699107091071910729107391074910759107691077910789107991080910819108291083910849108591086910879108891089910909109191092910939109491095910969109791098910999110091101911029110391104911059110691107911089110991110911119111291113911149111591116911179111891119911209112191122911239112491125911269112791128911299113091131911329113391134911359113691137911389113991140911419114291143911449114591146911479114891149911509115191152911539115491155911569115791158911599116091161911629116391164911659116691167911689116991170911719117291173911749117591176911779117891179911809118191182911839118491185911869118791188911899119091191911929119391194911959119691197911989119991200912019120291203912049120591206912079120891209912109121191212912139121491215912169121791218912199122091221912229122391224912259122691227912289122991230912319123291233912349123591236912379123891239912409124191242912439124491245912469124791248912499125091251912529125391254912559125691257912589125991260912619126291263912649126591266912679126891269912709127191272912739127491275912769127791278912799128091281912829128391284912859128691287912889128991290912919129291293912949129591296912979129891299913009130191302913039130491305913069130791308913099131091311913129131391314913159131691317913189131991320913219132291323913249132591326913279132891329913309133191332913339133491335913369133791338913399134091341913429134391344913459134691347913489134991350913519135291353913549135591356913579135891359913609136191362913639136491365913669136791368913699137091371913729137391374913759137691377913789137991380913819138291383913849138591386913879138891389913909139191392913939139491395913969139791398913999140091401914029140391404914059140691407914089140991410914119141291413914149141591416914179141891419914209142191422914239142491425914269142791428914299143091431914329143391434914359143691437914389143991440914419144291443914449144591446914479144891449914509145191452914539145491455914569145791458914599146091461914629146391464914659146691467914689146991470914719147291473914749147591476914779147891479914809148191482914839148491485914869148791488914899149091491914929149391494914959149691497914989149991500915019150291503915049150591506915079150891509915109151191512915139151491515915169151791518915199152091521915229152391524915259152691527915289152991530915319153291533915349153591536915379153891539915409154191542915439154491545915469154791548915499155091551915529155391554915559155691557915589155991560915619156291563915649156591566915679156891569915709157191572915739157491575915769157791578915799158091581915829158391584915859158691587915889158991590915919159291593915949159591596915979159891599916009160191602916039160491605916069160791608916099161091611916129161391614916159161691617916189161991620916219162291623916249162591626916279162891629916309163191632916339163491635916369163791638916399164091641916429164391644916459164691647916489164991650916519165291653916549165591656916579165891659916609166191662916639166491665916669166791668916699167091671916729167391674916759167691677916789167991680916819168291683916849168591686916879168891689916909169191692916939169491695916969169791698916999170091701917029170391704917059170691707917089170991710917119171291713917149171591716917179171891719917209172191722917239172491725917269172791728917299173091731917329173391734917359173691737917389173991740917419174291743917449174591746917479174891749917509175191752917539175491755917569175791758917599176091761917629176391764917659176691767917689176991770917719177291773917749177591776917779177891779917809178191782917839178491785917869178791788917899179091791917929179391794917959179691797917989179991800918019180291803918049180591806918079180891809918109181191812918139181491815918169181791818918199182091821918229182391824918259182691827918289182991830918319183291833918349183591836918379183891839918409184191842918439184491845918469184791848918499185091851918529185391854918559185691857918589185991860918619186291863918649186591866918679186891869918709187191872918739187491875918769187791878918799188091881918829188391884918859188691887918889188991890918919189291893918949189591896918979189891899919009190191902919039190491905919069190791908919099191091911919129191391914919159191691917919189191991920919219192291923919249192591926919279192891929919309193191932919339193491935919369193791938919399194091941919429194391944919459194691947919489194991950919519195291953919549195591956919579195891959919609196191962919639196491965919669196791968919699197091971919729197391974919759197691977919789197991980919819198291983919849198591986919879198891989919909199191992919939199491995919969199791998919999200092001920029200392004920059200692007920089200992010920119201292013920149201592016920179201892019920209202192022920239202492025920269202792028920299203092031920329203392034920359203692037920389203992040920419204292043920449204592046920479204892049920509205192052920539205492055920569205792058920599206092061920629206392064920659206692067920689206992070920719207292073920749207592076920779207892079920809208192082920839208492085920869208792088920899209092091920929209392094920959209692097920989209992100921019210292103921049210592106921079210892109921109211192112921139211492115921169211792118921199212092121921229212392124921259212692127921289212992130921319213292133921349213592136921379213892139921409214192142921439214492145921469214792148921499215092151921529215392154921559215692157921589215992160921619216292163921649216592166921679216892169921709217192172921739217492175921769217792178921799218092181921829218392184921859218692187921889218992190921919219292193921949219592196921979219892199922009220192202922039220492205922069220792208922099221092211922129221392214922159221692217922189221992220922219222292223922249222592226922279222892229922309223192232922339223492235922369223792238922399224092241922429224392244922459224692247922489224992250922519225292253922549225592256922579225892259922609226192262922639226492265922669226792268922699227092271922729227392274922759227692277922789227992280922819228292283922849228592286922879228892289922909229192292922939229492295922969229792298922999230092301923029230392304923059230692307923089230992310923119231292313923149231592316923179231892319923209232192322923239232492325923269232792328923299233092331923329233392334923359233692337923389233992340923419234292343923449234592346923479234892349923509235192352923539235492355923569235792358923599236092361923629236392364923659236692367923689236992370923719237292373923749237592376923779237892379923809238192382923839238492385923869238792388923899239092391923929239392394923959239692397923989239992400924019240292403924049240592406924079240892409924109241192412924139241492415924169241792418924199242092421924229242392424924259242692427924289242992430924319243292433924349243592436924379243892439924409244192442924439244492445924469244792448924499245092451924529245392454924559245692457924589245992460924619246292463924649246592466924679246892469924709247192472924739247492475924769247792478924799248092481924829248392484924859248692487924889248992490924919249292493924949249592496924979249892499925009250192502925039250492505925069250792508925099251092511925129251392514925159251692517925189251992520925219252292523925249252592526925279252892529925309253192532925339253492535925369253792538925399254092541925429254392544925459254692547925489254992550925519255292553925549255592556925579255892559925609256192562925639256492565925669256792568925699257092571925729257392574925759257692577925789257992580925819258292583925849258592586925879258892589925909259192592925939259492595925969259792598925999260092601926029260392604926059260692607926089260992610926119261292613926149261592616926179261892619926209262192622926239262492625926269262792628926299263092631926329263392634926359263692637926389263992640926419264292643926449264592646926479264892649926509265192652926539265492655926569265792658926599266092661926629266392664926659266692667926689266992670926719267292673926749267592676926779267892679926809268192682926839268492685926869268792688926899269092691926929269392694926959269692697926989269992700927019270292703927049270592706927079270892709927109271192712927139271492715927169271792718927199272092721927229272392724927259272692727927289272992730927319273292733927349273592736927379273892739927409274192742927439274492745927469274792748927499275092751927529275392754927559275692757927589275992760927619276292763927649276592766927679276892769927709277192772927739277492775927769277792778927799278092781927829278392784927859278692787927889278992790927919279292793927949279592796927979279892799928009280192802928039280492805928069280792808928099281092811928129281392814928159281692817928189281992820928219282292823928249282592826928279282892829928309283192832928339283492835928369283792838928399284092841928429284392844928459284692847928489284992850928519285292853928549285592856928579285892859928609286192862928639286492865928669286792868928699287092871928729287392874928759287692877928789287992880928819288292883928849288592886928879288892889928909289192892928939289492895928969289792898928999290092901929029290392904929059290692907929089290992910929119291292913929149291592916929179291892919929209292192922929239292492925929269292792928929299293092931929329293392934929359293692937929389293992940929419294292943929449294592946929479294892949929509295192952929539295492955929569295792958929599296092961929629296392964929659296692967929689296992970929719297292973929749297592976929779297892979929809298192982929839298492985929869298792988929899299092991929929299392994929959299692997929989299993000930019300293003930049300593006930079300893009930109301193012930139301493015930169301793018930199302093021930229302393024930259302693027930289302993030930319303293033930349303593036930379303893039930409304193042930439304493045930469304793048930499305093051930529305393054930559305693057930589305993060930619306293063930649306593066930679306893069930709307193072930739307493075930769307793078930799308093081930829308393084930859308693087930889308993090930919309293093930949309593096930979309893099931009310193102931039310493105931069310793108931099311093111931129311393114931159311693117931189311993120931219312293123931249312593126931279312893129931309313193132931339313493135931369313793138931399314093141931429314393144931459314693147931489314993150931519315293153931549315593156931579315893159931609316193162931639316493165931669316793168931699317093171931729317393174931759317693177931789317993180931819318293183931849318593186931879318893189931909319193192931939319493195931969319793198931999320093201932029320393204932059320693207932089320993210932119321293213932149321593216932179321893219932209322193222932239322493225932269322793228932299323093231932329323393234932359323693237932389323993240932419324293243932449324593246932479324893249932509325193252932539325493255932569325793258932599326093261932629326393264932659326693267932689326993270932719327293273932749327593276932779327893279932809328193282932839328493285932869328793288932899329093291932929329393294932959329693297932989329993300933019330293303933049330593306933079330893309933109331193312933139331493315933169331793318933199332093321933229332393324933259332693327933289332993330933319333293333933349333593336933379333893339933409334193342933439334493345933469334793348933499335093351933529335393354933559335693357933589335993360933619336293363933649336593366933679336893369933709337193372933739337493375933769337793378933799338093381933829338393384933859338693387933889338993390933919339293393933949339593396933979339893399934009340193402934039340493405934069340793408934099341093411934129341393414934159341693417934189341993420934219342293423934249342593426934279342893429934309343193432934339343493435934369343793438934399344093441934429344393444934459344693447934489344993450934519345293453934549345593456934579345893459934609346193462934639346493465934669346793468934699347093471934729347393474934759347693477934789347993480934819348293483934849348593486934879348893489934909349193492934939349493495934969349793498934999350093501935029350393504935059350693507935089350993510935119351293513935149351593516935179351893519935209352193522935239352493525935269352793528935299353093531935329353393534935359353693537935389353993540935419354293543935449354593546935479354893549935509355193552935539355493555935569355793558935599356093561935629356393564935659356693567935689356993570935719357293573935749357593576935779357893579935809358193582935839358493585935869358793588935899359093591935929359393594935959359693597935989359993600936019360293603936049360593606936079360893609936109361193612936139361493615936169361793618936199362093621936229362393624936259362693627936289362993630936319363293633936349363593636936379363893639936409364193642936439364493645936469364793648936499365093651936529365393654936559365693657936589365993660936619366293663936649366593666936679366893669936709367193672936739367493675936769367793678936799368093681936829368393684936859368693687936889368993690936919369293693936949369593696936979369893699937009370193702937039370493705937069370793708937099371093711937129371393714937159371693717937189371993720937219372293723937249372593726937279372893729937309373193732937339373493735937369373793738937399374093741937429374393744937459374693747937489374993750937519375293753937549375593756937579375893759937609376193762937639376493765937669376793768937699377093771937729377393774937759377693777937789377993780937819378293783937849378593786937879378893789937909379193792937939379493795937969379793798937999380093801938029380393804938059380693807938089380993810938119381293813938149381593816938179381893819938209382193822938239382493825938269382793828938299383093831938329383393834938359383693837938389383993840938419384293843938449384593846938479384893849938509385193852938539385493855938569385793858938599386093861938629386393864938659386693867938689386993870938719387293873938749387593876938779387893879938809388193882938839388493885938869388793888938899389093891938929389393894938959389693897938989389993900939019390293903939049390593906939079390893909939109391193912939139391493915939169391793918939199392093921939229392393924939259392693927939289392993930939319393293933939349393593936939379393893939939409394193942939439394493945939469394793948939499395093951939529395393954939559395693957939589395993960939619396293963939649396593966939679396893969939709397193972939739397493975939769397793978939799398093981939829398393984939859398693987939889398993990939919399293993939949399593996939979399893999940009400194002940039400494005940069400794008940099401094011940129401394014940159401694017940189401994020940219402294023940249402594026940279402894029940309403194032940339403494035940369403794038940399404094041940429404394044940459404694047940489404994050940519405294053940549405594056940579405894059940609406194062940639406494065940669406794068940699407094071940729407394074940759407694077940789407994080940819408294083940849408594086940879408894089940909409194092940939409494095940969409794098940999410094101941029410394104941059410694107941089410994110941119411294113941149411594116941179411894119941209412194122941239412494125941269412794128941299413094131941329413394134941359413694137941389413994140941419414294143941449414594146941479414894149941509415194152941539415494155941569415794158941599416094161941629416394164941659416694167941689416994170941719417294173941749417594176941779417894179941809418194182941839418494185941869418794188941899419094191941929419394194941959419694197941989419994200942019420294203942049420594206942079420894209942109421194212942139421494215942169421794218942199422094221942229422394224942259422694227942289422994230942319423294233942349423594236942379423894239942409424194242942439424494245942469424794248942499425094251942529425394254942559425694257942589425994260942619426294263942649426594266942679426894269942709427194272942739427494275942769427794278942799428094281942829428394284942859428694287942889428994290942919429294293942949429594296942979429894299943009430194302943039430494305943069430794308943099431094311943129431394314943159431694317943189431994320943219432294323943249432594326943279432894329943309433194332943339433494335943369433794338943399434094341943429434394344943459434694347943489434994350943519435294353943549435594356943579435894359943609436194362943639436494365943669436794368943699437094371943729437394374943759437694377943789437994380943819438294383943849438594386943879438894389943909439194392943939439494395943969439794398943999440094401944029440394404944059440694407944089440994410944119441294413944149441594416944179441894419944209442194422944239442494425944269442794428944299443094431944329443394434944359443694437944389443994440944419444294443944449444594446944479444894449944509445194452944539445494455944569445794458944599446094461944629446394464944659446694467944689446994470944719447294473944749447594476944779447894479944809448194482944839448494485944869448794488944899449094491944929449394494944959449694497944989449994500945019450294503945049450594506945079450894509945109451194512945139451494515945169451794518945199452094521945229452394524945259452694527945289452994530945319453294533945349453594536945379453894539945409454194542945439454494545945469454794548945499455094551945529455394554945559455694557945589455994560945619456294563945649456594566945679456894569945709457194572945739457494575945769457794578945799458094581945829458394584945859458694587945889458994590945919459294593945949459594596945979459894599946009460194602946039460494605946069460794608946099461094611946129461394614946159461694617946189461994620946219462294623946249462594626946279462894629946309463194632946339463494635946369463794638946399464094641946429464394644946459464694647946489464994650946519465294653946549465594656946579465894659946609466194662946639466494665946669466794668946699467094671946729467394674946759467694677946789467994680946819468294683946849468594686946879468894689946909469194692946939469494695946969469794698946999470094701947029470394704947059470694707947089470994710947119471294713947149471594716947179471894719947209472194722947239472494725947269472794728947299473094731947329473394734947359473694737947389473994740947419474294743947449474594746947479474894749947509475194752947539475494755947569475794758947599476094761947629476394764947659476694767947689476994770947719477294773947749477594776947779477894779947809478194782947839478494785947869478794788947899479094791947929479394794947959479694797947989479994800948019480294803948049480594806948079480894809948109481194812948139481494815948169481794818948199482094821948229482394824948259482694827948289482994830948319483294833948349483594836948379483894839948409484194842948439484494845948469484794848948499485094851948529485394854948559485694857948589485994860948619486294863948649486594866948679486894869948709487194872948739487494875948769487794878948799488094881948829488394884948859488694887948889488994890948919489294893948949489594896948979489894899949009490194902949039490494905949069490794908949099491094911949129491394914949159491694917949189491994920949219492294923949249492594926949279492894929949309493194932949339493494935949369493794938949399494094941949429494394944949459494694947949489494994950949519495294953949549495594956949579495894959949609496194962949639496494965949669496794968949699497094971949729497394974949759497694977949789497994980949819498294983949849498594986949879498894989949909499194992949939499494995949969499794998949999500095001950029500395004950059500695007950089500995010950119501295013950149501595016950179501895019950209502195022950239502495025950269502795028950299503095031950329503395034950359503695037950389503995040950419504295043950449504595046950479504895049950509505195052950539505495055950569505795058950599506095061950629506395064950659506695067950689506995070950719507295073950749507595076950779507895079950809508195082950839508495085950869508795088950899509095091950929509395094950959509695097950989509995100951019510295103951049510595106951079510895109951109511195112951139511495115951169511795118951199512095121951229512395124951259512695127951289512995130951319513295133951349513595136951379513895139951409514195142951439514495145951469514795148951499515095151951529515395154951559515695157951589515995160951619516295163951649516595166951679516895169951709517195172951739517495175951769517795178951799518095181951829518395184951859518695187951889518995190951919519295193951949519595196951979519895199952009520195202952039520495205952069520795208952099521095211952129521395214952159521695217952189521995220952219522295223952249522595226952279522895229952309523195232952339523495235952369523795238952399524095241952429524395244952459524695247952489524995250952519525295253952549525595256952579525895259952609526195262952639526495265952669526795268952699527095271952729527395274952759527695277952789527995280952819528295283952849528595286952879528895289952909529195292952939529495295952969529795298952999530095301953029530395304953059530695307953089530995310953119531295313953149531595316953179531895319953209532195322953239532495325953269532795328953299533095331953329533395334953359533695337953389533995340953419534295343953449534595346953479534895349953509535195352953539535495355953569535795358953599536095361953629536395364953659536695367953689536995370953719537295373953749537595376953779537895379953809538195382953839538495385953869538795388953899539095391953929539395394953959539695397953989539995400954019540295403954049540595406954079540895409954109541195412954139541495415954169541795418954199542095421954229542395424954259542695427954289542995430954319543295433954349543595436954379543895439954409544195442954439544495445954469544795448954499545095451954529545395454954559545695457954589545995460954619546295463954649546595466954679546895469954709547195472954739547495475954769547795478954799548095481954829548395484954859548695487954889548995490954919549295493954949549595496954979549895499955009550195502955039550495505955069550795508955099551095511955129551395514955159551695517955189551995520955219552295523955249552595526955279552895529955309553195532955339553495535955369553795538955399554095541955429554395544955459554695547955489554995550955519555295553955549555595556955579555895559955609556195562955639556495565955669556795568955699557095571955729557395574955759557695577955789557995580955819558295583955849558595586955879558895589955909559195592955939559495595955969559795598955999560095601956029560395604956059560695607956089560995610956119561295613956149561595616956179561895619956209562195622956239562495625956269562795628956299563095631956329563395634956359563695637956389563995640956419564295643956449564595646956479564895649956509565195652956539565495655956569565795658956599566095661956629566395664956659566695667956689566995670956719567295673956749567595676956779567895679956809568195682956839568495685956869568795688956899569095691956929569395694956959569695697956989569995700957019570295703957049570595706957079570895709957109571195712957139571495715957169571795718957199572095721957229572395724957259572695727957289572995730957319573295733957349573595736957379573895739957409574195742957439574495745957469574795748957499575095751957529575395754957559575695757957589575995760957619576295763957649576595766957679576895769957709577195772957739577495775957769577795778957799578095781957829578395784957859578695787957889578995790957919579295793957949579595796957979579895799958009580195802958039580495805958069580795808958099581095811958129581395814958159581695817958189581995820958219582295823958249582595826958279582895829958309583195832958339583495835958369583795838958399584095841958429584395844958459584695847958489584995850958519585295853958549585595856958579585895859958609586195862958639586495865958669586795868958699587095871958729587395874958759587695877958789587995880958819588295883958849588595886958879588895889958909589195892958939589495895958969589795898958999590095901959029590395904959059590695907959089590995910959119591295913959149591595916959179591895919959209592195922959239592495925959269592795928959299593095931959329593395934959359593695937959389593995940959419594295943959449594595946959479594895949959509595195952959539595495955959569595795958959599596095961959629596395964959659596695967959689596995970959719597295973959749597595976959779597895979959809598195982959839598495985959869598795988959899599095991959929599395994959959599695997959989599996000960019600296003960049600596006960079600896009960109601196012960139601496015960169601796018960199602096021960229602396024960259602696027960289602996030960319603296033960349603596036960379603896039960409604196042960439604496045960469604796048960499605096051960529605396054960559605696057960589605996060960619606296063960649606596066960679606896069960709607196072960739607496075960769607796078960799608096081960829608396084960859608696087960889608996090960919609296093960949609596096960979609896099961009610196102961039610496105961069610796108961099611096111961129611396114961159611696117961189611996120961219612296123961249612596126961279612896129961309613196132961339613496135961369613796138961399614096141961429614396144961459614696147961489614996150961519615296153961549615596156961579615896159961609616196162961639616496165961669616796168961699617096171961729617396174961759617696177961789617996180961819618296183961849618596186961879618896189961909619196192961939619496195961969619796198961999620096201962029620396204962059620696207962089620996210962119621296213962149621596216962179621896219962209622196222962239622496225962269622796228962299623096231962329623396234962359623696237962389623996240962419624296243962449624596246962479624896249962509625196252962539625496255962569625796258962599626096261962629626396264962659626696267962689626996270962719627296273962749627596276962779627896279962809628196282962839628496285962869628796288962899629096291962929629396294962959629696297962989629996300963019630296303963049630596306963079630896309963109631196312963139631496315963169631796318963199632096321963229632396324963259632696327963289632996330963319633296333963349633596336963379633896339963409634196342963439634496345963469634796348963499635096351963529635396354963559635696357963589635996360963619636296363963649636596366963679636896369963709637196372963739637496375963769637796378963799638096381963829638396384963859638696387963889638996390963919639296393963949639596396963979639896399964009640196402964039640496405964069640796408964099641096411964129641396414964159641696417964189641996420964219642296423964249642596426964279642896429964309643196432964339643496435964369643796438964399644096441964429644396444964459644696447964489644996450964519645296453964549645596456964579645896459964609646196462964639646496465964669646796468964699647096471964729647396474964759647696477964789647996480964819648296483964849648596486964879648896489964909649196492964939649496495964969649796498964999650096501965029650396504965059650696507965089650996510965119651296513965149651596516965179651896519965209652196522965239652496525965269652796528965299653096531965329653396534965359653696537965389653996540965419654296543965449654596546965479654896549965509655196552965539655496555965569655796558965599656096561965629656396564965659656696567965689656996570965719657296573965749657596576965779657896579965809658196582965839658496585965869658796588965899659096591965929659396594965959659696597965989659996600966019660296603966049660596606966079660896609966109661196612966139661496615966169661796618966199662096621966229662396624966259662696627966289662996630966319663296633966349663596636966379663896639966409664196642966439664496645966469664796648966499665096651966529665396654966559665696657966589665996660966619666296663966649666596666966679666896669966709667196672966739667496675966769667796678966799668096681966829668396684966859668696687966889668996690966919669296693966949669596696966979669896699967009670196702967039670496705967069670796708967099671096711967129671396714967159671696717967189671996720967219672296723967249672596726967279672896729967309673196732967339673496735967369673796738967399674096741967429674396744967459674696747967489674996750967519675296753967549675596756967579675896759967609676196762967639676496765967669676796768967699677096771967729677396774967759677696777967789677996780967819678296783967849678596786967879678896789967909679196792967939679496795967969679796798967999680096801968029680396804968059680696807968089680996810968119681296813968149681596816968179681896819968209682196822968239682496825968269682796828968299683096831968329683396834968359683696837968389683996840968419684296843968449684596846968479684896849968509685196852968539685496855968569685796858968599686096861968629686396864968659686696867968689686996870968719687296873968749687596876968779687896879968809688196882968839688496885968869688796888968899689096891968929689396894968959689696897968989689996900969019690296903969049690596906969079690896909969109691196912969139691496915969169691796918969199692096921969229692396924969259692696927969289692996930969319693296933969349693596936969379693896939969409694196942969439694496945969469694796948969499695096951969529695396954969559695696957969589695996960969619696296963969649696596966969679696896969969709697196972969739697496975969769697796978969799698096981969829698396984969859698696987969889698996990969919699296993969949699596996969979699896999970009700197002970039700497005970069700797008970099701097011970129701397014970159701697017970189701997020970219702297023970249702597026970279702897029970309703197032970339703497035970369703797038970399704097041970429704397044970459704697047970489704997050970519705297053970549705597056970579705897059970609706197062970639706497065970669706797068970699707097071970729707397074970759707697077970789707997080970819708297083970849708597086970879708897089970909709197092970939709497095970969709797098970999710097101971029710397104971059710697107971089710997110971119711297113971149711597116971179711897119971209712197122971239712497125971269712797128971299713097131971329713397134971359713697137971389713997140971419714297143971449714597146971479714897149971509715197152971539715497155971569715797158971599716097161971629716397164971659716697167971689716997170971719717297173971749717597176971779717897179971809718197182971839718497185971869718797188971899719097191971929719397194971959719697197971989719997200972019720297203972049720597206972079720897209972109721197212972139721497215972169721797218972199722097221972229722397224972259722697227972289722997230972319723297233972349723597236972379723897239972409724197242972439724497245972469724797248972499725097251972529725397254972559725697257972589725997260972619726297263972649726597266972679726897269972709727197272972739727497275972769727797278972799728097281972829728397284972859728697287972889728997290972919729297293972949729597296972979729897299973009730197302973039730497305973069730797308973099731097311973129731397314973159731697317973189731997320973219732297323973249732597326973279732897329973309733197332973339733497335973369733797338973399734097341973429734397344973459734697347973489734997350973519735297353973549735597356973579735897359973609736197362973639736497365973669736797368973699737097371973729737397374973759737697377973789737997380973819738297383973849738597386973879738897389973909739197392973939739497395973969739797398973999740097401974029740397404974059740697407974089740997410974119741297413974149741597416974179741897419974209742197422974239742497425974269742797428974299743097431974329743397434974359743697437974389743997440974419744297443974449744597446974479744897449974509745197452974539745497455974569745797458974599746097461974629746397464974659746697467974689746997470974719747297473974749747597476974779747897479974809748197482974839748497485974869748797488974899749097491974929749397494974959749697497974989749997500975019750297503975049750597506975079750897509975109751197512975139751497515975169751797518975199752097521975229752397524975259752697527975289752997530975319753297533975349753597536975379753897539975409754197542975439754497545975469754797548975499755097551975529755397554975559755697557975589755997560975619756297563975649756597566975679756897569975709757197572975739757497575975769757797578975799758097581975829758397584975859758697587975889758997590975919759297593975949759597596975979759897599976009760197602976039760497605976069760797608976099761097611976129761397614976159761697617976189761997620976219762297623976249762597626976279762897629976309763197632976339763497635976369763797638976399764097641976429764397644976459764697647976489764997650976519765297653976549765597656976579765897659976609766197662976639766497665976669766797668976699767097671976729767397674976759767697677976789767997680976819768297683976849768597686976879768897689976909769197692976939769497695976969769797698976999770097701977029770397704977059770697707977089770997710977119771297713977149771597716977179771897719977209772197722977239772497725977269772797728977299773097731977329773397734977359773697737977389773997740977419774297743977449774597746977479774897749977509775197752977539775497755977569775797758977599776097761977629776397764977659776697767977689776997770977719777297773977749777597776977779777897779977809778197782977839778497785977869778797788977899779097791977929779397794977959779697797977989779997800978019780297803978049780597806978079780897809978109781197812978139781497815978169781797818978199782097821978229782397824978259782697827978289782997830978319783297833978349783597836978379783897839978409784197842978439784497845978469784797848978499785097851978529785397854978559785697857978589785997860978619786297863978649786597866978679786897869978709787197872978739787497875978769787797878978799788097881978829788397884978859788697887978889788997890978919789297893978949789597896978979789897899979009790197902979039790497905979069790797908979099791097911979129791397914979159791697917979189791997920979219792297923979249792597926979279792897929979309793197932979339793497935979369793797938979399794097941979429794397944979459794697947979489794997950979519795297953979549795597956979579795897959979609796197962979639796497965979669796797968979699797097971979729797397974979759797697977979789797997980979819798297983979849798597986979879798897989979909799197992979939799497995979969799797998979999800098001980029800398004980059800698007980089800998010980119801298013980149801598016980179801898019980209802198022980239802498025980269802798028980299803098031980329803398034980359803698037980389803998040980419804298043980449804598046980479804898049980509805198052980539805498055980569805798058980599806098061980629806398064980659806698067980689806998070980719807298073980749807598076980779807898079980809808198082980839808498085980869808798088980899809098091980929809398094980959809698097980989809998100981019810298103981049810598106981079810898109981109811198112981139811498115981169811798118981199812098121981229812398124981259812698127981289812998130981319813298133981349813598136981379813898139981409814198142981439814498145981469814798148981499815098151981529815398154981559815698157981589815998160981619816298163981649816598166981679816898169981709817198172981739817498175981769817798178981799818098181981829818398184981859818698187981889818998190981919819298193981949819598196981979819898199982009820198202982039820498205982069820798208982099821098211982129821398214982159821698217982189821998220982219822298223982249822598226982279822898229982309823198232982339823498235982369823798238982399824098241982429824398244982459824698247982489824998250982519825298253982549825598256982579825898259982609826198262982639826498265982669826798268982699827098271982729827398274982759827698277982789827998280982819828298283982849828598286982879828898289982909829198292982939829498295982969829798298982999830098301983029830398304983059830698307983089830998310983119831298313983149831598316983179831898319983209832198322983239832498325983269832798328983299833098331983329833398334983359833698337983389833998340983419834298343983449834598346983479834898349983509835198352983539835498355983569835798358983599836098361983629836398364983659836698367983689836998370983719837298373983749837598376983779837898379983809838198382983839838498385983869838798388983899839098391983929839398394983959839698397983989839998400984019840298403984049840598406984079840898409984109841198412984139841498415984169841798418984199842098421984229842398424984259842698427984289842998430984319843298433984349843598436984379843898439984409844198442984439844498445984469844798448984499845098451984529845398454984559845698457984589845998460984619846298463984649846598466984679846898469984709847198472984739847498475984769847798478984799848098481984829848398484984859848698487984889848998490984919849298493984949849598496984979849898499985009850198502985039850498505985069850798508985099851098511985129851398514985159851698517985189851998520985219852298523985249852598526985279852898529985309853198532985339853498535985369853798538985399854098541985429854398544985459854698547985489854998550985519855298553985549855598556985579855898559985609856198562985639856498565985669856798568985699857098571985729857398574985759857698577985789857998580985819858298583985849858598586985879858898589985909859198592985939859498595985969859798598985999860098601986029860398604986059860698607986089860998610986119861298613986149861598616986179861898619986209862198622986239862498625986269862798628986299863098631986329863398634986359863698637986389863998640986419864298643986449864598646986479864898649986509865198652986539865498655986569865798658986599866098661986629866398664986659866698667986689866998670986719867298673986749867598676986779867898679986809868198682986839868498685986869868798688986899869098691986929869398694986959869698697986989869998700987019870298703987049870598706987079870898709987109871198712987139871498715987169871798718987199872098721987229872398724987259872698727987289872998730987319873298733987349873598736987379873898739987409874198742987439874498745987469874798748987499875098751987529875398754987559875698757987589875998760987619876298763987649876598766987679876898769987709877198772987739877498775987769877798778987799878098781987829878398784987859878698787987889878998790987919879298793987949879598796987979879898799988009880198802988039880498805988069880798808988099881098811988129881398814988159881698817988189881998820988219882298823988249882598826988279882898829988309883198832988339883498835988369883798838988399884098841988429884398844988459884698847988489884998850988519885298853988549885598856988579885898859988609886198862988639886498865988669886798868988699887098871988729887398874988759887698877988789887998880988819888298883988849888598886988879888898889988909889198892988939889498895988969889798898988999890098901989029890398904989059890698907989089890998910989119891298913989149891598916989179891898919989209892198922989239892498925989269892798928989299893098931989329893398934989359893698937989389893998940989419894298943989449894598946989479894898949989509895198952989539895498955989569895798958989599896098961989629896398964989659896698967989689896998970989719897298973989749897598976989779897898979989809898198982989839898498985989869898798988989899899098991989929899398994989959899698997989989899999000990019900299003990049900599006990079900899009990109901199012990139901499015990169901799018990199902099021990229902399024990259902699027990289902999030990319903299033990349903599036990379903899039990409904199042990439904499045990469904799048990499905099051990529905399054990559905699057990589905999060990619906299063990649906599066990679906899069990709907199072990739907499075990769907799078990799908099081990829908399084990859908699087990889908999090990919909299093990949909599096990979909899099991009910199102991039910499105991069910799108991099911099111991129911399114991159911699117991189911999120991219912299123991249912599126991279912899129991309913199132991339913499135991369913799138991399914099141991429914399144991459914699147991489914999150991519915299153991549915599156991579915899159991609916199162991639916499165991669916799168991699917099171991729917399174991759917699177991789917999180991819918299183991849918599186991879918899189991909919199192991939919499195991969919799198991999920099201992029920399204992059920699207992089920999210992119921299213992149921599216992179921899219992209922199222992239922499225992269922799228992299923099231992329923399234992359923699237992389923999240992419924299243992449924599246992479924899249992509925199252992539925499255992569925799258992599926099261992629926399264992659926699267992689926999270992719927299273992749927599276992779927899279992809928199282992839928499285992869928799288992899929099291992929929399294992959929699297992989929999300993019930299303993049930599306993079930899309993109931199312993139931499315993169931799318993199932099321993229932399324993259932699327993289932999330993319933299333993349933599336993379933899339993409934199342993439934499345993469934799348993499935099351993529935399354993559935699357993589935999360993619936299363993649936599366993679936899369993709937199372993739937499375993769937799378993799938099381993829938399384993859938699387993889938999390993919939299393993949939599396993979939899399994009940199402994039940499405994069940799408994099941099411994129941399414994159941699417994189941999420994219942299423994249942599426994279942899429994309943199432994339943499435994369943799438994399944099441994429944399444994459944699447994489944999450994519945299453994549945599456994579945899459994609946199462994639946499465994669946799468994699947099471994729947399474994759947699477994789947999480994819948299483994849948599486994879948899489994909949199492994939949499495994969949799498994999950099501995029950399504995059950699507995089950999510995119951299513995149951599516995179951899519995209952199522995239952499525995269952799528995299953099531995329953399534995359953699537995389953999540995419954299543995449954599546995479954899549995509955199552995539955499555995569955799558995599956099561995629956399564995659956699567995689956999570995719957299573995749957599576995779957899579995809958199582995839958499585995869958799588995899959099591995929959399594995959959699597995989959999600996019960299603996049960599606996079960899609996109961199612996139961499615996169961799618996199962099621996229962399624996259962699627996289962999630996319963299633996349963599636996379963899639996409964199642996439964499645996469964799648996499965099651996529965399654996559965699657996589965999660996619966299663996649966599666996679966899669996709967199672996739967499675996769967799678996799968099681996829968399684996859968699687996889968999690996919969299693996949969599696996979969899699997009970199702997039970499705997069970799708997099971099711997129971399714997159971699717997189971999720997219972299723997249972599726997279972899729997309973199732997339973499735997369973799738997399974099741997429974399744997459974699747997489974999750997519975299753997549975599756997579975899759997609976199762997639976499765997669976799768997699977099771997729977399774997759977699777997789977999780997819978299783997849978599786997879978899789997909979199792997939979499795997969979799798997999980099801998029980399804998059980699807998089980999810998119981299813998149981599816998179981899819998209982199822998239982499825998269982799828998299983099831998329983399834998359983699837998389983999840998419984299843998449984599846998479984899849998509985199852998539985499855998569985799858998599986099861998629986399864998659986699867998689986999870998719987299873998749987599876998779987899879998809988199882998839988499885998869988799888998899989099891998929989399894998959989699897998989989999900999019990299903999049990599906999079990899909999109991199912999139991499915999169991799918999199992099921999229992399924999259992699927999289992999930999319993299933999349993599936999379993899939999409994199942999439994499945999469994799948999499995099951999529995399954999559995699957999589995999960999619996299963999649996599966999679996899969999709997199972999739997499975999769997799978999799998099981999829998399984999859998699987999889998999990999919999299993999949999599996999979999899999100000100001100002100003100004100005100006100007100008100009100010100011100012100013100014100015100016100017100018100019100020100021100022100023100024100025100026100027100028100029100030100031100032100033100034100035100036100037100038100039100040100041100042100043100044100045100046100047100048100049100050100051100052100053100054100055100056100057100058100059100060100061100062100063100064100065100066100067100068100069100070100071100072100073100074100075100076100077100078100079100080100081100082100083100084100085100086100087100088100089100090100091100092100093100094100095100096100097100098100099100100100101100102100103100104100105100106100107100108100109100110100111100112100113100114100115100116100117100118100119100120100121100122100123100124100125100126100127100128100129100130100131100132100133100134100135100136100137100138100139100140100141100142100143100144100145100146100147100148100149100150100151100152100153100154100155100156100157100158100159100160100161100162100163100164100165100166100167100168100169100170100171100172100173100174100175100176100177100178100179100180100181100182100183100184100185100186100187100188100189100190100191100192100193100194100195100196100197100198100199100200100201100202100203100204100205100206100207100208100209100210100211100212100213100214100215100216100217100218100219100220100221100222100223100224100225100226100227100228100229100230100231100232100233100234100235100236100237100238100239100240100241100242100243100244100245100246100247100248100249100250100251100252100253100254100255100256100257100258100259100260100261100262100263100264100265100266100267100268100269100270100271100272100273100274100275100276100277100278100279100280100281100282100283100284100285100286100287100288100289100290100291100292100293100294100295100296100297100298100299100300100301100302100303100304100305100306100307100308100309100310100311100312100313100314100315100316100317100318100319100320100321100322100323100324100325100326100327100328100329100330100331100332100333100334100335100336100337100338100339100340100341100342100343100344100345100346100347100348100349100350100351100352100353100354100355100356100357100358100359100360100361100362100363100364100365100366100367100368100369100370100371100372100373100374100375100376100377100378100379100380100381100382100383100384100385100386100387100388100389100390100391100392100393100394100395100396100397100398100399100400100401100402100403100404100405100406100407100408100409100410100411100412100413100414100415100416100417100418100419100420100421100422100423100424100425100426100427100428100429100430100431100432100433100434100435100436100437100438100439100440100441100442100443100444100445100446100447100448100449100450100451100452100453100454100455100456100457100458100459100460100461100462100463100464100465100466100467100468100469100470100471100472100473100474100475100476100477100478100479100480100481100482100483100484100485100486100487100488100489100490100491100492100493100494100495100496100497100498100499100500100501100502100503100504100505100506100507100508100509100510100511100512100513100514100515100516100517100518100519100520100521100522100523100524100525100526100527100528100529100530100531100532100533100534100535100536100537100538100539100540100541100542100543100544100545100546100547100548100549100550100551100552100553100554100555100556100557100558100559100560100561100562100563100564100565100566100567100568100569100570100571100572100573100574100575100576100577100578100579100580100581100582100583100584100585100586100587100588100589100590100591100592100593100594100595100596100597100598100599100600100601100602100603100604100605100606100607100608100609100610100611100612100613100614100615100616100617100618100619100620100621100622100623100624100625100626100627100628100629100630100631100632100633100634100635100636100637100638100639100640100641100642100643100644100645100646100647100648100649100650100651100652100653100654100655100656100657100658100659100660100661100662100663100664100665100666100667100668100669100670100671100672100673100674100675100676100677100678100679100680100681100682100683100684100685100686100687100688100689100690100691100692100693100694100695100696100697100698100699100700100701100702100703100704100705100706100707100708100709100710100711100712100713100714100715100716100717100718100719100720100721100722100723100724100725100726100727100728100729100730100731100732100733100734100735100736100737100738100739100740100741100742100743100744100745100746100747100748100749100750100751100752100753100754100755100756100757100758100759100760100761100762100763100764100765100766100767100768100769100770100771100772100773100774100775100776100777100778100779100780100781100782100783100784100785100786100787100788100789100790100791100792100793100794100795100796100797100798100799100800100801100802100803100804100805100806100807100808100809100810100811100812100813100814100815100816100817100818100819100820100821100822100823100824100825100826100827100828100829100830100831100832100833100834100835100836100837100838100839100840100841100842100843100844100845100846100847100848100849100850100851100852100853100854100855100856100857100858100859100860100861100862100863100864100865100866100867100868100869100870100871100872100873100874100875100876100877100878100879100880100881100882100883100884100885100886100887100888100889100890100891100892100893100894100895100896100897100898100899100900100901100902100903100904100905100906100907100908100909100910100911100912100913100914100915100916100917100918100919100920100921100922100923100924100925100926100927100928100929100930100931100932100933100934100935100936100937100938100939100940100941100942100943100944100945100946100947100948100949100950100951100952100953100954100955100956100957100958100959100960100961100962100963100964100965100966100967100968100969100970100971100972100973100974100975100976100977100978100979100980100981100982100983100984100985100986100987100988100989100990100991100992100993100994100995100996100997100998100999101000101001101002101003101004101005101006101007101008101009101010101011101012101013101014101015101016101017101018101019101020101021101022101023101024101025101026101027101028101029101030101031101032101033101034101035101036101037101038101039101040101041101042101043101044101045101046101047101048101049101050101051101052101053101054101055101056101057101058101059101060101061101062101063101064101065101066101067101068101069101070101071101072101073101074101075101076101077101078101079101080101081101082101083101084101085101086101087101088101089101090101091101092101093101094101095101096101097101098101099101100101101101102101103101104101105101106101107101108101109101110101111101112101113101114101115101116101117101118101119101120101121101122101123101124101125101126101127101128101129101130101131101132101133101134101135101136101137101138101139101140101141101142101143101144101145101146101147101148101149101150101151101152101153101154101155101156101157101158101159101160101161101162101163101164101165101166101167101168101169101170101171101172101173101174101175101176101177101178101179101180101181101182101183101184101185101186101187101188101189101190101191101192101193101194101195101196101197101198101199101200101201101202101203101204101205101206101207101208101209101210101211101212101213101214101215101216101217101218101219101220101221101222101223101224101225101226101227101228101229101230101231101232101233101234101235101236101237101238101239101240101241101242101243101244101245101246101247101248101249101250101251101252101253101254101255101256101257101258101259101260101261101262101263101264101265101266101267101268101269101270101271101272101273101274101275101276101277101278101279101280101281101282101283101284101285101286101287101288101289101290101291101292101293101294101295101296101297101298101299101300101301101302101303101304101305101306101307101308101309101310101311101312101313101314101315101316101317101318101319101320101321101322101323101324101325101326101327101328101329101330101331101332101333101334101335101336101337101338101339101340101341101342101343101344101345101346101347101348101349101350101351101352101353101354101355101356101357101358101359101360101361101362101363101364101365101366101367101368101369101370101371101372101373101374101375101376101377101378101379101380101381101382101383101384101385101386101387101388101389101390101391101392101393101394101395101396101397101398101399101400101401101402101403101404101405101406101407101408101409101410101411101412101413101414101415101416101417101418101419101420101421101422101423101424101425101426101427101428101429101430101431101432101433101434101435101436101437101438101439101440101441101442101443101444101445101446101447101448101449101450101451101452101453101454101455101456101457101458101459101460101461101462101463101464101465101466101467101468101469101470101471101472101473101474101475101476101477101478101479101480101481101482101483101484101485101486101487101488101489101490101491101492101493101494101495101496101497101498101499101500101501101502101503101504101505101506101507101508101509101510101511101512101513101514101515101516101517101518101519101520101521101522101523101524101525101526101527101528101529101530101531101532101533101534101535101536101537101538101539101540101541101542101543101544101545101546101547101548101549101550101551101552101553101554101555101556101557101558101559101560101561101562101563101564101565101566101567101568101569101570101571101572101573101574101575101576101577101578101579101580101581101582101583101584101585101586101587101588101589101590101591101592101593101594101595101596101597101598101599101600101601101602101603101604101605101606101607101608101609101610101611101612101613101614101615101616101617101618101619101620101621101622101623101624101625101626101627101628101629101630101631101632101633101634101635101636101637101638101639101640101641101642101643101644101645101646101647101648101649101650101651101652101653101654101655101656101657101658101659101660101661101662101663101664101665101666101667101668101669101670101671101672101673101674101675101676101677101678101679101680101681101682101683101684101685101686101687101688101689101690101691101692101693101694101695101696101697101698101699101700101701101702101703101704101705101706101707101708101709101710101711101712101713101714101715101716101717101718101719101720101721101722101723101724101725101726101727101728101729101730101731101732101733101734101735101736101737101738101739101740101741101742101743101744101745101746101747101748101749101750101751101752101753101754101755101756101757101758101759101760101761101762101763101764101765101766101767101768101769101770101771101772101773101774101775101776101777101778101779101780101781101782101783101784101785101786101787101788101789101790101791101792101793101794101795101796101797101798101799101800101801101802101803101804101805101806101807101808101809101810101811101812101813101814101815101816101817101818101819101820101821101822101823101824101825101826101827101828101829101830101831101832101833101834101835101836101837101838101839101840101841101842101843101844101845101846101847101848101849101850101851101852101853101854101855101856101857101858101859101860101861101862101863101864101865101866101867101868101869101870101871101872101873101874101875101876101877101878101879101880101881101882101883101884101885101886101887101888101889101890101891101892101893101894101895101896101897101898101899101900101901101902101903101904101905101906101907101908101909101910101911101912101913101914101915101916101917101918101919101920101921101922101923101924101925101926101927101928101929101930101931101932101933101934101935101936101937101938101939101940101941101942101943101944101945101946101947101948101949101950101951101952101953101954101955101956101957101958101959101960101961101962101963101964101965101966101967101968101969101970101971101972101973101974101975101976101977101978101979101980101981101982101983101984101985101986101987101988101989101990101991101992101993101994101995101996101997101998101999102000102001102002102003102004102005102006102007102008102009102010102011102012102013102014102015102016102017102018102019102020102021102022102023102024102025102026102027102028102029102030102031102032102033102034102035102036102037102038102039102040102041102042102043102044102045102046102047102048102049102050102051102052102053102054102055102056102057102058102059102060102061102062102063102064102065102066102067102068102069102070102071102072102073102074102075102076102077102078102079102080102081102082102083102084102085102086102087102088102089102090102091102092102093102094102095102096102097102098102099102100102101102102102103102104102105102106102107102108102109102110102111102112102113102114102115102116102117102118102119102120102121102122102123102124102125102126102127102128102129102130102131102132102133102134102135102136102137102138102139102140102141102142102143102144102145102146102147102148102149102150102151102152102153102154102155102156102157102158102159102160102161102162102163102164102165102166102167102168102169102170102171102172102173102174102175102176102177102178102179102180102181102182102183102184102185102186102187102188102189102190102191102192102193102194102195102196102197102198102199102200102201102202102203102204102205102206102207102208102209102210102211102212102213102214102215102216102217102218102219102220102221102222102223102224102225102226102227102228102229102230102231102232102233102234102235102236102237102238102239102240102241102242102243102244102245102246102247102248102249102250102251102252102253102254102255102256102257102258102259102260102261102262102263102264102265102266102267102268102269102270102271102272102273102274102275102276102277102278102279102280102281102282102283102284102285102286102287102288102289102290102291102292102293102294102295102296102297102298102299102300102301102302102303102304102305102306102307102308102309102310102311102312102313102314102315102316102317102318102319102320102321102322102323102324102325102326102327102328102329102330102331102332102333102334102335102336102337102338102339102340102341102342102343102344102345102346102347102348102349102350102351102352102353102354102355102356102357102358102359102360102361102362102363102364102365102366102367102368102369102370102371102372102373102374102375102376102377102378102379102380102381102382102383102384102385102386102387102388102389102390102391102392102393102394102395102396102397102398102399102400102401102402102403102404102405102406102407102408102409102410102411102412102413102414102415102416102417102418102419102420102421102422102423102424102425102426102427102428102429102430102431102432102433102434102435102436102437102438102439102440102441102442102443102444102445102446102447102448102449102450102451102452102453102454102455102456102457102458102459102460102461102462102463102464102465102466102467102468102469102470102471102472102473102474102475102476102477102478102479102480102481102482102483102484102485102486102487102488102489102490102491102492102493102494102495102496102497102498102499102500102501102502102503102504102505102506102507102508102509102510102511102512102513102514102515102516102517102518102519102520102521102522102523102524102525102526102527102528102529102530102531102532102533102534102535102536102537102538102539102540102541102542102543102544102545102546102547102548102549102550102551102552102553102554102555102556102557102558102559102560102561102562102563102564102565102566102567102568102569102570102571102572102573102574102575102576102577102578102579102580102581102582102583102584102585102586102587102588102589102590102591102592102593102594102595102596102597102598102599102600102601102602102603102604102605102606102607102608102609102610102611102612102613102614102615102616102617102618102619102620102621102622102623102624102625102626102627102628102629102630102631102632102633102634102635102636102637102638102639102640102641102642102643102644102645102646102647102648102649102650102651102652102653102654102655102656102657102658102659102660102661102662102663102664102665102666102667102668102669102670102671102672102673102674102675102676102677102678102679102680102681102682102683102684102685102686102687102688102689102690102691102692102693102694102695102696102697102698102699102700102701102702102703102704102705102706102707102708102709102710102711102712102713102714102715102716102717102718102719102720102721102722102723102724102725102726102727102728102729102730102731102732102733102734102735102736102737102738102739102740102741102742102743102744102745102746102747102748102749102750102751102752102753102754102755102756102757102758102759102760102761102762102763102764102765102766102767102768102769102770102771102772102773102774102775102776102777102778102779102780102781102782102783102784102785102786102787102788102789102790102791102792102793102794102795102796102797102798102799102800102801102802102803102804102805102806102807102808102809102810102811102812102813102814102815102816102817102818102819102820102821102822102823102824102825102826102827102828102829102830102831102832102833102834102835102836102837102838102839102840102841102842102843102844102845102846102847102848102849102850102851102852102853102854102855102856102857102858102859102860102861102862102863102864102865102866102867102868102869102870102871102872102873102874102875102876102877102878102879102880102881102882102883102884102885102886102887102888102889102890102891102892102893102894102895102896102897102898102899102900102901102902102903102904102905102906102907102908102909102910102911102912102913102914102915102916102917102918102919102920102921102922102923102924102925102926102927102928102929102930102931102932102933102934102935102936102937102938102939102940102941102942102943102944102945102946102947102948102949102950102951102952102953102954102955102956102957102958102959102960102961102962102963102964102965102966102967102968102969102970102971102972102973102974102975102976102977102978102979102980102981102982102983102984102985102986102987102988102989102990102991102992102993102994102995102996102997102998102999103000103001103002103003103004103005103006103007103008103009103010103011103012103013103014103015103016103017103018103019103020103021103022103023103024103025103026103027103028103029103030103031103032103033103034103035103036103037103038103039103040103041103042103043103044103045103046103047103048103049103050103051103052103053103054103055103056103057103058103059103060103061103062103063103064103065103066103067103068103069103070103071103072103073103074103075103076103077103078103079103080103081103082103083103084103085103086103087103088103089103090103091103092103093103094103095103096103097103098103099103100103101103102103103103104103105103106103107103108103109103110103111103112103113103114103115103116103117103118103119103120103121103122103123103124103125103126103127103128103129103130103131103132103133103134103135103136103137103138103139103140103141103142103143103144103145103146103147103148103149103150103151103152103153103154103155103156103157103158103159103160103161103162103163103164103165103166103167103168103169103170103171103172103173103174103175103176103177103178103179103180103181103182103183103184103185103186103187103188103189103190103191103192103193103194103195103196103197103198103199103200103201103202103203103204103205103206103207103208103209103210103211103212103213103214103215103216103217103218103219103220103221103222103223103224103225103226103227103228103229103230103231103232103233103234103235103236103237103238103239103240103241103242103243103244103245103246103247103248103249103250103251103252103253103254103255103256103257103258103259103260103261103262103263103264103265103266103267103268103269103270103271103272103273103274103275103276103277103278103279103280103281103282103283103284103285103286103287103288103289103290103291103292103293103294103295103296103297103298103299103300103301103302103303103304103305103306103307103308103309103310103311103312103313103314103315103316103317103318103319103320103321103322103323103324103325103326103327103328103329103330103331103332103333103334103335103336103337103338103339103340103341103342103343103344103345103346103347103348103349103350103351103352103353103354103355103356103357103358103359103360103361103362103363103364103365103366103367103368103369103370103371103372103373103374103375103376103377103378103379103380103381103382103383103384103385103386103387103388103389103390103391103392103393103394103395103396103397103398103399103400103401103402103403103404103405103406103407103408103409103410103411103412103413103414103415103416103417103418103419103420103421103422103423103424103425103426103427103428103429103430103431103432103433103434103435103436103437103438103439103440103441103442103443103444103445103446103447103448103449103450103451103452103453103454103455103456103457103458103459103460103461103462103463103464103465103466103467103468103469103470103471103472103473103474103475103476103477103478103479103480103481103482103483103484103485103486103487103488103489103490103491103492103493103494103495103496103497103498103499103500103501103502103503103504103505103506103507103508103509103510103511103512103513103514103515103516103517103518103519103520103521103522103523103524103525103526103527103528103529103530103531103532103533103534103535103536103537103538103539103540103541103542103543103544103545103546103547103548103549103550103551103552103553103554103555103556103557103558103559103560103561103562103563103564103565103566103567103568103569103570103571103572103573103574103575103576103577103578103579103580103581103582103583103584103585103586103587103588103589103590103591103592103593103594103595103596103597103598103599103600103601103602103603103604103605103606103607103608103609103610103611103612103613103614103615103616103617103618103619103620103621103622103623103624103625103626103627103628103629103630103631103632103633103634103635103636103637103638103639103640103641103642103643103644103645103646103647103648103649103650103651103652103653103654103655103656103657103658103659103660103661103662103663103664103665103666103667103668103669103670103671103672103673103674103675103676103677103678103679103680103681103682103683103684103685103686103687103688103689103690103691103692103693103694103695103696103697103698103699103700103701103702103703103704103705103706103707103708103709103710103711103712103713103714103715103716103717103718103719103720103721103722103723103724103725103726103727103728103729103730103731103732103733103734103735103736103737103738103739103740103741103742103743103744103745103746103747103748103749103750103751103752103753103754103755103756103757103758103759103760103761103762103763103764103765103766103767103768103769103770103771103772103773103774103775103776103777103778103779103780103781103782103783103784103785103786103787103788103789103790103791103792103793103794103795103796103797103798103799103800103801103802103803103804103805103806103807103808103809103810103811103812103813103814103815103816103817103818103819103820103821103822103823103824103825103826103827103828103829103830103831103832103833103834103835103836103837103838103839103840103841103842103843103844103845103846103847103848103849103850103851103852103853103854103855103856103857103858103859103860103861103862103863103864103865103866103867103868103869103870103871103872103873103874103875103876103877103878103879103880103881103882103883103884103885103886103887103888103889103890103891103892103893103894103895103896103897103898103899103900103901103902103903103904103905103906103907103908103909103910103911103912103913103914103915103916103917103918103919103920103921103922103923103924103925103926103927103928103929103930103931103932103933103934103935103936103937103938103939103940103941103942103943103944103945103946103947103948103949103950103951103952103953103954103955103956103957103958103959103960103961103962103963103964103965103966103967103968103969103970103971103972103973103974103975103976103977103978103979103980103981103982103983103984103985103986103987103988103989103990103991103992103993103994103995103996103997103998103999104000104001104002104003104004104005104006104007104008104009104010104011104012104013104014104015104016104017104018104019104020104021104022104023104024104025104026104027104028104029104030104031104032104033104034104035104036104037104038104039104040104041104042104043104044104045104046104047104048104049104050104051104052104053104054104055104056104057104058104059104060104061104062104063104064104065104066104067104068104069104070104071104072104073104074104075104076104077104078104079104080104081104082104083104084104085104086104087104088104089104090104091104092104093104094104095104096104097104098104099104100104101104102104103104104104105104106104107104108104109104110104111104112104113104114104115104116104117104118104119104120104121104122104123104124104125104126104127104128104129104130104131104132104133104134104135104136104137104138104139104140104141104142104143104144104145104146104147104148104149104150104151104152104153104154104155104156104157104158104159104160104161104162104163104164104165104166104167104168104169104170104171104172104173104174104175104176104177104178104179104180104181104182104183104184104185104186104187104188104189104190104191104192104193104194104195104196104197104198104199104200104201104202104203104204104205104206104207104208104209104210104211104212104213104214104215104216104217104218104219104220104221104222104223104224104225104226104227104228104229104230104231104232104233104234104235104236104237104238104239104240104241104242104243104244104245104246104247104248104249104250104251104252104253104254104255104256104257104258104259104260104261104262104263104264104265104266104267104268104269104270104271104272104273104274104275104276104277104278104279104280104281104282104283104284104285104286104287104288104289104290104291104292104293104294104295104296104297104298104299104300104301104302104303104304104305104306104307104308104309104310104311104312104313104314104315104316104317104318104319104320104321104322104323104324104325104326104327104328104329104330104331104332104333104334104335104336104337104338104339104340104341104342104343104344104345104346104347104348104349104350104351104352104353104354104355104356104357104358104359104360104361104362104363104364104365104366104367104368104369104370104371104372104373104374104375104376104377104378104379104380104381104382104383104384104385104386104387104388104389104390104391104392104393104394104395104396104397104398104399104400104401104402104403104404104405104406104407104408104409104410104411104412104413104414104415104416104417104418104419104420104421104422104423104424104425104426104427104428104429104430104431104432104433104434104435104436104437104438104439104440104441104442104443104444104445104446104447104448104449104450104451104452104453104454104455104456104457104458104459104460104461104462104463104464104465104466104467104468104469104470104471104472104473104474104475104476104477104478104479104480104481104482104483104484104485104486104487104488104489104490104491104492104493104494104495104496104497104498104499104500104501104502104503104504104505104506104507104508104509104510104511104512104513104514104515104516104517104518104519104520104521104522104523104524104525104526104527104528104529104530104531104532104533104534104535104536104537104538104539104540104541104542104543104544104545104546104547104548104549104550104551104552104553104554104555104556104557104558104559104560104561104562104563104564104565104566104567104568104569104570104571104572104573104574104575104576104577104578104579104580104581104582104583104584104585104586104587104588104589104590104591104592104593104594104595104596104597104598104599104600104601104602104603104604104605104606104607104608104609104610104611104612104613104614104615104616104617104618104619104620104621104622104623104624104625104626104627104628104629104630104631104632104633104634104635104636104637104638104639104640104641104642104643104644104645104646104647104648104649104650104651104652104653104654104655104656104657104658104659104660104661104662104663104664104665104666104667104668104669104670104671104672104673104674104675104676104677104678104679104680104681104682104683104684104685104686104687104688104689104690104691104692104693104694104695104696104697104698104699104700104701104702104703104704104705104706104707104708104709104710104711104712104713104714104715104716104717104718104719104720104721104722104723104724104725104726104727104728104729104730104731104732104733104734104735104736104737104738104739104740104741104742104743104744104745104746104747104748104749104750104751104752104753104754104755104756104757104758104759104760104761104762104763104764104765104766104767104768104769104770104771104772104773104774104775104776104777104778104779104780104781104782104783104784104785104786104787104788104789104790104791104792104793104794104795104796104797104798104799104800104801104802104803104804104805104806104807104808104809104810104811104812104813104814104815104816104817104818104819104820104821104822104823104824104825104826104827104828104829104830104831104832104833104834104835104836104837104838104839104840104841104842104843104844104845104846104847104848104849104850104851104852104853104854104855104856104857104858104859104860104861104862104863104864104865104866104867104868104869104870104871104872104873104874104875104876104877104878104879104880104881104882104883104884104885104886104887104888104889104890104891104892104893104894104895104896104897104898104899104900104901104902104903104904104905104906104907104908104909104910104911104912104913104914104915104916104917104918104919104920104921104922104923104924104925104926104927104928104929104930104931104932104933104934104935104936104937104938104939104940104941104942104943104944104945104946104947104948104949104950104951104952104953104954104955104956104957104958104959104960104961104962104963104964104965104966104967104968104969104970104971104972104973104974104975104976104977104978104979104980104981104982104983104984104985104986104987104988104989104990104991104992104993104994104995104996104997104998104999105000105001105002105003105004105005105006105007105008105009105010105011105012105013105014105015105016105017105018105019105020105021105022105023105024105025105026105027105028105029105030105031105032105033105034105035105036105037105038105039105040105041105042105043105044105045105046105047105048105049105050105051105052105053105054105055105056105057105058105059105060105061105062105063105064105065105066105067105068105069105070105071105072105073105074105075105076105077105078105079105080105081105082105083105084105085105086105087105088105089105090105091105092105093105094105095105096105097105098105099105100105101105102105103105104105105105106105107105108105109105110105111105112105113105114105115105116105117105118105119105120105121105122105123105124105125105126105127105128105129105130105131105132105133105134105135105136105137105138105139105140105141105142105143105144105145105146105147105148105149105150105151105152105153105154105155105156105157105158105159105160105161105162105163105164105165105166105167105168105169105170105171105172105173105174105175105176105177105178105179105180105181105182105183105184105185105186105187105188105189105190105191105192105193105194105195105196105197105198105199105200105201105202105203105204105205105206105207105208105209105210105211105212105213105214105215105216105217105218105219105220105221105222105223105224105225105226105227105228105229105230105231105232105233105234105235105236105237105238105239105240105241105242105243105244105245105246105247105248105249105250105251105252105253105254105255105256105257105258105259105260105261105262105263105264105265105266105267105268105269105270105271105272105273105274105275105276105277105278105279105280105281105282105283105284105285105286105287105288105289105290105291105292105293105294105295105296105297105298105299105300105301105302105303105304105305105306105307105308105309105310105311105312105313105314105315105316105317105318105319105320105321105322105323105324105325105326105327105328105329105330105331105332105333105334105335105336105337105338105339105340105341105342105343105344105345105346105347105348105349105350105351105352105353105354105355105356105357105358105359105360105361105362105363105364105365105366105367105368105369105370105371105372105373105374105375105376105377105378105379105380105381105382105383105384105385105386105387105388105389105390105391105392105393105394105395105396105397105398105399105400105401105402105403105404105405105406105407105408105409105410105411105412105413105414105415105416105417105418105419105420105421105422105423105424105425105426105427105428105429105430105431105432105433105434105435105436105437105438105439105440105441105442105443105444105445105446105447105448105449105450105451105452105453105454105455105456105457105458105459105460105461105462105463105464105465105466105467105468105469105470105471105472105473105474105475105476105477105478105479105480105481105482105483105484105485105486105487105488105489105490105491105492105493105494105495105496105497105498105499105500105501105502105503105504105505105506105507105508105509105510105511105512105513105514105515105516105517105518105519105520105521105522105523105524105525105526105527105528105529105530105531105532105533105534105535105536105537105538105539105540105541105542105543105544105545105546105547105548105549105550105551105552105553105554105555105556105557105558105559105560105561105562105563105564105565105566105567105568105569105570105571105572105573105574105575105576105577105578105579105580105581105582105583105584105585105586105587105588105589105590105591105592105593105594105595105596105597105598105599105600105601105602105603105604105605105606105607105608105609105610105611105612105613105614105615105616105617105618105619105620105621105622105623105624105625105626105627105628105629105630105631105632105633105634105635105636105637105638105639105640105641105642105643105644105645105646105647105648105649105650105651105652105653105654105655105656105657105658105659105660105661105662105663105664105665105666105667105668105669105670105671105672105673105674105675105676105677105678105679105680105681105682105683105684105685105686105687105688105689105690105691105692105693105694105695105696105697105698105699105700105701105702105703105704105705105706105707105708105709105710105711105712105713105714105715105716105717105718105719105720105721105722105723105724105725105726105727105728105729105730105731105732105733105734105735105736105737105738105739105740105741105742105743105744105745105746105747105748105749105750105751105752105753105754105755105756105757105758105759105760105761105762105763105764105765105766105767105768105769105770105771105772105773105774105775105776105777105778105779105780105781105782105783105784105785105786105787105788105789105790105791105792105793105794105795105796105797105798105799105800105801105802105803105804105805105806105807105808105809105810105811105812105813105814105815105816105817105818105819105820105821105822105823105824105825105826105827105828105829105830105831105832105833105834105835105836105837105838105839105840105841105842105843105844105845105846105847105848105849105850105851105852105853105854105855105856105857105858105859105860105861105862105863105864105865105866105867105868105869105870105871105872105873105874105875105876105877105878105879105880105881105882105883105884105885105886105887105888105889105890105891105892105893105894105895105896105897105898105899105900105901105902105903105904105905105906105907105908105909105910105911105912105913105914105915105916105917105918105919105920105921105922105923105924105925105926105927105928105929105930105931105932105933105934105935105936105937105938105939105940105941105942105943105944105945105946105947105948105949105950105951105952
  1. /******/ (() => { // webpackBootstrap
  2. /******/ var __webpack_modules__ = ({
  3. /***/ 39809:
  4. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  5. "use strict";
  6. const asn1 = exports;
  7. asn1.bignum = __webpack_require__(4590);
  8. asn1.define = (__webpack_require__(22500).define);
  9. asn1.base = __webpack_require__(71979);
  10. asn1.constants = __webpack_require__(36826);
  11. asn1.decoders = __webpack_require__(78307);
  12. asn1.encoders = __webpack_require__(56579);
  13. /***/ }),
  14. /***/ 22500:
  15. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  16. "use strict";
  17. const encoders = __webpack_require__(56579);
  18. const decoders = __webpack_require__(78307);
  19. const inherits = __webpack_require__(35717);
  20. const api = exports;
  21. api.define = function define(name, body) {
  22. return new Entity(name, body);
  23. };
  24. function Entity(name, body) {
  25. this.name = name;
  26. this.body = body;
  27. this.decoders = {};
  28. this.encoders = {};
  29. }
  30. Entity.prototype._createNamed = function createNamed(Base) {
  31. const name = this.name;
  32. function Generated(entity) {
  33. this._initNamed(entity, name);
  34. }
  35. inherits(Generated, Base);
  36. Generated.prototype._initNamed = function _initNamed(entity, name) {
  37. Base.call(this, entity, name);
  38. };
  39. return new Generated(this);
  40. };
  41. Entity.prototype._getDecoder = function _getDecoder(enc) {
  42. enc = enc || 'der';
  43. // Lazily create decoder
  44. if (!this.decoders.hasOwnProperty(enc))
  45. this.decoders[enc] = this._createNamed(decoders[enc]);
  46. return this.decoders[enc];
  47. };
  48. Entity.prototype.decode = function decode(data, enc, options) {
  49. return this._getDecoder(enc).decode(data, options);
  50. };
  51. Entity.prototype._getEncoder = function _getEncoder(enc) {
  52. enc = enc || 'der';
  53. // Lazily create encoder
  54. if (!this.encoders.hasOwnProperty(enc))
  55. this.encoders[enc] = this._createNamed(encoders[enc]);
  56. return this.encoders[enc];
  57. };
  58. Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
  59. return this._getEncoder(enc).encode(data, reporter);
  60. };
  61. /***/ }),
  62. /***/ 36625:
  63. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  64. "use strict";
  65. const inherits = __webpack_require__(35717);
  66. const Reporter = (__webpack_require__(98465)/* .Reporter */ .b);
  67. const Buffer = (__webpack_require__(2399).Buffer);
  68. function DecoderBuffer(base, options) {
  69. Reporter.call(this, options);
  70. if (!Buffer.isBuffer(base)) {
  71. this.error('Input not Buffer');
  72. return;
  73. }
  74. this.base = base;
  75. this.offset = 0;
  76. this.length = base.length;
  77. }
  78. inherits(DecoderBuffer, Reporter);
  79. exports.C = DecoderBuffer;
  80. DecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {
  81. if (data instanceof DecoderBuffer) {
  82. return true;
  83. }
  84. // Or accept compatible API
  85. const isCompatible = typeof data === 'object' &&
  86. Buffer.isBuffer(data.base) &&
  87. data.constructor.name === 'DecoderBuffer' &&
  88. typeof data.offset === 'number' &&
  89. typeof data.length === 'number' &&
  90. typeof data.save === 'function' &&
  91. typeof data.restore === 'function' &&
  92. typeof data.isEmpty === 'function' &&
  93. typeof data.readUInt8 === 'function' &&
  94. typeof data.skip === 'function' &&
  95. typeof data.raw === 'function';
  96. return isCompatible;
  97. };
  98. DecoderBuffer.prototype.save = function save() {
  99. return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
  100. };
  101. DecoderBuffer.prototype.restore = function restore(save) {
  102. // Return skipped data
  103. const res = new DecoderBuffer(this.base);
  104. res.offset = save.offset;
  105. res.length = this.offset;
  106. this.offset = save.offset;
  107. Reporter.prototype.restore.call(this, save.reporter);
  108. return res;
  109. };
  110. DecoderBuffer.prototype.isEmpty = function isEmpty() {
  111. return this.offset === this.length;
  112. };
  113. DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
  114. if (this.offset + 1 <= this.length)
  115. return this.base.readUInt8(this.offset++, true);
  116. else
  117. return this.error(fail || 'DecoderBuffer overrun');
  118. };
  119. DecoderBuffer.prototype.skip = function skip(bytes, fail) {
  120. if (!(this.offset + bytes <= this.length))
  121. return this.error(fail || 'DecoderBuffer overrun');
  122. const res = new DecoderBuffer(this.base);
  123. // Share reporter state
  124. res._reporterState = this._reporterState;
  125. res.offset = this.offset;
  126. res.length = this.offset + bytes;
  127. this.offset += bytes;
  128. return res;
  129. };
  130. DecoderBuffer.prototype.raw = function raw(save) {
  131. return this.base.slice(save ? save.offset : this.offset, this.length);
  132. };
  133. function EncoderBuffer(value, reporter) {
  134. if (Array.isArray(value)) {
  135. this.length = 0;
  136. this.value = value.map(function(item) {
  137. if (!EncoderBuffer.isEncoderBuffer(item))
  138. item = new EncoderBuffer(item, reporter);
  139. this.length += item.length;
  140. return item;
  141. }, this);
  142. } else if (typeof value === 'number') {
  143. if (!(0 <= value && value <= 0xff))
  144. return reporter.error('non-byte EncoderBuffer value');
  145. this.value = value;
  146. this.length = 1;
  147. } else if (typeof value === 'string') {
  148. this.value = value;
  149. this.length = Buffer.byteLength(value);
  150. } else if (Buffer.isBuffer(value)) {
  151. this.value = value;
  152. this.length = value.length;
  153. } else {
  154. return reporter.error('Unsupported type: ' + typeof value);
  155. }
  156. }
  157. exports.R = EncoderBuffer;
  158. EncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {
  159. if (data instanceof EncoderBuffer) {
  160. return true;
  161. }
  162. // Or accept compatible API
  163. const isCompatible = typeof data === 'object' &&
  164. data.constructor.name === 'EncoderBuffer' &&
  165. typeof data.length === 'number' &&
  166. typeof data.join === 'function';
  167. return isCompatible;
  168. };
  169. EncoderBuffer.prototype.join = function join(out, offset) {
  170. if (!out)
  171. out = Buffer.alloc(this.length);
  172. if (!offset)
  173. offset = 0;
  174. if (this.length === 0)
  175. return out;
  176. if (Array.isArray(this.value)) {
  177. this.value.forEach(function(item) {
  178. item.join(out, offset);
  179. offset += item.length;
  180. });
  181. } else {
  182. if (typeof this.value === 'number')
  183. out[offset] = this.value;
  184. else if (typeof this.value === 'string')
  185. out.write(this.value, offset);
  186. else if (Buffer.isBuffer(this.value))
  187. this.value.copy(out, offset);
  188. offset += this.length;
  189. }
  190. return out;
  191. };
  192. /***/ }),
  193. /***/ 71979:
  194. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  195. "use strict";
  196. const base = exports;
  197. base.Reporter = (__webpack_require__(98465)/* .Reporter */ .b);
  198. base.DecoderBuffer = (__webpack_require__(36625)/* .DecoderBuffer */ .C);
  199. base.EncoderBuffer = (__webpack_require__(36625)/* .EncoderBuffer */ .R);
  200. base.Node = __webpack_require__(41949);
  201. /***/ }),
  202. /***/ 41949:
  203. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  204. "use strict";
  205. const Reporter = (__webpack_require__(98465)/* .Reporter */ .b);
  206. const EncoderBuffer = (__webpack_require__(36625)/* .EncoderBuffer */ .R);
  207. const DecoderBuffer = (__webpack_require__(36625)/* .DecoderBuffer */ .C);
  208. const assert = __webpack_require__(79746);
  209. // Supported tags
  210. const tags = [
  211. 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
  212. 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
  213. 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
  214. 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
  215. ];
  216. // Public methods list
  217. const methods = [
  218. 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
  219. 'any', 'contains'
  220. ].concat(tags);
  221. // Overrided methods list
  222. const overrided = [
  223. '_peekTag', '_decodeTag', '_use',
  224. '_decodeStr', '_decodeObjid', '_decodeTime',
  225. '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
  226. '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
  227. '_encodeNull', '_encodeInt', '_encodeBool'
  228. ];
  229. function Node(enc, parent, name) {
  230. const state = {};
  231. this._baseState = state;
  232. state.name = name;
  233. state.enc = enc;
  234. state.parent = parent || null;
  235. state.children = null;
  236. // State
  237. state.tag = null;
  238. state.args = null;
  239. state.reverseArgs = null;
  240. state.choice = null;
  241. state.optional = false;
  242. state.any = false;
  243. state.obj = false;
  244. state.use = null;
  245. state.useDecoder = null;
  246. state.key = null;
  247. state['default'] = null;
  248. state.explicit = null;
  249. state.implicit = null;
  250. state.contains = null;
  251. // Should create new instance on each method
  252. if (!state.parent) {
  253. state.children = [];
  254. this._wrap();
  255. }
  256. }
  257. module.exports = Node;
  258. const stateProps = [
  259. 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
  260. 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
  261. 'implicit', 'contains'
  262. ];
  263. Node.prototype.clone = function clone() {
  264. const state = this._baseState;
  265. const cstate = {};
  266. stateProps.forEach(function(prop) {
  267. cstate[prop] = state[prop];
  268. });
  269. const res = new this.constructor(cstate.parent);
  270. res._baseState = cstate;
  271. return res;
  272. };
  273. Node.prototype._wrap = function wrap() {
  274. const state = this._baseState;
  275. methods.forEach(function(method) {
  276. this[method] = function _wrappedMethod() {
  277. const clone = new this.constructor(this);
  278. state.children.push(clone);
  279. return clone[method].apply(clone, arguments);
  280. };
  281. }, this);
  282. };
  283. Node.prototype._init = function init(body) {
  284. const state = this._baseState;
  285. assert(state.parent === null);
  286. body.call(this);
  287. // Filter children
  288. state.children = state.children.filter(function(child) {
  289. return child._baseState.parent === this;
  290. }, this);
  291. assert.equal(state.children.length, 1, 'Root node can have only one child');
  292. };
  293. Node.prototype._useArgs = function useArgs(args) {
  294. const state = this._baseState;
  295. // Filter children and args
  296. const children = args.filter(function(arg) {
  297. return arg instanceof this.constructor;
  298. }, this);
  299. args = args.filter(function(arg) {
  300. return !(arg instanceof this.constructor);
  301. }, this);
  302. if (children.length !== 0) {
  303. assert(state.children === null);
  304. state.children = children;
  305. // Replace parent to maintain backward link
  306. children.forEach(function(child) {
  307. child._baseState.parent = this;
  308. }, this);
  309. }
  310. if (args.length !== 0) {
  311. assert(state.args === null);
  312. state.args = args;
  313. state.reverseArgs = args.map(function(arg) {
  314. if (typeof arg !== 'object' || arg.constructor !== Object)
  315. return arg;
  316. const res = {};
  317. Object.keys(arg).forEach(function(key) {
  318. if (key == (key | 0))
  319. key |= 0;
  320. const value = arg[key];
  321. res[value] = key;
  322. });
  323. return res;
  324. });
  325. }
  326. };
  327. //
  328. // Overrided methods
  329. //
  330. overrided.forEach(function(method) {
  331. Node.prototype[method] = function _overrided() {
  332. const state = this._baseState;
  333. throw new Error(method + ' not implemented for encoding: ' + state.enc);
  334. };
  335. });
  336. //
  337. // Public methods
  338. //
  339. tags.forEach(function(tag) {
  340. Node.prototype[tag] = function _tagMethod() {
  341. const state = this._baseState;
  342. const args = Array.prototype.slice.call(arguments);
  343. assert(state.tag === null);
  344. state.tag = tag;
  345. this._useArgs(args);
  346. return this;
  347. };
  348. });
  349. Node.prototype.use = function use(item) {
  350. assert(item);
  351. const state = this._baseState;
  352. assert(state.use === null);
  353. state.use = item;
  354. return this;
  355. };
  356. Node.prototype.optional = function optional() {
  357. const state = this._baseState;
  358. state.optional = true;
  359. return this;
  360. };
  361. Node.prototype.def = function def(val) {
  362. const state = this._baseState;
  363. assert(state['default'] === null);
  364. state['default'] = val;
  365. state.optional = true;
  366. return this;
  367. };
  368. Node.prototype.explicit = function explicit(num) {
  369. const state = this._baseState;
  370. assert(state.explicit === null && state.implicit === null);
  371. state.explicit = num;
  372. return this;
  373. };
  374. Node.prototype.implicit = function implicit(num) {
  375. const state = this._baseState;
  376. assert(state.explicit === null && state.implicit === null);
  377. state.implicit = num;
  378. return this;
  379. };
  380. Node.prototype.obj = function obj() {
  381. const state = this._baseState;
  382. const args = Array.prototype.slice.call(arguments);
  383. state.obj = true;
  384. if (args.length !== 0)
  385. this._useArgs(args);
  386. return this;
  387. };
  388. Node.prototype.key = function key(newKey) {
  389. const state = this._baseState;
  390. assert(state.key === null);
  391. state.key = newKey;
  392. return this;
  393. };
  394. Node.prototype.any = function any() {
  395. const state = this._baseState;
  396. state.any = true;
  397. return this;
  398. };
  399. Node.prototype.choice = function choice(obj) {
  400. const state = this._baseState;
  401. assert(state.choice === null);
  402. state.choice = obj;
  403. this._useArgs(Object.keys(obj).map(function(key) {
  404. return obj[key];
  405. }));
  406. return this;
  407. };
  408. Node.prototype.contains = function contains(item) {
  409. const state = this._baseState;
  410. assert(state.use === null);
  411. state.contains = item;
  412. return this;
  413. };
  414. //
  415. // Decoding
  416. //
  417. Node.prototype._decode = function decode(input, options) {
  418. const state = this._baseState;
  419. // Decode root node
  420. if (state.parent === null)
  421. return input.wrapResult(state.children[0]._decode(input, options));
  422. let result = state['default'];
  423. let present = true;
  424. let prevKey = null;
  425. if (state.key !== null)
  426. prevKey = input.enterKey(state.key);
  427. // Check if tag is there
  428. if (state.optional) {
  429. let tag = null;
  430. if (state.explicit !== null)
  431. tag = state.explicit;
  432. else if (state.implicit !== null)
  433. tag = state.implicit;
  434. else if (state.tag !== null)
  435. tag = state.tag;
  436. if (tag === null && !state.any) {
  437. // Trial and Error
  438. const save = input.save();
  439. try {
  440. if (state.choice === null)
  441. this._decodeGeneric(state.tag, input, options);
  442. else
  443. this._decodeChoice(input, options);
  444. present = true;
  445. } catch (e) {
  446. present = false;
  447. }
  448. input.restore(save);
  449. } else {
  450. present = this._peekTag(input, tag, state.any);
  451. if (input.isError(present))
  452. return present;
  453. }
  454. }
  455. // Push object on stack
  456. let prevObj;
  457. if (state.obj && present)
  458. prevObj = input.enterObject();
  459. if (present) {
  460. // Unwrap explicit values
  461. if (state.explicit !== null) {
  462. const explicit = this._decodeTag(input, state.explicit);
  463. if (input.isError(explicit))
  464. return explicit;
  465. input = explicit;
  466. }
  467. const start = input.offset;
  468. // Unwrap implicit and normal values
  469. if (state.use === null && state.choice === null) {
  470. let save;
  471. if (state.any)
  472. save = input.save();
  473. const body = this._decodeTag(
  474. input,
  475. state.implicit !== null ? state.implicit : state.tag,
  476. state.any
  477. );
  478. if (input.isError(body))
  479. return body;
  480. if (state.any)
  481. result = input.raw(save);
  482. else
  483. input = body;
  484. }
  485. if (options && options.track && state.tag !== null)
  486. options.track(input.path(), start, input.length, 'tagged');
  487. if (options && options.track && state.tag !== null)
  488. options.track(input.path(), input.offset, input.length, 'content');
  489. // Select proper method for tag
  490. if (state.any) {
  491. // no-op
  492. } else if (state.choice === null) {
  493. result = this._decodeGeneric(state.tag, input, options);
  494. } else {
  495. result = this._decodeChoice(input, options);
  496. }
  497. if (input.isError(result))
  498. return result;
  499. // Decode children
  500. if (!state.any && state.choice === null && state.children !== null) {
  501. state.children.forEach(function decodeChildren(child) {
  502. // NOTE: We are ignoring errors here, to let parser continue with other
  503. // parts of encoded data
  504. child._decode(input, options);
  505. });
  506. }
  507. // Decode contained/encoded by schema, only in bit or octet strings
  508. if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
  509. const data = new DecoderBuffer(result);
  510. result = this._getUse(state.contains, input._reporterState.obj)
  511. ._decode(data, options);
  512. }
  513. }
  514. // Pop object
  515. if (state.obj && present)
  516. result = input.leaveObject(prevObj);
  517. // Set key
  518. if (state.key !== null && (result !== null || present === true))
  519. input.leaveKey(prevKey, state.key, result);
  520. else if (prevKey !== null)
  521. input.exitKey(prevKey);
  522. return result;
  523. };
  524. Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
  525. const state = this._baseState;
  526. if (tag === 'seq' || tag === 'set')
  527. return null;
  528. if (tag === 'seqof' || tag === 'setof')
  529. return this._decodeList(input, tag, state.args[0], options);
  530. else if (/str$/.test(tag))
  531. return this._decodeStr(input, tag, options);
  532. else if (tag === 'objid' && state.args)
  533. return this._decodeObjid(input, state.args[0], state.args[1], options);
  534. else if (tag === 'objid')
  535. return this._decodeObjid(input, null, null, options);
  536. else if (tag === 'gentime' || tag === 'utctime')
  537. return this._decodeTime(input, tag, options);
  538. else if (tag === 'null_')
  539. return this._decodeNull(input, options);
  540. else if (tag === 'bool')
  541. return this._decodeBool(input, options);
  542. else if (tag === 'objDesc')
  543. return this._decodeStr(input, tag, options);
  544. else if (tag === 'int' || tag === 'enum')
  545. return this._decodeInt(input, state.args && state.args[0], options);
  546. if (state.use !== null) {
  547. return this._getUse(state.use, input._reporterState.obj)
  548. ._decode(input, options);
  549. } else {
  550. return input.error('unknown tag: ' + tag);
  551. }
  552. };
  553. Node.prototype._getUse = function _getUse(entity, obj) {
  554. const state = this._baseState;
  555. // Create altered use decoder if implicit is set
  556. state.useDecoder = this._use(entity, obj);
  557. assert(state.useDecoder._baseState.parent === null);
  558. state.useDecoder = state.useDecoder._baseState.children[0];
  559. if (state.implicit !== state.useDecoder._baseState.implicit) {
  560. state.useDecoder = state.useDecoder.clone();
  561. state.useDecoder._baseState.implicit = state.implicit;
  562. }
  563. return state.useDecoder;
  564. };
  565. Node.prototype._decodeChoice = function decodeChoice(input, options) {
  566. const state = this._baseState;
  567. let result = null;
  568. let match = false;
  569. Object.keys(state.choice).some(function(key) {
  570. const save = input.save();
  571. const node = state.choice[key];
  572. try {
  573. const value = node._decode(input, options);
  574. if (input.isError(value))
  575. return false;
  576. result = { type: key, value: value };
  577. match = true;
  578. } catch (e) {
  579. input.restore(save);
  580. return false;
  581. }
  582. return true;
  583. }, this);
  584. if (!match)
  585. return input.error('Choice not matched');
  586. return result;
  587. };
  588. //
  589. // Encoding
  590. //
  591. Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
  592. return new EncoderBuffer(data, this.reporter);
  593. };
  594. Node.prototype._encode = function encode(data, reporter, parent) {
  595. const state = this._baseState;
  596. if (state['default'] !== null && state['default'] === data)
  597. return;
  598. const result = this._encodeValue(data, reporter, parent);
  599. if (result === undefined)
  600. return;
  601. if (this._skipDefault(result, reporter, parent))
  602. return;
  603. return result;
  604. };
  605. Node.prototype._encodeValue = function encode(data, reporter, parent) {
  606. const state = this._baseState;
  607. // Decode root node
  608. if (state.parent === null)
  609. return state.children[0]._encode(data, reporter || new Reporter());
  610. let result = null;
  611. // Set reporter to share it with a child class
  612. this.reporter = reporter;
  613. // Check if data is there
  614. if (state.optional && data === undefined) {
  615. if (state['default'] !== null)
  616. data = state['default'];
  617. else
  618. return;
  619. }
  620. // Encode children first
  621. let content = null;
  622. let primitive = false;
  623. if (state.any) {
  624. // Anything that was given is translated to buffer
  625. result = this._createEncoderBuffer(data);
  626. } else if (state.choice) {
  627. result = this._encodeChoice(data, reporter);
  628. } else if (state.contains) {
  629. content = this._getUse(state.contains, parent)._encode(data, reporter);
  630. primitive = true;
  631. } else if (state.children) {
  632. content = state.children.map(function(child) {
  633. if (child._baseState.tag === 'null_')
  634. return child._encode(null, reporter, data);
  635. if (child._baseState.key === null)
  636. return reporter.error('Child should have a key');
  637. const prevKey = reporter.enterKey(child._baseState.key);
  638. if (typeof data !== 'object')
  639. return reporter.error('Child expected, but input is not object');
  640. const res = child._encode(data[child._baseState.key], reporter, data);
  641. reporter.leaveKey(prevKey);
  642. return res;
  643. }, this).filter(function(child) {
  644. return child;
  645. });
  646. content = this._createEncoderBuffer(content);
  647. } else {
  648. if (state.tag === 'seqof' || state.tag === 'setof') {
  649. // TODO(indutny): this should be thrown on DSL level
  650. if (!(state.args && state.args.length === 1))
  651. return reporter.error('Too many args for : ' + state.tag);
  652. if (!Array.isArray(data))
  653. return reporter.error('seqof/setof, but data is not Array');
  654. const child = this.clone();
  655. child._baseState.implicit = null;
  656. content = this._createEncoderBuffer(data.map(function(item) {
  657. const state = this._baseState;
  658. return this._getUse(state.args[0], data)._encode(item, reporter);
  659. }, child));
  660. } else if (state.use !== null) {
  661. result = this._getUse(state.use, parent)._encode(data, reporter);
  662. } else {
  663. content = this._encodePrimitive(state.tag, data);
  664. primitive = true;
  665. }
  666. }
  667. // Encode data itself
  668. if (!state.any && state.choice === null) {
  669. const tag = state.implicit !== null ? state.implicit : state.tag;
  670. const cls = state.implicit === null ? 'universal' : 'context';
  671. if (tag === null) {
  672. if (state.use === null)
  673. reporter.error('Tag could be omitted only for .use()');
  674. } else {
  675. if (state.use === null)
  676. result = this._encodeComposite(tag, primitive, cls, content);
  677. }
  678. }
  679. // Wrap in explicit
  680. if (state.explicit !== null)
  681. result = this._encodeComposite(state.explicit, false, 'context', result);
  682. return result;
  683. };
  684. Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
  685. const state = this._baseState;
  686. const node = state.choice[data.type];
  687. if (!node) {
  688. assert(
  689. false,
  690. data.type + ' not found in ' +
  691. JSON.stringify(Object.keys(state.choice)));
  692. }
  693. return node._encode(data.value, reporter);
  694. };
  695. Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
  696. const state = this._baseState;
  697. if (/str$/.test(tag))
  698. return this._encodeStr(data, tag);
  699. else if (tag === 'objid' && state.args)
  700. return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
  701. else if (tag === 'objid')
  702. return this._encodeObjid(data, null, null);
  703. else if (tag === 'gentime' || tag === 'utctime')
  704. return this._encodeTime(data, tag);
  705. else if (tag === 'null_')
  706. return this._encodeNull();
  707. else if (tag === 'int' || tag === 'enum')
  708. return this._encodeInt(data, state.args && state.reverseArgs[0]);
  709. else if (tag === 'bool')
  710. return this._encodeBool(data);
  711. else if (tag === 'objDesc')
  712. return this._encodeStr(data, tag);
  713. else
  714. throw new Error('Unsupported tag: ' + tag);
  715. };
  716. Node.prototype._isNumstr = function isNumstr(str) {
  717. return /^[0-9 ]*$/.test(str);
  718. };
  719. Node.prototype._isPrintstr = function isPrintstr(str) {
  720. return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);
  721. };
  722. /***/ }),
  723. /***/ 98465:
  724. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  725. "use strict";
  726. const inherits = __webpack_require__(35717);
  727. function Reporter(options) {
  728. this._reporterState = {
  729. obj: null,
  730. path: [],
  731. options: options || {},
  732. errors: []
  733. };
  734. }
  735. exports.b = Reporter;
  736. Reporter.prototype.isError = function isError(obj) {
  737. return obj instanceof ReporterError;
  738. };
  739. Reporter.prototype.save = function save() {
  740. const state = this._reporterState;
  741. return { obj: state.obj, pathLen: state.path.length };
  742. };
  743. Reporter.prototype.restore = function restore(data) {
  744. const state = this._reporterState;
  745. state.obj = data.obj;
  746. state.path = state.path.slice(0, data.pathLen);
  747. };
  748. Reporter.prototype.enterKey = function enterKey(key) {
  749. return this._reporterState.path.push(key);
  750. };
  751. Reporter.prototype.exitKey = function exitKey(index) {
  752. const state = this._reporterState;
  753. state.path = state.path.slice(0, index - 1);
  754. };
  755. Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
  756. const state = this._reporterState;
  757. this.exitKey(index);
  758. if (state.obj !== null)
  759. state.obj[key] = value;
  760. };
  761. Reporter.prototype.path = function path() {
  762. return this._reporterState.path.join('/');
  763. };
  764. Reporter.prototype.enterObject = function enterObject() {
  765. const state = this._reporterState;
  766. const prev = state.obj;
  767. state.obj = {};
  768. return prev;
  769. };
  770. Reporter.prototype.leaveObject = function leaveObject(prev) {
  771. const state = this._reporterState;
  772. const now = state.obj;
  773. state.obj = prev;
  774. return now;
  775. };
  776. Reporter.prototype.error = function error(msg) {
  777. let err;
  778. const state = this._reporterState;
  779. const inherited = msg instanceof ReporterError;
  780. if (inherited) {
  781. err = msg;
  782. } else {
  783. err = new ReporterError(state.path.map(function(elem) {
  784. return '[' + JSON.stringify(elem) + ']';
  785. }).join(''), msg.message || msg, msg.stack);
  786. }
  787. if (!state.options.partial)
  788. throw err;
  789. if (!inherited)
  790. state.errors.push(err);
  791. return err;
  792. };
  793. Reporter.prototype.wrapResult = function wrapResult(result) {
  794. const state = this._reporterState;
  795. if (!state.options.partial)
  796. return result;
  797. return {
  798. result: this.isError(result) ? null : result,
  799. errors: state.errors
  800. };
  801. };
  802. function ReporterError(path, msg) {
  803. this.path = path;
  804. this.rethrow(msg);
  805. }
  806. inherits(ReporterError, Error);
  807. ReporterError.prototype.rethrow = function rethrow(msg) {
  808. this.message = msg + ' at: ' + (this.path || '(shallow)');
  809. if (Error.captureStackTrace)
  810. Error.captureStackTrace(this, ReporterError);
  811. if (!this.stack) {
  812. try {
  813. // IE only adds stack when thrown
  814. throw new Error(this.message);
  815. } catch (e) {
  816. this.stack = e.stack;
  817. }
  818. }
  819. return this;
  820. };
  821. /***/ }),
  822. /***/ 70160:
  823. /***/ ((__unused_webpack_module, exports) => {
  824. "use strict";
  825. // Helper
  826. function reverse(map) {
  827. const res = {};
  828. Object.keys(map).forEach(function(key) {
  829. // Convert key to integer if it is stringified
  830. if ((key | 0) == key)
  831. key = key | 0;
  832. const value = map[key];
  833. res[value] = key;
  834. });
  835. return res;
  836. }
  837. exports.tagClass = {
  838. 0: 'universal',
  839. 1: 'application',
  840. 2: 'context',
  841. 3: 'private'
  842. };
  843. exports.tagClassByName = reverse(exports.tagClass);
  844. exports.tag = {
  845. 0x00: 'end',
  846. 0x01: 'bool',
  847. 0x02: 'int',
  848. 0x03: 'bitstr',
  849. 0x04: 'octstr',
  850. 0x05: 'null_',
  851. 0x06: 'objid',
  852. 0x07: 'objDesc',
  853. 0x08: 'external',
  854. 0x09: 'real',
  855. 0x0a: 'enum',
  856. 0x0b: 'embed',
  857. 0x0c: 'utf8str',
  858. 0x0d: 'relativeOid',
  859. 0x10: 'seq',
  860. 0x11: 'set',
  861. 0x12: 'numstr',
  862. 0x13: 'printstr',
  863. 0x14: 't61str',
  864. 0x15: 'videostr',
  865. 0x16: 'ia5str',
  866. 0x17: 'utctime',
  867. 0x18: 'gentime',
  868. 0x19: 'graphstr',
  869. 0x1a: 'iso646str',
  870. 0x1b: 'genstr',
  871. 0x1c: 'unistr',
  872. 0x1d: 'charstr',
  873. 0x1e: 'bmpstr'
  874. };
  875. exports.tagByName = reverse(exports.tag);
  876. /***/ }),
  877. /***/ 36826:
  878. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  879. "use strict";
  880. const constants = exports;
  881. // Helper
  882. constants._reverse = function reverse(map) {
  883. const res = {};
  884. Object.keys(map).forEach(function(key) {
  885. // Convert key to integer if it is stringified
  886. if ((key | 0) == key)
  887. key = key | 0;
  888. const value = map[key];
  889. res[value] = key;
  890. });
  891. return res;
  892. };
  893. constants.der = __webpack_require__(70160);
  894. /***/ }),
  895. /***/ 41671:
  896. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  897. "use strict";
  898. const inherits = __webpack_require__(35717);
  899. const bignum = __webpack_require__(4590);
  900. const DecoderBuffer = (__webpack_require__(36625)/* .DecoderBuffer */ .C);
  901. const Node = __webpack_require__(41949);
  902. // Import DER constants
  903. const der = __webpack_require__(70160);
  904. function DERDecoder(entity) {
  905. this.enc = 'der';
  906. this.name = entity.name;
  907. this.entity = entity;
  908. // Construct base tree
  909. this.tree = new DERNode();
  910. this.tree._init(entity.body);
  911. }
  912. module.exports = DERDecoder;
  913. DERDecoder.prototype.decode = function decode(data, options) {
  914. if (!DecoderBuffer.isDecoderBuffer(data)) {
  915. data = new DecoderBuffer(data, options);
  916. }
  917. return this.tree._decode(data, options);
  918. };
  919. // Tree methods
  920. function DERNode(parent) {
  921. Node.call(this, 'der', parent);
  922. }
  923. inherits(DERNode, Node);
  924. DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
  925. if (buffer.isEmpty())
  926. return false;
  927. const state = buffer.save();
  928. const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
  929. if (buffer.isError(decodedTag))
  930. return decodedTag;
  931. buffer.restore(state);
  932. return decodedTag.tag === tag || decodedTag.tagStr === tag ||
  933. (decodedTag.tagStr + 'of') === tag || any;
  934. };
  935. DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
  936. const decodedTag = derDecodeTag(buffer,
  937. 'Failed to decode tag of "' + tag + '"');
  938. if (buffer.isError(decodedTag))
  939. return decodedTag;
  940. let len = derDecodeLen(buffer,
  941. decodedTag.primitive,
  942. 'Failed to get length of "' + tag + '"');
  943. // Failure
  944. if (buffer.isError(len))
  945. return len;
  946. if (!any &&
  947. decodedTag.tag !== tag &&
  948. decodedTag.tagStr !== tag &&
  949. decodedTag.tagStr + 'of' !== tag) {
  950. return buffer.error('Failed to match tag: "' + tag + '"');
  951. }
  952. if (decodedTag.primitive || len !== null)
  953. return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
  954. // Indefinite length... find END tag
  955. const state = buffer.save();
  956. const res = this._skipUntilEnd(
  957. buffer,
  958. 'Failed to skip indefinite length body: "' + this.tag + '"');
  959. if (buffer.isError(res))
  960. return res;
  961. len = buffer.offset - state.offset;
  962. buffer.restore(state);
  963. return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
  964. };
  965. DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
  966. for (;;) {
  967. const tag = derDecodeTag(buffer, fail);
  968. if (buffer.isError(tag))
  969. return tag;
  970. const len = derDecodeLen(buffer, tag.primitive, fail);
  971. if (buffer.isError(len))
  972. return len;
  973. let res;
  974. if (tag.primitive || len !== null)
  975. res = buffer.skip(len);
  976. else
  977. res = this._skipUntilEnd(buffer, fail);
  978. // Failure
  979. if (buffer.isError(res))
  980. return res;
  981. if (tag.tagStr === 'end')
  982. break;
  983. }
  984. };
  985. DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
  986. options) {
  987. const result = [];
  988. while (!buffer.isEmpty()) {
  989. const possibleEnd = this._peekTag(buffer, 'end');
  990. if (buffer.isError(possibleEnd))
  991. return possibleEnd;
  992. const res = decoder.decode(buffer, 'der', options);
  993. if (buffer.isError(res) && possibleEnd)
  994. break;
  995. result.push(res);
  996. }
  997. return result;
  998. };
  999. DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
  1000. if (tag === 'bitstr') {
  1001. const unused = buffer.readUInt8();
  1002. if (buffer.isError(unused))
  1003. return unused;
  1004. return { unused: unused, data: buffer.raw() };
  1005. } else if (tag === 'bmpstr') {
  1006. const raw = buffer.raw();
  1007. if (raw.length % 2 === 1)
  1008. return buffer.error('Decoding of string type: bmpstr length mismatch');
  1009. let str = '';
  1010. for (let i = 0; i < raw.length / 2; i++) {
  1011. str += String.fromCharCode(raw.readUInt16BE(i * 2));
  1012. }
  1013. return str;
  1014. } else if (tag === 'numstr') {
  1015. const numstr = buffer.raw().toString('ascii');
  1016. if (!this._isNumstr(numstr)) {
  1017. return buffer.error('Decoding of string type: ' +
  1018. 'numstr unsupported characters');
  1019. }
  1020. return numstr;
  1021. } else if (tag === 'octstr') {
  1022. return buffer.raw();
  1023. } else if (tag === 'objDesc') {
  1024. return buffer.raw();
  1025. } else if (tag === 'printstr') {
  1026. const printstr = buffer.raw().toString('ascii');
  1027. if (!this._isPrintstr(printstr)) {
  1028. return buffer.error('Decoding of string type: ' +
  1029. 'printstr unsupported characters');
  1030. }
  1031. return printstr;
  1032. } else if (/str$/.test(tag)) {
  1033. return buffer.raw().toString();
  1034. } else {
  1035. return buffer.error('Decoding of string type: ' + tag + ' unsupported');
  1036. }
  1037. };
  1038. DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
  1039. let result;
  1040. const identifiers = [];
  1041. let ident = 0;
  1042. let subident = 0;
  1043. while (!buffer.isEmpty()) {
  1044. subident = buffer.readUInt8();
  1045. ident <<= 7;
  1046. ident |= subident & 0x7f;
  1047. if ((subident & 0x80) === 0) {
  1048. identifiers.push(ident);
  1049. ident = 0;
  1050. }
  1051. }
  1052. if (subident & 0x80)
  1053. identifiers.push(ident);
  1054. const first = (identifiers[0] / 40) | 0;
  1055. const second = identifiers[0] % 40;
  1056. if (relative)
  1057. result = identifiers;
  1058. else
  1059. result = [first, second].concat(identifiers.slice(1));
  1060. if (values) {
  1061. let tmp = values[result.join(' ')];
  1062. if (tmp === undefined)
  1063. tmp = values[result.join('.')];
  1064. if (tmp !== undefined)
  1065. result = tmp;
  1066. }
  1067. return result;
  1068. };
  1069. DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
  1070. const str = buffer.raw().toString();
  1071. let year;
  1072. let mon;
  1073. let day;
  1074. let hour;
  1075. let min;
  1076. let sec;
  1077. if (tag === 'gentime') {
  1078. year = str.slice(0, 4) | 0;
  1079. mon = str.slice(4, 6) | 0;
  1080. day = str.slice(6, 8) | 0;
  1081. hour = str.slice(8, 10) | 0;
  1082. min = str.slice(10, 12) | 0;
  1083. sec = str.slice(12, 14) | 0;
  1084. } else if (tag === 'utctime') {
  1085. year = str.slice(0, 2) | 0;
  1086. mon = str.slice(2, 4) | 0;
  1087. day = str.slice(4, 6) | 0;
  1088. hour = str.slice(6, 8) | 0;
  1089. min = str.slice(8, 10) | 0;
  1090. sec = str.slice(10, 12) | 0;
  1091. if (year < 70)
  1092. year = 2000 + year;
  1093. else
  1094. year = 1900 + year;
  1095. } else {
  1096. return buffer.error('Decoding ' + tag + ' time is not supported yet');
  1097. }
  1098. return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
  1099. };
  1100. DERNode.prototype._decodeNull = function decodeNull() {
  1101. return null;
  1102. };
  1103. DERNode.prototype._decodeBool = function decodeBool(buffer) {
  1104. const res = buffer.readUInt8();
  1105. if (buffer.isError(res))
  1106. return res;
  1107. else
  1108. return res !== 0;
  1109. };
  1110. DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
  1111. // Bigint, return as it is (assume big endian)
  1112. const raw = buffer.raw();
  1113. let res = new bignum(raw);
  1114. if (values)
  1115. res = values[res.toString(10)] || res;
  1116. return res;
  1117. };
  1118. DERNode.prototype._use = function use(entity, obj) {
  1119. if (typeof entity === 'function')
  1120. entity = entity(obj);
  1121. return entity._getDecoder('der').tree;
  1122. };
  1123. // Utility methods
  1124. function derDecodeTag(buf, fail) {
  1125. let tag = buf.readUInt8(fail);
  1126. if (buf.isError(tag))
  1127. return tag;
  1128. const cls = der.tagClass[tag >> 6];
  1129. const primitive = (tag & 0x20) === 0;
  1130. // Multi-octet tag - load
  1131. if ((tag & 0x1f) === 0x1f) {
  1132. let oct = tag;
  1133. tag = 0;
  1134. while ((oct & 0x80) === 0x80) {
  1135. oct = buf.readUInt8(fail);
  1136. if (buf.isError(oct))
  1137. return oct;
  1138. tag <<= 7;
  1139. tag |= oct & 0x7f;
  1140. }
  1141. } else {
  1142. tag &= 0x1f;
  1143. }
  1144. const tagStr = der.tag[tag];
  1145. return {
  1146. cls: cls,
  1147. primitive: primitive,
  1148. tag: tag,
  1149. tagStr: tagStr
  1150. };
  1151. }
  1152. function derDecodeLen(buf, primitive, fail) {
  1153. let len = buf.readUInt8(fail);
  1154. if (buf.isError(len))
  1155. return len;
  1156. // Indefinite form
  1157. if (!primitive && len === 0x80)
  1158. return null;
  1159. // Definite form
  1160. if ((len & 0x80) === 0) {
  1161. // Short form
  1162. return len;
  1163. }
  1164. // Long form
  1165. const num = len & 0x7f;
  1166. if (num > 4)
  1167. return buf.error('length octect is too long');
  1168. len = 0;
  1169. for (let i = 0; i < num; i++) {
  1170. len <<= 8;
  1171. const j = buf.readUInt8(fail);
  1172. if (buf.isError(j))
  1173. return j;
  1174. len |= j;
  1175. }
  1176. return len;
  1177. }
  1178. /***/ }),
  1179. /***/ 78307:
  1180. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  1181. "use strict";
  1182. const decoders = exports;
  1183. decoders.der = __webpack_require__(41671);
  1184. decoders.pem = __webpack_require__(59631);
  1185. /***/ }),
  1186. /***/ 59631:
  1187. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1188. "use strict";
  1189. const inherits = __webpack_require__(35717);
  1190. const Buffer = (__webpack_require__(2399).Buffer);
  1191. const DERDecoder = __webpack_require__(41671);
  1192. function PEMDecoder(entity) {
  1193. DERDecoder.call(this, entity);
  1194. this.enc = 'pem';
  1195. }
  1196. inherits(PEMDecoder, DERDecoder);
  1197. module.exports = PEMDecoder;
  1198. PEMDecoder.prototype.decode = function decode(data, options) {
  1199. const lines = data.toString().split(/[\r\n]+/g);
  1200. const label = options.label.toUpperCase();
  1201. const re = /^-----(BEGIN|END) ([^-]+)-----$/;
  1202. let start = -1;
  1203. let end = -1;
  1204. for (let i = 0; i < lines.length; i++) {
  1205. const match = lines[i].match(re);
  1206. if (match === null)
  1207. continue;
  1208. if (match[2] !== label)
  1209. continue;
  1210. if (start === -1) {
  1211. if (match[1] !== 'BEGIN')
  1212. break;
  1213. start = i;
  1214. } else {
  1215. if (match[1] !== 'END')
  1216. break;
  1217. end = i;
  1218. break;
  1219. }
  1220. }
  1221. if (start === -1 || end === -1)
  1222. throw new Error('PEM section not found for: ' + label);
  1223. const base64 = lines.slice(start + 1, end).join('');
  1224. // Remove excessive symbols
  1225. base64.replace(/[^a-z0-9+/=]+/gi, '');
  1226. const input = Buffer.from(base64, 'base64');
  1227. return DERDecoder.prototype.decode.call(this, input, options);
  1228. };
  1229. /***/ }),
  1230. /***/ 66984:
  1231. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1232. "use strict";
  1233. const inherits = __webpack_require__(35717);
  1234. const Buffer = (__webpack_require__(2399).Buffer);
  1235. const Node = __webpack_require__(41949);
  1236. // Import DER constants
  1237. const der = __webpack_require__(70160);
  1238. function DEREncoder(entity) {
  1239. this.enc = 'der';
  1240. this.name = entity.name;
  1241. this.entity = entity;
  1242. // Construct base tree
  1243. this.tree = new DERNode();
  1244. this.tree._init(entity.body);
  1245. }
  1246. module.exports = DEREncoder;
  1247. DEREncoder.prototype.encode = function encode(data, reporter) {
  1248. return this.tree._encode(data, reporter).join();
  1249. };
  1250. // Tree methods
  1251. function DERNode(parent) {
  1252. Node.call(this, 'der', parent);
  1253. }
  1254. inherits(DERNode, Node);
  1255. DERNode.prototype._encodeComposite = function encodeComposite(tag,
  1256. primitive,
  1257. cls,
  1258. content) {
  1259. const encodedTag = encodeTag(tag, primitive, cls, this.reporter);
  1260. // Short form
  1261. if (content.length < 0x80) {
  1262. const header = Buffer.alloc(2);
  1263. header[0] = encodedTag;
  1264. header[1] = content.length;
  1265. return this._createEncoderBuffer([ header, content ]);
  1266. }
  1267. // Long form
  1268. // Count octets required to store length
  1269. let lenOctets = 1;
  1270. for (let i = content.length; i >= 0x100; i >>= 8)
  1271. lenOctets++;
  1272. const header = Buffer.alloc(1 + 1 + lenOctets);
  1273. header[0] = encodedTag;
  1274. header[1] = 0x80 | lenOctets;
  1275. for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
  1276. header[i] = j & 0xff;
  1277. return this._createEncoderBuffer([ header, content ]);
  1278. };
  1279. DERNode.prototype._encodeStr = function encodeStr(str, tag) {
  1280. if (tag === 'bitstr') {
  1281. return this._createEncoderBuffer([ str.unused | 0, str.data ]);
  1282. } else if (tag === 'bmpstr') {
  1283. const buf = Buffer.alloc(str.length * 2);
  1284. for (let i = 0; i < str.length; i++) {
  1285. buf.writeUInt16BE(str.charCodeAt(i), i * 2);
  1286. }
  1287. return this._createEncoderBuffer(buf);
  1288. } else if (tag === 'numstr') {
  1289. if (!this._isNumstr(str)) {
  1290. return this.reporter.error('Encoding of string type: numstr supports ' +
  1291. 'only digits and space');
  1292. }
  1293. return this._createEncoderBuffer(str);
  1294. } else if (tag === 'printstr') {
  1295. if (!this._isPrintstr(str)) {
  1296. return this.reporter.error('Encoding of string type: printstr supports ' +
  1297. 'only latin upper and lower case letters, ' +
  1298. 'digits, space, apostrophe, left and rigth ' +
  1299. 'parenthesis, plus sign, comma, hyphen, ' +
  1300. 'dot, slash, colon, equal sign, ' +
  1301. 'question mark');
  1302. }
  1303. return this._createEncoderBuffer(str);
  1304. } else if (/str$/.test(tag)) {
  1305. return this._createEncoderBuffer(str);
  1306. } else if (tag === 'objDesc') {
  1307. return this._createEncoderBuffer(str);
  1308. } else {
  1309. return this.reporter.error('Encoding of string type: ' + tag +
  1310. ' unsupported');
  1311. }
  1312. };
  1313. DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
  1314. if (typeof id === 'string') {
  1315. if (!values)
  1316. return this.reporter.error('string objid given, but no values map found');
  1317. if (!values.hasOwnProperty(id))
  1318. return this.reporter.error('objid not found in values map');
  1319. id = values[id].split(/[\s.]+/g);
  1320. for (let i = 0; i < id.length; i++)
  1321. id[i] |= 0;
  1322. } else if (Array.isArray(id)) {
  1323. id = id.slice();
  1324. for (let i = 0; i < id.length; i++)
  1325. id[i] |= 0;
  1326. }
  1327. if (!Array.isArray(id)) {
  1328. return this.reporter.error('objid() should be either array or string, ' +
  1329. 'got: ' + JSON.stringify(id));
  1330. }
  1331. if (!relative) {
  1332. if (id[1] >= 40)
  1333. return this.reporter.error('Second objid identifier OOB');
  1334. id.splice(0, 2, id[0] * 40 + id[1]);
  1335. }
  1336. // Count number of octets
  1337. let size = 0;
  1338. for (let i = 0; i < id.length; i++) {
  1339. let ident = id[i];
  1340. for (size++; ident >= 0x80; ident >>= 7)
  1341. size++;
  1342. }
  1343. const objid = Buffer.alloc(size);
  1344. let offset = objid.length - 1;
  1345. for (let i = id.length - 1; i >= 0; i--) {
  1346. let ident = id[i];
  1347. objid[offset--] = ident & 0x7f;
  1348. while ((ident >>= 7) > 0)
  1349. objid[offset--] = 0x80 | (ident & 0x7f);
  1350. }
  1351. return this._createEncoderBuffer(objid);
  1352. };
  1353. function two(num) {
  1354. if (num < 10)
  1355. return '0' + num;
  1356. else
  1357. return num;
  1358. }
  1359. DERNode.prototype._encodeTime = function encodeTime(time, tag) {
  1360. let str;
  1361. const date = new Date(time);
  1362. if (tag === 'gentime') {
  1363. str = [
  1364. two(date.getUTCFullYear()),
  1365. two(date.getUTCMonth() + 1),
  1366. two(date.getUTCDate()),
  1367. two(date.getUTCHours()),
  1368. two(date.getUTCMinutes()),
  1369. two(date.getUTCSeconds()),
  1370. 'Z'
  1371. ].join('');
  1372. } else if (tag === 'utctime') {
  1373. str = [
  1374. two(date.getUTCFullYear() % 100),
  1375. two(date.getUTCMonth() + 1),
  1376. two(date.getUTCDate()),
  1377. two(date.getUTCHours()),
  1378. two(date.getUTCMinutes()),
  1379. two(date.getUTCSeconds()),
  1380. 'Z'
  1381. ].join('');
  1382. } else {
  1383. this.reporter.error('Encoding ' + tag + ' time is not supported yet');
  1384. }
  1385. return this._encodeStr(str, 'octstr');
  1386. };
  1387. DERNode.prototype._encodeNull = function encodeNull() {
  1388. return this._createEncoderBuffer('');
  1389. };
  1390. DERNode.prototype._encodeInt = function encodeInt(num, values) {
  1391. if (typeof num === 'string') {
  1392. if (!values)
  1393. return this.reporter.error('String int or enum given, but no values map');
  1394. if (!values.hasOwnProperty(num)) {
  1395. return this.reporter.error('Values map doesn\'t contain: ' +
  1396. JSON.stringify(num));
  1397. }
  1398. num = values[num];
  1399. }
  1400. // Bignum, assume big endian
  1401. if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
  1402. const numArray = num.toArray();
  1403. if (!num.sign && numArray[0] & 0x80) {
  1404. numArray.unshift(0);
  1405. }
  1406. num = Buffer.from(numArray);
  1407. }
  1408. if (Buffer.isBuffer(num)) {
  1409. let size = num.length;
  1410. if (num.length === 0)
  1411. size++;
  1412. const out = Buffer.alloc(size);
  1413. num.copy(out);
  1414. if (num.length === 0)
  1415. out[0] = 0;
  1416. return this._createEncoderBuffer(out);
  1417. }
  1418. if (num < 0x80)
  1419. return this._createEncoderBuffer(num);
  1420. if (num < 0x100)
  1421. return this._createEncoderBuffer([0, num]);
  1422. let size = 1;
  1423. for (let i = num; i >= 0x100; i >>= 8)
  1424. size++;
  1425. const out = new Array(size);
  1426. for (let i = out.length - 1; i >= 0; i--) {
  1427. out[i] = num & 0xff;
  1428. num >>= 8;
  1429. }
  1430. if(out[0] & 0x80) {
  1431. out.unshift(0);
  1432. }
  1433. return this._createEncoderBuffer(Buffer.from(out));
  1434. };
  1435. DERNode.prototype._encodeBool = function encodeBool(value) {
  1436. return this._createEncoderBuffer(value ? 0xff : 0);
  1437. };
  1438. DERNode.prototype._use = function use(entity, obj) {
  1439. if (typeof entity === 'function')
  1440. entity = entity(obj);
  1441. return entity._getEncoder('der').tree;
  1442. };
  1443. DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
  1444. const state = this._baseState;
  1445. let i;
  1446. if (state['default'] === null)
  1447. return false;
  1448. const data = dataBuffer.join();
  1449. if (state.defaultBuffer === undefined)
  1450. state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
  1451. if (data.length !== state.defaultBuffer.length)
  1452. return false;
  1453. for (i=0; i < data.length; i++)
  1454. if (data[i] !== state.defaultBuffer[i])
  1455. return false;
  1456. return true;
  1457. };
  1458. // Utility methods
  1459. function encodeTag(tag, primitive, cls, reporter) {
  1460. let res;
  1461. if (tag === 'seqof')
  1462. tag = 'seq';
  1463. else if (tag === 'setof')
  1464. tag = 'set';
  1465. if (der.tagByName.hasOwnProperty(tag))
  1466. res = der.tagByName[tag];
  1467. else if (typeof tag === 'number' && (tag | 0) === tag)
  1468. res = tag;
  1469. else
  1470. return reporter.error('Unknown tag: ' + tag);
  1471. if (res >= 0x1f)
  1472. return reporter.error('Multi-octet tag encoding unsupported');
  1473. if (!primitive)
  1474. res |= 0x20;
  1475. res |= (der.tagClassByName[cls || 'universal'] << 6);
  1476. return res;
  1477. }
  1478. /***/ }),
  1479. /***/ 56579:
  1480. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  1481. "use strict";
  1482. const encoders = exports;
  1483. encoders.der = __webpack_require__(66984);
  1484. encoders.pem = __webpack_require__(2883);
  1485. /***/ }),
  1486. /***/ 2883:
  1487. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1488. "use strict";
  1489. const inherits = __webpack_require__(35717);
  1490. const DEREncoder = __webpack_require__(66984);
  1491. function PEMEncoder(entity) {
  1492. DEREncoder.call(this, entity);
  1493. this.enc = 'pem';
  1494. }
  1495. inherits(PEMEncoder, DEREncoder);
  1496. module.exports = PEMEncoder;
  1497. PEMEncoder.prototype.encode = function encode(data, options) {
  1498. const buf = DEREncoder.prototype.encode.call(this, data);
  1499. const p = buf.toString('base64');
  1500. const out = [ '-----BEGIN ' + options.label + '-----' ];
  1501. for (let i = 0; i < p.length; i += 64)
  1502. out.push(p.slice(i, i + 64));
  1503. out.push('-----END ' + options.label + '-----');
  1504. return out.join('\n');
  1505. };
  1506. /***/ }),
  1507. /***/ 4590:
  1508. /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
  1509. /* module decorator */ module = __webpack_require__.nmd(module);
  1510. (function (module, exports) {
  1511. 'use strict';
  1512. // Utils
  1513. function assert (val, msg) {
  1514. if (!val) throw new Error(msg || 'Assertion failed');
  1515. }
  1516. // Could use `inherits` module, but don't want to move from single file
  1517. // architecture yet.
  1518. function inherits (ctor, superCtor) {
  1519. ctor.super_ = superCtor;
  1520. var TempCtor = function () {};
  1521. TempCtor.prototype = superCtor.prototype;
  1522. ctor.prototype = new TempCtor();
  1523. ctor.prototype.constructor = ctor;
  1524. }
  1525. // BN
  1526. function BN (number, base, endian) {
  1527. if (BN.isBN(number)) {
  1528. return number;
  1529. }
  1530. this.negative = 0;
  1531. this.words = null;
  1532. this.length = 0;
  1533. // Reduction context
  1534. this.red = null;
  1535. if (number !== null) {
  1536. if (base === 'le' || base === 'be') {
  1537. endian = base;
  1538. base = 10;
  1539. }
  1540. this._init(number || 0, base || 10, endian || 'be');
  1541. }
  1542. }
  1543. if (typeof module === 'object') {
  1544. module.exports = BN;
  1545. } else {
  1546. exports.BN = BN;
  1547. }
  1548. BN.BN = BN;
  1549. BN.wordSize = 26;
  1550. var Buffer;
  1551. try {
  1552. if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {
  1553. Buffer = window.Buffer;
  1554. } else {
  1555. Buffer = (__webpack_require__(80950).Buffer);
  1556. }
  1557. } catch (e) {
  1558. }
  1559. BN.isBN = function isBN (num) {
  1560. if (num instanceof BN) {
  1561. return true;
  1562. }
  1563. return num !== null && typeof num === 'object' &&
  1564. num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
  1565. };
  1566. BN.max = function max (left, right) {
  1567. if (left.cmp(right) > 0) return left;
  1568. return right;
  1569. };
  1570. BN.min = function min (left, right) {
  1571. if (left.cmp(right) < 0) return left;
  1572. return right;
  1573. };
  1574. BN.prototype._init = function init (number, base, endian) {
  1575. if (typeof number === 'number') {
  1576. return this._initNumber(number, base, endian);
  1577. }
  1578. if (typeof number === 'object') {
  1579. return this._initArray(number, base, endian);
  1580. }
  1581. if (base === 'hex') {
  1582. base = 16;
  1583. }
  1584. assert(base === (base | 0) && base >= 2 && base <= 36);
  1585. number = number.toString().replace(/\s+/g, '');
  1586. var start = 0;
  1587. if (number[0] === '-') {
  1588. start++;
  1589. this.negative = 1;
  1590. }
  1591. if (start < number.length) {
  1592. if (base === 16) {
  1593. this._parseHex(number, start, endian);
  1594. } else {
  1595. this._parseBase(number, base, start);
  1596. if (endian === 'le') {
  1597. this._initArray(this.toArray(), base, endian);
  1598. }
  1599. }
  1600. }
  1601. };
  1602. BN.prototype._initNumber = function _initNumber (number, base, endian) {
  1603. if (number < 0) {
  1604. this.negative = 1;
  1605. number = -number;
  1606. }
  1607. if (number < 0x4000000) {
  1608. this.words = [ number & 0x3ffffff ];
  1609. this.length = 1;
  1610. } else if (number < 0x10000000000000) {
  1611. this.words = [
  1612. number & 0x3ffffff,
  1613. (number / 0x4000000) & 0x3ffffff
  1614. ];
  1615. this.length = 2;
  1616. } else {
  1617. assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
  1618. this.words = [
  1619. number & 0x3ffffff,
  1620. (number / 0x4000000) & 0x3ffffff,
  1621. 1
  1622. ];
  1623. this.length = 3;
  1624. }
  1625. if (endian !== 'le') return;
  1626. // Reverse the bytes
  1627. this._initArray(this.toArray(), base, endian);
  1628. };
  1629. BN.prototype._initArray = function _initArray (number, base, endian) {
  1630. // Perhaps a Uint8Array
  1631. assert(typeof number.length === 'number');
  1632. if (number.length <= 0) {
  1633. this.words = [ 0 ];
  1634. this.length = 1;
  1635. return this;
  1636. }
  1637. this.length = Math.ceil(number.length / 3);
  1638. this.words = new Array(this.length);
  1639. for (var i = 0; i < this.length; i++) {
  1640. this.words[i] = 0;
  1641. }
  1642. var j, w;
  1643. var off = 0;
  1644. if (endian === 'be') {
  1645. for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
  1646. w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
  1647. this.words[j] |= (w << off) & 0x3ffffff;
  1648. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  1649. off += 24;
  1650. if (off >= 26) {
  1651. off -= 26;
  1652. j++;
  1653. }
  1654. }
  1655. } else if (endian === 'le') {
  1656. for (i = 0, j = 0; i < number.length; i += 3) {
  1657. w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
  1658. this.words[j] |= (w << off) & 0x3ffffff;
  1659. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  1660. off += 24;
  1661. if (off >= 26) {
  1662. off -= 26;
  1663. j++;
  1664. }
  1665. }
  1666. }
  1667. return this.strip();
  1668. };
  1669. function parseHex4Bits (string, index) {
  1670. var c = string.charCodeAt(index);
  1671. // 'A' - 'F'
  1672. if (c >= 65 && c <= 70) {
  1673. return c - 55;
  1674. // 'a' - 'f'
  1675. } else if (c >= 97 && c <= 102) {
  1676. return c - 87;
  1677. // '0' - '9'
  1678. } else {
  1679. return (c - 48) & 0xf;
  1680. }
  1681. }
  1682. function parseHexByte (string, lowerBound, index) {
  1683. var r = parseHex4Bits(string, index);
  1684. if (index - 1 >= lowerBound) {
  1685. r |= parseHex4Bits(string, index - 1) << 4;
  1686. }
  1687. return r;
  1688. }
  1689. BN.prototype._parseHex = function _parseHex (number, start, endian) {
  1690. // Create possibly bigger array to ensure that it fits the number
  1691. this.length = Math.ceil((number.length - start) / 6);
  1692. this.words = new Array(this.length);
  1693. for (var i = 0; i < this.length; i++) {
  1694. this.words[i] = 0;
  1695. }
  1696. // 24-bits chunks
  1697. var off = 0;
  1698. var j = 0;
  1699. var w;
  1700. if (endian === 'be') {
  1701. for (i = number.length - 1; i >= start; i -= 2) {
  1702. w = parseHexByte(number, start, i) << off;
  1703. this.words[j] |= w & 0x3ffffff;
  1704. if (off >= 18) {
  1705. off -= 18;
  1706. j += 1;
  1707. this.words[j] |= w >>> 26;
  1708. } else {
  1709. off += 8;
  1710. }
  1711. }
  1712. } else {
  1713. var parseLength = number.length - start;
  1714. for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {
  1715. w = parseHexByte(number, start, i) << off;
  1716. this.words[j] |= w & 0x3ffffff;
  1717. if (off >= 18) {
  1718. off -= 18;
  1719. j += 1;
  1720. this.words[j] |= w >>> 26;
  1721. } else {
  1722. off += 8;
  1723. }
  1724. }
  1725. }
  1726. this.strip();
  1727. };
  1728. function parseBase (str, start, end, mul) {
  1729. var r = 0;
  1730. var len = Math.min(str.length, end);
  1731. for (var i = start; i < len; i++) {
  1732. var c = str.charCodeAt(i) - 48;
  1733. r *= mul;
  1734. // 'a'
  1735. if (c >= 49) {
  1736. r += c - 49 + 0xa;
  1737. // 'A'
  1738. } else if (c >= 17) {
  1739. r += c - 17 + 0xa;
  1740. // '0' - '9'
  1741. } else {
  1742. r += c;
  1743. }
  1744. }
  1745. return r;
  1746. }
  1747. BN.prototype._parseBase = function _parseBase (number, base, start) {
  1748. // Initialize as zero
  1749. this.words = [ 0 ];
  1750. this.length = 1;
  1751. // Find length of limb in base
  1752. for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
  1753. limbLen++;
  1754. }
  1755. limbLen--;
  1756. limbPow = (limbPow / base) | 0;
  1757. var total = number.length - start;
  1758. var mod = total % limbLen;
  1759. var end = Math.min(total, total - mod) + start;
  1760. var word = 0;
  1761. for (var i = start; i < end; i += limbLen) {
  1762. word = parseBase(number, i, i + limbLen, base);
  1763. this.imuln(limbPow);
  1764. if (this.words[0] + word < 0x4000000) {
  1765. this.words[0] += word;
  1766. } else {
  1767. this._iaddn(word);
  1768. }
  1769. }
  1770. if (mod !== 0) {
  1771. var pow = 1;
  1772. word = parseBase(number, i, number.length, base);
  1773. for (i = 0; i < mod; i++) {
  1774. pow *= base;
  1775. }
  1776. this.imuln(pow);
  1777. if (this.words[0] + word < 0x4000000) {
  1778. this.words[0] += word;
  1779. } else {
  1780. this._iaddn(word);
  1781. }
  1782. }
  1783. this.strip();
  1784. };
  1785. BN.prototype.copy = function copy (dest) {
  1786. dest.words = new Array(this.length);
  1787. for (var i = 0; i < this.length; i++) {
  1788. dest.words[i] = this.words[i];
  1789. }
  1790. dest.length = this.length;
  1791. dest.negative = this.negative;
  1792. dest.red = this.red;
  1793. };
  1794. BN.prototype.clone = function clone () {
  1795. var r = new BN(null);
  1796. this.copy(r);
  1797. return r;
  1798. };
  1799. BN.prototype._expand = function _expand (size) {
  1800. while (this.length < size) {
  1801. this.words[this.length++] = 0;
  1802. }
  1803. return this;
  1804. };
  1805. // Remove leading `0` from `this`
  1806. BN.prototype.strip = function strip () {
  1807. while (this.length > 1 && this.words[this.length - 1] === 0) {
  1808. this.length--;
  1809. }
  1810. return this._normSign();
  1811. };
  1812. BN.prototype._normSign = function _normSign () {
  1813. // -0 = 0
  1814. if (this.length === 1 && this.words[0] === 0) {
  1815. this.negative = 0;
  1816. }
  1817. return this;
  1818. };
  1819. BN.prototype.inspect = function inspect () {
  1820. return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  1821. };
  1822. /*
  1823. var zeros = [];
  1824. var groupSizes = [];
  1825. var groupBases = [];
  1826. var s = '';
  1827. var i = -1;
  1828. while (++i < BN.wordSize) {
  1829. zeros[i] = s;
  1830. s += '0';
  1831. }
  1832. groupSizes[0] = 0;
  1833. groupSizes[1] = 0;
  1834. groupBases[0] = 0;
  1835. groupBases[1] = 0;
  1836. var base = 2 - 1;
  1837. while (++base < 36 + 1) {
  1838. var groupSize = 0;
  1839. var groupBase = 1;
  1840. while (groupBase < (1 << BN.wordSize) / base) {
  1841. groupBase *= base;
  1842. groupSize += 1;
  1843. }
  1844. groupSizes[base] = groupSize;
  1845. groupBases[base] = groupBase;
  1846. }
  1847. */
  1848. var zeros = [
  1849. '',
  1850. '0',
  1851. '00',
  1852. '000',
  1853. '0000',
  1854. '00000',
  1855. '000000',
  1856. '0000000',
  1857. '00000000',
  1858. '000000000',
  1859. '0000000000',
  1860. '00000000000',
  1861. '000000000000',
  1862. '0000000000000',
  1863. '00000000000000',
  1864. '000000000000000',
  1865. '0000000000000000',
  1866. '00000000000000000',
  1867. '000000000000000000',
  1868. '0000000000000000000',
  1869. '00000000000000000000',
  1870. '000000000000000000000',
  1871. '0000000000000000000000',
  1872. '00000000000000000000000',
  1873. '000000000000000000000000',
  1874. '0000000000000000000000000'
  1875. ];
  1876. var groupSizes = [
  1877. 0, 0,
  1878. 25, 16, 12, 11, 10, 9, 8,
  1879. 8, 7, 7, 7, 7, 6, 6,
  1880. 6, 6, 6, 6, 6, 5, 5,
  1881. 5, 5, 5, 5, 5, 5, 5,
  1882. 5, 5, 5, 5, 5, 5, 5
  1883. ];
  1884. var groupBases = [
  1885. 0, 0,
  1886. 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
  1887. 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
  1888. 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
  1889. 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
  1890. 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
  1891. ];
  1892. BN.prototype.toString = function toString (base, padding) {
  1893. base = base || 10;
  1894. padding = padding | 0 || 1;
  1895. var out;
  1896. if (base === 16 || base === 'hex') {
  1897. out = '';
  1898. var off = 0;
  1899. var carry = 0;
  1900. for (var i = 0; i < this.length; i++) {
  1901. var w = this.words[i];
  1902. var word = (((w << off) | carry) & 0xffffff).toString(16);
  1903. carry = (w >>> (24 - off)) & 0xffffff;
  1904. if (carry !== 0 || i !== this.length - 1) {
  1905. out = zeros[6 - word.length] + word + out;
  1906. } else {
  1907. out = word + out;
  1908. }
  1909. off += 2;
  1910. if (off >= 26) {
  1911. off -= 26;
  1912. i--;
  1913. }
  1914. }
  1915. if (carry !== 0) {
  1916. out = carry.toString(16) + out;
  1917. }
  1918. while (out.length % padding !== 0) {
  1919. out = '0' + out;
  1920. }
  1921. if (this.negative !== 0) {
  1922. out = '-' + out;
  1923. }
  1924. return out;
  1925. }
  1926. if (base === (base | 0) && base >= 2 && base <= 36) {
  1927. // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
  1928. var groupSize = groupSizes[base];
  1929. // var groupBase = Math.pow(base, groupSize);
  1930. var groupBase = groupBases[base];
  1931. out = '';
  1932. var c = this.clone();
  1933. c.negative = 0;
  1934. while (!c.isZero()) {
  1935. var r = c.modn(groupBase).toString(base);
  1936. c = c.idivn(groupBase);
  1937. if (!c.isZero()) {
  1938. out = zeros[groupSize - r.length] + r + out;
  1939. } else {
  1940. out = r + out;
  1941. }
  1942. }
  1943. if (this.isZero()) {
  1944. out = '0' + out;
  1945. }
  1946. while (out.length % padding !== 0) {
  1947. out = '0' + out;
  1948. }
  1949. if (this.negative !== 0) {
  1950. out = '-' + out;
  1951. }
  1952. return out;
  1953. }
  1954. assert(false, 'Base should be between 2 and 36');
  1955. };
  1956. BN.prototype.toNumber = function toNumber () {
  1957. var ret = this.words[0];
  1958. if (this.length === 2) {
  1959. ret += this.words[1] * 0x4000000;
  1960. } else if (this.length === 3 && this.words[2] === 0x01) {
  1961. // NOTE: at this stage it is known that the top bit is set
  1962. ret += 0x10000000000000 + (this.words[1] * 0x4000000);
  1963. } else if (this.length > 2) {
  1964. assert(false, 'Number can only safely store up to 53 bits');
  1965. }
  1966. return (this.negative !== 0) ? -ret : ret;
  1967. };
  1968. BN.prototype.toJSON = function toJSON () {
  1969. return this.toString(16);
  1970. };
  1971. BN.prototype.toBuffer = function toBuffer (endian, length) {
  1972. assert(typeof Buffer !== 'undefined');
  1973. return this.toArrayLike(Buffer, endian, length);
  1974. };
  1975. BN.prototype.toArray = function toArray (endian, length) {
  1976. return this.toArrayLike(Array, endian, length);
  1977. };
  1978. BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
  1979. var byteLength = this.byteLength();
  1980. var reqLength = length || Math.max(1, byteLength);
  1981. assert(byteLength <= reqLength, 'byte array longer than desired length');
  1982. assert(reqLength > 0, 'Requested array length <= 0');
  1983. this.strip();
  1984. var littleEndian = endian === 'le';
  1985. var res = new ArrayType(reqLength);
  1986. var b, i;
  1987. var q = this.clone();
  1988. if (!littleEndian) {
  1989. // Assume big-endian
  1990. for (i = 0; i < reqLength - byteLength; i++) {
  1991. res[i] = 0;
  1992. }
  1993. for (i = 0; !q.isZero(); i++) {
  1994. b = q.andln(0xff);
  1995. q.iushrn(8);
  1996. res[reqLength - i - 1] = b;
  1997. }
  1998. } else {
  1999. for (i = 0; !q.isZero(); i++) {
  2000. b = q.andln(0xff);
  2001. q.iushrn(8);
  2002. res[i] = b;
  2003. }
  2004. for (; i < reqLength; i++) {
  2005. res[i] = 0;
  2006. }
  2007. }
  2008. return res;
  2009. };
  2010. if (Math.clz32) {
  2011. BN.prototype._countBits = function _countBits (w) {
  2012. return 32 - Math.clz32(w);
  2013. };
  2014. } else {
  2015. BN.prototype._countBits = function _countBits (w) {
  2016. var t = w;
  2017. var r = 0;
  2018. if (t >= 0x1000) {
  2019. r += 13;
  2020. t >>>= 13;
  2021. }
  2022. if (t >= 0x40) {
  2023. r += 7;
  2024. t >>>= 7;
  2025. }
  2026. if (t >= 0x8) {
  2027. r += 4;
  2028. t >>>= 4;
  2029. }
  2030. if (t >= 0x02) {
  2031. r += 2;
  2032. t >>>= 2;
  2033. }
  2034. return r + t;
  2035. };
  2036. }
  2037. BN.prototype._zeroBits = function _zeroBits (w) {
  2038. // Short-cut
  2039. if (w === 0) return 26;
  2040. var t = w;
  2041. var r = 0;
  2042. if ((t & 0x1fff) === 0) {
  2043. r += 13;
  2044. t >>>= 13;
  2045. }
  2046. if ((t & 0x7f) === 0) {
  2047. r += 7;
  2048. t >>>= 7;
  2049. }
  2050. if ((t & 0xf) === 0) {
  2051. r += 4;
  2052. t >>>= 4;
  2053. }
  2054. if ((t & 0x3) === 0) {
  2055. r += 2;
  2056. t >>>= 2;
  2057. }
  2058. if ((t & 0x1) === 0) {
  2059. r++;
  2060. }
  2061. return r;
  2062. };
  2063. // Return number of used bits in a BN
  2064. BN.prototype.bitLength = function bitLength () {
  2065. var w = this.words[this.length - 1];
  2066. var hi = this._countBits(w);
  2067. return (this.length - 1) * 26 + hi;
  2068. };
  2069. function toBitArray (num) {
  2070. var w = new Array(num.bitLength());
  2071. for (var bit = 0; bit < w.length; bit++) {
  2072. var off = (bit / 26) | 0;
  2073. var wbit = bit % 26;
  2074. w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
  2075. }
  2076. return w;
  2077. }
  2078. // Number of trailing zero bits
  2079. BN.prototype.zeroBits = function zeroBits () {
  2080. if (this.isZero()) return 0;
  2081. var r = 0;
  2082. for (var i = 0; i < this.length; i++) {
  2083. var b = this._zeroBits(this.words[i]);
  2084. r += b;
  2085. if (b !== 26) break;
  2086. }
  2087. return r;
  2088. };
  2089. BN.prototype.byteLength = function byteLength () {
  2090. return Math.ceil(this.bitLength() / 8);
  2091. };
  2092. BN.prototype.toTwos = function toTwos (width) {
  2093. if (this.negative !== 0) {
  2094. return this.abs().inotn(width).iaddn(1);
  2095. }
  2096. return this.clone();
  2097. };
  2098. BN.prototype.fromTwos = function fromTwos (width) {
  2099. if (this.testn(width - 1)) {
  2100. return this.notn(width).iaddn(1).ineg();
  2101. }
  2102. return this.clone();
  2103. };
  2104. BN.prototype.isNeg = function isNeg () {
  2105. return this.negative !== 0;
  2106. };
  2107. // Return negative clone of `this`
  2108. BN.prototype.neg = function neg () {
  2109. return this.clone().ineg();
  2110. };
  2111. BN.prototype.ineg = function ineg () {
  2112. if (!this.isZero()) {
  2113. this.negative ^= 1;
  2114. }
  2115. return this;
  2116. };
  2117. // Or `num` with `this` in-place
  2118. BN.prototype.iuor = function iuor (num) {
  2119. while (this.length < num.length) {
  2120. this.words[this.length++] = 0;
  2121. }
  2122. for (var i = 0; i < num.length; i++) {
  2123. this.words[i] = this.words[i] | num.words[i];
  2124. }
  2125. return this.strip();
  2126. };
  2127. BN.prototype.ior = function ior (num) {
  2128. assert((this.negative | num.negative) === 0);
  2129. return this.iuor(num);
  2130. };
  2131. // Or `num` with `this`
  2132. BN.prototype.or = function or (num) {
  2133. if (this.length > num.length) return this.clone().ior(num);
  2134. return num.clone().ior(this);
  2135. };
  2136. BN.prototype.uor = function uor (num) {
  2137. if (this.length > num.length) return this.clone().iuor(num);
  2138. return num.clone().iuor(this);
  2139. };
  2140. // And `num` with `this` in-place
  2141. BN.prototype.iuand = function iuand (num) {
  2142. // b = min-length(num, this)
  2143. var b;
  2144. if (this.length > num.length) {
  2145. b = num;
  2146. } else {
  2147. b = this;
  2148. }
  2149. for (var i = 0; i < b.length; i++) {
  2150. this.words[i] = this.words[i] & num.words[i];
  2151. }
  2152. this.length = b.length;
  2153. return this.strip();
  2154. };
  2155. BN.prototype.iand = function iand (num) {
  2156. assert((this.negative | num.negative) === 0);
  2157. return this.iuand(num);
  2158. };
  2159. // And `num` with `this`
  2160. BN.prototype.and = function and (num) {
  2161. if (this.length > num.length) return this.clone().iand(num);
  2162. return num.clone().iand(this);
  2163. };
  2164. BN.prototype.uand = function uand (num) {
  2165. if (this.length > num.length) return this.clone().iuand(num);
  2166. return num.clone().iuand(this);
  2167. };
  2168. // Xor `num` with `this` in-place
  2169. BN.prototype.iuxor = function iuxor (num) {
  2170. // a.length > b.length
  2171. var a;
  2172. var b;
  2173. if (this.length > num.length) {
  2174. a = this;
  2175. b = num;
  2176. } else {
  2177. a = num;
  2178. b = this;
  2179. }
  2180. for (var i = 0; i < b.length; i++) {
  2181. this.words[i] = a.words[i] ^ b.words[i];
  2182. }
  2183. if (this !== a) {
  2184. for (; i < a.length; i++) {
  2185. this.words[i] = a.words[i];
  2186. }
  2187. }
  2188. this.length = a.length;
  2189. return this.strip();
  2190. };
  2191. BN.prototype.ixor = function ixor (num) {
  2192. assert((this.negative | num.negative) === 0);
  2193. return this.iuxor(num);
  2194. };
  2195. // Xor `num` with `this`
  2196. BN.prototype.xor = function xor (num) {
  2197. if (this.length > num.length) return this.clone().ixor(num);
  2198. return num.clone().ixor(this);
  2199. };
  2200. BN.prototype.uxor = function uxor (num) {
  2201. if (this.length > num.length) return this.clone().iuxor(num);
  2202. return num.clone().iuxor(this);
  2203. };
  2204. // Not ``this`` with ``width`` bitwidth
  2205. BN.prototype.inotn = function inotn (width) {
  2206. assert(typeof width === 'number' && width >= 0);
  2207. var bytesNeeded = Math.ceil(width / 26) | 0;
  2208. var bitsLeft = width % 26;
  2209. // Extend the buffer with leading zeroes
  2210. this._expand(bytesNeeded);
  2211. if (bitsLeft > 0) {
  2212. bytesNeeded--;
  2213. }
  2214. // Handle complete words
  2215. for (var i = 0; i < bytesNeeded; i++) {
  2216. this.words[i] = ~this.words[i] & 0x3ffffff;
  2217. }
  2218. // Handle the residue
  2219. if (bitsLeft > 0) {
  2220. this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
  2221. }
  2222. // And remove leading zeroes
  2223. return this.strip();
  2224. };
  2225. BN.prototype.notn = function notn (width) {
  2226. return this.clone().inotn(width);
  2227. };
  2228. // Set `bit` of `this`
  2229. BN.prototype.setn = function setn (bit, val) {
  2230. assert(typeof bit === 'number' && bit >= 0);
  2231. var off = (bit / 26) | 0;
  2232. var wbit = bit % 26;
  2233. this._expand(off + 1);
  2234. if (val) {
  2235. this.words[off] = this.words[off] | (1 << wbit);
  2236. } else {
  2237. this.words[off] = this.words[off] & ~(1 << wbit);
  2238. }
  2239. return this.strip();
  2240. };
  2241. // Add `num` to `this` in-place
  2242. BN.prototype.iadd = function iadd (num) {
  2243. var r;
  2244. // negative + positive
  2245. if (this.negative !== 0 && num.negative === 0) {
  2246. this.negative = 0;
  2247. r = this.isub(num);
  2248. this.negative ^= 1;
  2249. return this._normSign();
  2250. // positive + negative
  2251. } else if (this.negative === 0 && num.negative !== 0) {
  2252. num.negative = 0;
  2253. r = this.isub(num);
  2254. num.negative = 1;
  2255. return r._normSign();
  2256. }
  2257. // a.length > b.length
  2258. var a, b;
  2259. if (this.length > num.length) {
  2260. a = this;
  2261. b = num;
  2262. } else {
  2263. a = num;
  2264. b = this;
  2265. }
  2266. var carry = 0;
  2267. for (var i = 0; i < b.length; i++) {
  2268. r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
  2269. this.words[i] = r & 0x3ffffff;
  2270. carry = r >>> 26;
  2271. }
  2272. for (; carry !== 0 && i < a.length; i++) {
  2273. r = (a.words[i] | 0) + carry;
  2274. this.words[i] = r & 0x3ffffff;
  2275. carry = r >>> 26;
  2276. }
  2277. this.length = a.length;
  2278. if (carry !== 0) {
  2279. this.words[this.length] = carry;
  2280. this.length++;
  2281. // Copy the rest of the words
  2282. } else if (a !== this) {
  2283. for (; i < a.length; i++) {
  2284. this.words[i] = a.words[i];
  2285. }
  2286. }
  2287. return this;
  2288. };
  2289. // Add `num` to `this`
  2290. BN.prototype.add = function add (num) {
  2291. var res;
  2292. if (num.negative !== 0 && this.negative === 0) {
  2293. num.negative = 0;
  2294. res = this.sub(num);
  2295. num.negative ^= 1;
  2296. return res;
  2297. } else if (num.negative === 0 && this.negative !== 0) {
  2298. this.negative = 0;
  2299. res = num.sub(this);
  2300. this.negative = 1;
  2301. return res;
  2302. }
  2303. if (this.length > num.length) return this.clone().iadd(num);
  2304. return num.clone().iadd(this);
  2305. };
  2306. // Subtract `num` from `this` in-place
  2307. BN.prototype.isub = function isub (num) {
  2308. // this - (-num) = this + num
  2309. if (num.negative !== 0) {
  2310. num.negative = 0;
  2311. var r = this.iadd(num);
  2312. num.negative = 1;
  2313. return r._normSign();
  2314. // -this - num = -(this + num)
  2315. } else if (this.negative !== 0) {
  2316. this.negative = 0;
  2317. this.iadd(num);
  2318. this.negative = 1;
  2319. return this._normSign();
  2320. }
  2321. // At this point both numbers are positive
  2322. var cmp = this.cmp(num);
  2323. // Optimization - zeroify
  2324. if (cmp === 0) {
  2325. this.negative = 0;
  2326. this.length = 1;
  2327. this.words[0] = 0;
  2328. return this;
  2329. }
  2330. // a > b
  2331. var a, b;
  2332. if (cmp > 0) {
  2333. a = this;
  2334. b = num;
  2335. } else {
  2336. a = num;
  2337. b = this;
  2338. }
  2339. var carry = 0;
  2340. for (var i = 0; i < b.length; i++) {
  2341. r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
  2342. carry = r >> 26;
  2343. this.words[i] = r & 0x3ffffff;
  2344. }
  2345. for (; carry !== 0 && i < a.length; i++) {
  2346. r = (a.words[i] | 0) + carry;
  2347. carry = r >> 26;
  2348. this.words[i] = r & 0x3ffffff;
  2349. }
  2350. // Copy rest of the words
  2351. if (carry === 0 && i < a.length && a !== this) {
  2352. for (; i < a.length; i++) {
  2353. this.words[i] = a.words[i];
  2354. }
  2355. }
  2356. this.length = Math.max(this.length, i);
  2357. if (a !== this) {
  2358. this.negative = 1;
  2359. }
  2360. return this.strip();
  2361. };
  2362. // Subtract `num` from `this`
  2363. BN.prototype.sub = function sub (num) {
  2364. return this.clone().isub(num);
  2365. };
  2366. function smallMulTo (self, num, out) {
  2367. out.negative = num.negative ^ self.negative;
  2368. var len = (self.length + num.length) | 0;
  2369. out.length = len;
  2370. len = (len - 1) | 0;
  2371. // Peel one iteration (compiler can't do it, because of code complexity)
  2372. var a = self.words[0] | 0;
  2373. var b = num.words[0] | 0;
  2374. var r = a * b;
  2375. var lo = r & 0x3ffffff;
  2376. var carry = (r / 0x4000000) | 0;
  2377. out.words[0] = lo;
  2378. for (var k = 1; k < len; k++) {
  2379. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  2380. // note that ncarry could be >= 0x3ffffff
  2381. var ncarry = carry >>> 26;
  2382. var rword = carry & 0x3ffffff;
  2383. var maxJ = Math.min(k, num.length - 1);
  2384. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  2385. var i = (k - j) | 0;
  2386. a = self.words[i] | 0;
  2387. b = num.words[j] | 0;
  2388. r = a * b + rword;
  2389. ncarry += (r / 0x4000000) | 0;
  2390. rword = r & 0x3ffffff;
  2391. }
  2392. out.words[k] = rword | 0;
  2393. carry = ncarry | 0;
  2394. }
  2395. if (carry !== 0) {
  2396. out.words[k] = carry | 0;
  2397. } else {
  2398. out.length--;
  2399. }
  2400. return out.strip();
  2401. }
  2402. // TODO(indutny): it may be reasonable to omit it for users who don't need
  2403. // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
  2404. // multiplication (like elliptic secp256k1).
  2405. var comb10MulTo = function comb10MulTo (self, num, out) {
  2406. var a = self.words;
  2407. var b = num.words;
  2408. var o = out.words;
  2409. var c = 0;
  2410. var lo;
  2411. var mid;
  2412. var hi;
  2413. var a0 = a[0] | 0;
  2414. var al0 = a0 & 0x1fff;
  2415. var ah0 = a0 >>> 13;
  2416. var a1 = a[1] | 0;
  2417. var al1 = a1 & 0x1fff;
  2418. var ah1 = a1 >>> 13;
  2419. var a2 = a[2] | 0;
  2420. var al2 = a2 & 0x1fff;
  2421. var ah2 = a2 >>> 13;
  2422. var a3 = a[3] | 0;
  2423. var al3 = a3 & 0x1fff;
  2424. var ah3 = a3 >>> 13;
  2425. var a4 = a[4] | 0;
  2426. var al4 = a4 & 0x1fff;
  2427. var ah4 = a4 >>> 13;
  2428. var a5 = a[5] | 0;
  2429. var al5 = a5 & 0x1fff;
  2430. var ah5 = a5 >>> 13;
  2431. var a6 = a[6] | 0;
  2432. var al6 = a6 & 0x1fff;
  2433. var ah6 = a6 >>> 13;
  2434. var a7 = a[7] | 0;
  2435. var al7 = a7 & 0x1fff;
  2436. var ah7 = a7 >>> 13;
  2437. var a8 = a[8] | 0;
  2438. var al8 = a8 & 0x1fff;
  2439. var ah8 = a8 >>> 13;
  2440. var a9 = a[9] | 0;
  2441. var al9 = a9 & 0x1fff;
  2442. var ah9 = a9 >>> 13;
  2443. var b0 = b[0] | 0;
  2444. var bl0 = b0 & 0x1fff;
  2445. var bh0 = b0 >>> 13;
  2446. var b1 = b[1] | 0;
  2447. var bl1 = b1 & 0x1fff;
  2448. var bh1 = b1 >>> 13;
  2449. var b2 = b[2] | 0;
  2450. var bl2 = b2 & 0x1fff;
  2451. var bh2 = b2 >>> 13;
  2452. var b3 = b[3] | 0;
  2453. var bl3 = b3 & 0x1fff;
  2454. var bh3 = b3 >>> 13;
  2455. var b4 = b[4] | 0;
  2456. var bl4 = b4 & 0x1fff;
  2457. var bh4 = b4 >>> 13;
  2458. var b5 = b[5] | 0;
  2459. var bl5 = b5 & 0x1fff;
  2460. var bh5 = b5 >>> 13;
  2461. var b6 = b[6] | 0;
  2462. var bl6 = b6 & 0x1fff;
  2463. var bh6 = b6 >>> 13;
  2464. var b7 = b[7] | 0;
  2465. var bl7 = b7 & 0x1fff;
  2466. var bh7 = b7 >>> 13;
  2467. var b8 = b[8] | 0;
  2468. var bl8 = b8 & 0x1fff;
  2469. var bh8 = b8 >>> 13;
  2470. var b9 = b[9] | 0;
  2471. var bl9 = b9 & 0x1fff;
  2472. var bh9 = b9 >>> 13;
  2473. out.negative = self.negative ^ num.negative;
  2474. out.length = 19;
  2475. /* k = 0 */
  2476. lo = Math.imul(al0, bl0);
  2477. mid = Math.imul(al0, bh0);
  2478. mid = (mid + Math.imul(ah0, bl0)) | 0;
  2479. hi = Math.imul(ah0, bh0);
  2480. var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2481. c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
  2482. w0 &= 0x3ffffff;
  2483. /* k = 1 */
  2484. lo = Math.imul(al1, bl0);
  2485. mid = Math.imul(al1, bh0);
  2486. mid = (mid + Math.imul(ah1, bl0)) | 0;
  2487. hi = Math.imul(ah1, bh0);
  2488. lo = (lo + Math.imul(al0, bl1)) | 0;
  2489. mid = (mid + Math.imul(al0, bh1)) | 0;
  2490. mid = (mid + Math.imul(ah0, bl1)) | 0;
  2491. hi = (hi + Math.imul(ah0, bh1)) | 0;
  2492. var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2493. c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
  2494. w1 &= 0x3ffffff;
  2495. /* k = 2 */
  2496. lo = Math.imul(al2, bl0);
  2497. mid = Math.imul(al2, bh0);
  2498. mid = (mid + Math.imul(ah2, bl0)) | 0;
  2499. hi = Math.imul(ah2, bh0);
  2500. lo = (lo + Math.imul(al1, bl1)) | 0;
  2501. mid = (mid + Math.imul(al1, bh1)) | 0;
  2502. mid = (mid + Math.imul(ah1, bl1)) | 0;
  2503. hi = (hi + Math.imul(ah1, bh1)) | 0;
  2504. lo = (lo + Math.imul(al0, bl2)) | 0;
  2505. mid = (mid + Math.imul(al0, bh2)) | 0;
  2506. mid = (mid + Math.imul(ah0, bl2)) | 0;
  2507. hi = (hi + Math.imul(ah0, bh2)) | 0;
  2508. var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2509. c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
  2510. w2 &= 0x3ffffff;
  2511. /* k = 3 */
  2512. lo = Math.imul(al3, bl0);
  2513. mid = Math.imul(al3, bh0);
  2514. mid = (mid + Math.imul(ah3, bl0)) | 0;
  2515. hi = Math.imul(ah3, bh0);
  2516. lo = (lo + Math.imul(al2, bl1)) | 0;
  2517. mid = (mid + Math.imul(al2, bh1)) | 0;
  2518. mid = (mid + Math.imul(ah2, bl1)) | 0;
  2519. hi = (hi + Math.imul(ah2, bh1)) | 0;
  2520. lo = (lo + Math.imul(al1, bl2)) | 0;
  2521. mid = (mid + Math.imul(al1, bh2)) | 0;
  2522. mid = (mid + Math.imul(ah1, bl2)) | 0;
  2523. hi = (hi + Math.imul(ah1, bh2)) | 0;
  2524. lo = (lo + Math.imul(al0, bl3)) | 0;
  2525. mid = (mid + Math.imul(al0, bh3)) | 0;
  2526. mid = (mid + Math.imul(ah0, bl3)) | 0;
  2527. hi = (hi + Math.imul(ah0, bh3)) | 0;
  2528. var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2529. c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
  2530. w3 &= 0x3ffffff;
  2531. /* k = 4 */
  2532. lo = Math.imul(al4, bl0);
  2533. mid = Math.imul(al4, bh0);
  2534. mid = (mid + Math.imul(ah4, bl0)) | 0;
  2535. hi = Math.imul(ah4, bh0);
  2536. lo = (lo + Math.imul(al3, bl1)) | 0;
  2537. mid = (mid + Math.imul(al3, bh1)) | 0;
  2538. mid = (mid + Math.imul(ah3, bl1)) | 0;
  2539. hi = (hi + Math.imul(ah3, bh1)) | 0;
  2540. lo = (lo + Math.imul(al2, bl2)) | 0;
  2541. mid = (mid + Math.imul(al2, bh2)) | 0;
  2542. mid = (mid + Math.imul(ah2, bl2)) | 0;
  2543. hi = (hi + Math.imul(ah2, bh2)) | 0;
  2544. lo = (lo + Math.imul(al1, bl3)) | 0;
  2545. mid = (mid + Math.imul(al1, bh3)) | 0;
  2546. mid = (mid + Math.imul(ah1, bl3)) | 0;
  2547. hi = (hi + Math.imul(ah1, bh3)) | 0;
  2548. lo = (lo + Math.imul(al0, bl4)) | 0;
  2549. mid = (mid + Math.imul(al0, bh4)) | 0;
  2550. mid = (mid + Math.imul(ah0, bl4)) | 0;
  2551. hi = (hi + Math.imul(ah0, bh4)) | 0;
  2552. var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2553. c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
  2554. w4 &= 0x3ffffff;
  2555. /* k = 5 */
  2556. lo = Math.imul(al5, bl0);
  2557. mid = Math.imul(al5, bh0);
  2558. mid = (mid + Math.imul(ah5, bl0)) | 0;
  2559. hi = Math.imul(ah5, bh0);
  2560. lo = (lo + Math.imul(al4, bl1)) | 0;
  2561. mid = (mid + Math.imul(al4, bh1)) | 0;
  2562. mid = (mid + Math.imul(ah4, bl1)) | 0;
  2563. hi = (hi + Math.imul(ah4, bh1)) | 0;
  2564. lo = (lo + Math.imul(al3, bl2)) | 0;
  2565. mid = (mid + Math.imul(al3, bh2)) | 0;
  2566. mid = (mid + Math.imul(ah3, bl2)) | 0;
  2567. hi = (hi + Math.imul(ah3, bh2)) | 0;
  2568. lo = (lo + Math.imul(al2, bl3)) | 0;
  2569. mid = (mid + Math.imul(al2, bh3)) | 0;
  2570. mid = (mid + Math.imul(ah2, bl3)) | 0;
  2571. hi = (hi + Math.imul(ah2, bh3)) | 0;
  2572. lo = (lo + Math.imul(al1, bl4)) | 0;
  2573. mid = (mid + Math.imul(al1, bh4)) | 0;
  2574. mid = (mid + Math.imul(ah1, bl4)) | 0;
  2575. hi = (hi + Math.imul(ah1, bh4)) | 0;
  2576. lo = (lo + Math.imul(al0, bl5)) | 0;
  2577. mid = (mid + Math.imul(al0, bh5)) | 0;
  2578. mid = (mid + Math.imul(ah0, bl5)) | 0;
  2579. hi = (hi + Math.imul(ah0, bh5)) | 0;
  2580. var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2581. c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
  2582. w5 &= 0x3ffffff;
  2583. /* k = 6 */
  2584. lo = Math.imul(al6, bl0);
  2585. mid = Math.imul(al6, bh0);
  2586. mid = (mid + Math.imul(ah6, bl0)) | 0;
  2587. hi = Math.imul(ah6, bh0);
  2588. lo = (lo + Math.imul(al5, bl1)) | 0;
  2589. mid = (mid + Math.imul(al5, bh1)) | 0;
  2590. mid = (mid + Math.imul(ah5, bl1)) | 0;
  2591. hi = (hi + Math.imul(ah5, bh1)) | 0;
  2592. lo = (lo + Math.imul(al4, bl2)) | 0;
  2593. mid = (mid + Math.imul(al4, bh2)) | 0;
  2594. mid = (mid + Math.imul(ah4, bl2)) | 0;
  2595. hi = (hi + Math.imul(ah4, bh2)) | 0;
  2596. lo = (lo + Math.imul(al3, bl3)) | 0;
  2597. mid = (mid + Math.imul(al3, bh3)) | 0;
  2598. mid = (mid + Math.imul(ah3, bl3)) | 0;
  2599. hi = (hi + Math.imul(ah3, bh3)) | 0;
  2600. lo = (lo + Math.imul(al2, bl4)) | 0;
  2601. mid = (mid + Math.imul(al2, bh4)) | 0;
  2602. mid = (mid + Math.imul(ah2, bl4)) | 0;
  2603. hi = (hi + Math.imul(ah2, bh4)) | 0;
  2604. lo = (lo + Math.imul(al1, bl5)) | 0;
  2605. mid = (mid + Math.imul(al1, bh5)) | 0;
  2606. mid = (mid + Math.imul(ah1, bl5)) | 0;
  2607. hi = (hi + Math.imul(ah1, bh5)) | 0;
  2608. lo = (lo + Math.imul(al0, bl6)) | 0;
  2609. mid = (mid + Math.imul(al0, bh6)) | 0;
  2610. mid = (mid + Math.imul(ah0, bl6)) | 0;
  2611. hi = (hi + Math.imul(ah0, bh6)) | 0;
  2612. var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2613. c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
  2614. w6 &= 0x3ffffff;
  2615. /* k = 7 */
  2616. lo = Math.imul(al7, bl0);
  2617. mid = Math.imul(al7, bh0);
  2618. mid = (mid + Math.imul(ah7, bl0)) | 0;
  2619. hi = Math.imul(ah7, bh0);
  2620. lo = (lo + Math.imul(al6, bl1)) | 0;
  2621. mid = (mid + Math.imul(al6, bh1)) | 0;
  2622. mid = (mid + Math.imul(ah6, bl1)) | 0;
  2623. hi = (hi + Math.imul(ah6, bh1)) | 0;
  2624. lo = (lo + Math.imul(al5, bl2)) | 0;
  2625. mid = (mid + Math.imul(al5, bh2)) | 0;
  2626. mid = (mid + Math.imul(ah5, bl2)) | 0;
  2627. hi = (hi + Math.imul(ah5, bh2)) | 0;
  2628. lo = (lo + Math.imul(al4, bl3)) | 0;
  2629. mid = (mid + Math.imul(al4, bh3)) | 0;
  2630. mid = (mid + Math.imul(ah4, bl3)) | 0;
  2631. hi = (hi + Math.imul(ah4, bh3)) | 0;
  2632. lo = (lo + Math.imul(al3, bl4)) | 0;
  2633. mid = (mid + Math.imul(al3, bh4)) | 0;
  2634. mid = (mid + Math.imul(ah3, bl4)) | 0;
  2635. hi = (hi + Math.imul(ah3, bh4)) | 0;
  2636. lo = (lo + Math.imul(al2, bl5)) | 0;
  2637. mid = (mid + Math.imul(al2, bh5)) | 0;
  2638. mid = (mid + Math.imul(ah2, bl5)) | 0;
  2639. hi = (hi + Math.imul(ah2, bh5)) | 0;
  2640. lo = (lo + Math.imul(al1, bl6)) | 0;
  2641. mid = (mid + Math.imul(al1, bh6)) | 0;
  2642. mid = (mid + Math.imul(ah1, bl6)) | 0;
  2643. hi = (hi + Math.imul(ah1, bh6)) | 0;
  2644. lo = (lo + Math.imul(al0, bl7)) | 0;
  2645. mid = (mid + Math.imul(al0, bh7)) | 0;
  2646. mid = (mid + Math.imul(ah0, bl7)) | 0;
  2647. hi = (hi + Math.imul(ah0, bh7)) | 0;
  2648. var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2649. c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
  2650. w7 &= 0x3ffffff;
  2651. /* k = 8 */
  2652. lo = Math.imul(al8, bl0);
  2653. mid = Math.imul(al8, bh0);
  2654. mid = (mid + Math.imul(ah8, bl0)) | 0;
  2655. hi = Math.imul(ah8, bh0);
  2656. lo = (lo + Math.imul(al7, bl1)) | 0;
  2657. mid = (mid + Math.imul(al7, bh1)) | 0;
  2658. mid = (mid + Math.imul(ah7, bl1)) | 0;
  2659. hi = (hi + Math.imul(ah7, bh1)) | 0;
  2660. lo = (lo + Math.imul(al6, bl2)) | 0;
  2661. mid = (mid + Math.imul(al6, bh2)) | 0;
  2662. mid = (mid + Math.imul(ah6, bl2)) | 0;
  2663. hi = (hi + Math.imul(ah6, bh2)) | 0;
  2664. lo = (lo + Math.imul(al5, bl3)) | 0;
  2665. mid = (mid + Math.imul(al5, bh3)) | 0;
  2666. mid = (mid + Math.imul(ah5, bl3)) | 0;
  2667. hi = (hi + Math.imul(ah5, bh3)) | 0;
  2668. lo = (lo + Math.imul(al4, bl4)) | 0;
  2669. mid = (mid + Math.imul(al4, bh4)) | 0;
  2670. mid = (mid + Math.imul(ah4, bl4)) | 0;
  2671. hi = (hi + Math.imul(ah4, bh4)) | 0;
  2672. lo = (lo + Math.imul(al3, bl5)) | 0;
  2673. mid = (mid + Math.imul(al3, bh5)) | 0;
  2674. mid = (mid + Math.imul(ah3, bl5)) | 0;
  2675. hi = (hi + Math.imul(ah3, bh5)) | 0;
  2676. lo = (lo + Math.imul(al2, bl6)) | 0;
  2677. mid = (mid + Math.imul(al2, bh6)) | 0;
  2678. mid = (mid + Math.imul(ah2, bl6)) | 0;
  2679. hi = (hi + Math.imul(ah2, bh6)) | 0;
  2680. lo = (lo + Math.imul(al1, bl7)) | 0;
  2681. mid = (mid + Math.imul(al1, bh7)) | 0;
  2682. mid = (mid + Math.imul(ah1, bl7)) | 0;
  2683. hi = (hi + Math.imul(ah1, bh7)) | 0;
  2684. lo = (lo + Math.imul(al0, bl8)) | 0;
  2685. mid = (mid + Math.imul(al0, bh8)) | 0;
  2686. mid = (mid + Math.imul(ah0, bl8)) | 0;
  2687. hi = (hi + Math.imul(ah0, bh8)) | 0;
  2688. var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2689. c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
  2690. w8 &= 0x3ffffff;
  2691. /* k = 9 */
  2692. lo = Math.imul(al9, bl0);
  2693. mid = Math.imul(al9, bh0);
  2694. mid = (mid + Math.imul(ah9, bl0)) | 0;
  2695. hi = Math.imul(ah9, bh0);
  2696. lo = (lo + Math.imul(al8, bl1)) | 0;
  2697. mid = (mid + Math.imul(al8, bh1)) | 0;
  2698. mid = (mid + Math.imul(ah8, bl1)) | 0;
  2699. hi = (hi + Math.imul(ah8, bh1)) | 0;
  2700. lo = (lo + Math.imul(al7, bl2)) | 0;
  2701. mid = (mid + Math.imul(al7, bh2)) | 0;
  2702. mid = (mid + Math.imul(ah7, bl2)) | 0;
  2703. hi = (hi + Math.imul(ah7, bh2)) | 0;
  2704. lo = (lo + Math.imul(al6, bl3)) | 0;
  2705. mid = (mid + Math.imul(al6, bh3)) | 0;
  2706. mid = (mid + Math.imul(ah6, bl3)) | 0;
  2707. hi = (hi + Math.imul(ah6, bh3)) | 0;
  2708. lo = (lo + Math.imul(al5, bl4)) | 0;
  2709. mid = (mid + Math.imul(al5, bh4)) | 0;
  2710. mid = (mid + Math.imul(ah5, bl4)) | 0;
  2711. hi = (hi + Math.imul(ah5, bh4)) | 0;
  2712. lo = (lo + Math.imul(al4, bl5)) | 0;
  2713. mid = (mid + Math.imul(al4, bh5)) | 0;
  2714. mid = (mid + Math.imul(ah4, bl5)) | 0;
  2715. hi = (hi + Math.imul(ah4, bh5)) | 0;
  2716. lo = (lo + Math.imul(al3, bl6)) | 0;
  2717. mid = (mid + Math.imul(al3, bh6)) | 0;
  2718. mid = (mid + Math.imul(ah3, bl6)) | 0;
  2719. hi = (hi + Math.imul(ah3, bh6)) | 0;
  2720. lo = (lo + Math.imul(al2, bl7)) | 0;
  2721. mid = (mid + Math.imul(al2, bh7)) | 0;
  2722. mid = (mid + Math.imul(ah2, bl7)) | 0;
  2723. hi = (hi + Math.imul(ah2, bh7)) | 0;
  2724. lo = (lo + Math.imul(al1, bl8)) | 0;
  2725. mid = (mid + Math.imul(al1, bh8)) | 0;
  2726. mid = (mid + Math.imul(ah1, bl8)) | 0;
  2727. hi = (hi + Math.imul(ah1, bh8)) | 0;
  2728. lo = (lo + Math.imul(al0, bl9)) | 0;
  2729. mid = (mid + Math.imul(al0, bh9)) | 0;
  2730. mid = (mid + Math.imul(ah0, bl9)) | 0;
  2731. hi = (hi + Math.imul(ah0, bh9)) | 0;
  2732. var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2733. c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
  2734. w9 &= 0x3ffffff;
  2735. /* k = 10 */
  2736. lo = Math.imul(al9, bl1);
  2737. mid = Math.imul(al9, bh1);
  2738. mid = (mid + Math.imul(ah9, bl1)) | 0;
  2739. hi = Math.imul(ah9, bh1);
  2740. lo = (lo + Math.imul(al8, bl2)) | 0;
  2741. mid = (mid + Math.imul(al8, bh2)) | 0;
  2742. mid = (mid + Math.imul(ah8, bl2)) | 0;
  2743. hi = (hi + Math.imul(ah8, bh2)) | 0;
  2744. lo = (lo + Math.imul(al7, bl3)) | 0;
  2745. mid = (mid + Math.imul(al7, bh3)) | 0;
  2746. mid = (mid + Math.imul(ah7, bl3)) | 0;
  2747. hi = (hi + Math.imul(ah7, bh3)) | 0;
  2748. lo = (lo + Math.imul(al6, bl4)) | 0;
  2749. mid = (mid + Math.imul(al6, bh4)) | 0;
  2750. mid = (mid + Math.imul(ah6, bl4)) | 0;
  2751. hi = (hi + Math.imul(ah6, bh4)) | 0;
  2752. lo = (lo + Math.imul(al5, bl5)) | 0;
  2753. mid = (mid + Math.imul(al5, bh5)) | 0;
  2754. mid = (mid + Math.imul(ah5, bl5)) | 0;
  2755. hi = (hi + Math.imul(ah5, bh5)) | 0;
  2756. lo = (lo + Math.imul(al4, bl6)) | 0;
  2757. mid = (mid + Math.imul(al4, bh6)) | 0;
  2758. mid = (mid + Math.imul(ah4, bl6)) | 0;
  2759. hi = (hi + Math.imul(ah4, bh6)) | 0;
  2760. lo = (lo + Math.imul(al3, bl7)) | 0;
  2761. mid = (mid + Math.imul(al3, bh7)) | 0;
  2762. mid = (mid + Math.imul(ah3, bl7)) | 0;
  2763. hi = (hi + Math.imul(ah3, bh7)) | 0;
  2764. lo = (lo + Math.imul(al2, bl8)) | 0;
  2765. mid = (mid + Math.imul(al2, bh8)) | 0;
  2766. mid = (mid + Math.imul(ah2, bl8)) | 0;
  2767. hi = (hi + Math.imul(ah2, bh8)) | 0;
  2768. lo = (lo + Math.imul(al1, bl9)) | 0;
  2769. mid = (mid + Math.imul(al1, bh9)) | 0;
  2770. mid = (mid + Math.imul(ah1, bl9)) | 0;
  2771. hi = (hi + Math.imul(ah1, bh9)) | 0;
  2772. var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2773. c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
  2774. w10 &= 0x3ffffff;
  2775. /* k = 11 */
  2776. lo = Math.imul(al9, bl2);
  2777. mid = Math.imul(al9, bh2);
  2778. mid = (mid + Math.imul(ah9, bl2)) | 0;
  2779. hi = Math.imul(ah9, bh2);
  2780. lo = (lo + Math.imul(al8, bl3)) | 0;
  2781. mid = (mid + Math.imul(al8, bh3)) | 0;
  2782. mid = (mid + Math.imul(ah8, bl3)) | 0;
  2783. hi = (hi + Math.imul(ah8, bh3)) | 0;
  2784. lo = (lo + Math.imul(al7, bl4)) | 0;
  2785. mid = (mid + Math.imul(al7, bh4)) | 0;
  2786. mid = (mid + Math.imul(ah7, bl4)) | 0;
  2787. hi = (hi + Math.imul(ah7, bh4)) | 0;
  2788. lo = (lo + Math.imul(al6, bl5)) | 0;
  2789. mid = (mid + Math.imul(al6, bh5)) | 0;
  2790. mid = (mid + Math.imul(ah6, bl5)) | 0;
  2791. hi = (hi + Math.imul(ah6, bh5)) | 0;
  2792. lo = (lo + Math.imul(al5, bl6)) | 0;
  2793. mid = (mid + Math.imul(al5, bh6)) | 0;
  2794. mid = (mid + Math.imul(ah5, bl6)) | 0;
  2795. hi = (hi + Math.imul(ah5, bh6)) | 0;
  2796. lo = (lo + Math.imul(al4, bl7)) | 0;
  2797. mid = (mid + Math.imul(al4, bh7)) | 0;
  2798. mid = (mid + Math.imul(ah4, bl7)) | 0;
  2799. hi = (hi + Math.imul(ah4, bh7)) | 0;
  2800. lo = (lo + Math.imul(al3, bl8)) | 0;
  2801. mid = (mid + Math.imul(al3, bh8)) | 0;
  2802. mid = (mid + Math.imul(ah3, bl8)) | 0;
  2803. hi = (hi + Math.imul(ah3, bh8)) | 0;
  2804. lo = (lo + Math.imul(al2, bl9)) | 0;
  2805. mid = (mid + Math.imul(al2, bh9)) | 0;
  2806. mid = (mid + Math.imul(ah2, bl9)) | 0;
  2807. hi = (hi + Math.imul(ah2, bh9)) | 0;
  2808. var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2809. c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
  2810. w11 &= 0x3ffffff;
  2811. /* k = 12 */
  2812. lo = Math.imul(al9, bl3);
  2813. mid = Math.imul(al9, bh3);
  2814. mid = (mid + Math.imul(ah9, bl3)) | 0;
  2815. hi = Math.imul(ah9, bh3);
  2816. lo = (lo + Math.imul(al8, bl4)) | 0;
  2817. mid = (mid + Math.imul(al8, bh4)) | 0;
  2818. mid = (mid + Math.imul(ah8, bl4)) | 0;
  2819. hi = (hi + Math.imul(ah8, bh4)) | 0;
  2820. lo = (lo + Math.imul(al7, bl5)) | 0;
  2821. mid = (mid + Math.imul(al7, bh5)) | 0;
  2822. mid = (mid + Math.imul(ah7, bl5)) | 0;
  2823. hi = (hi + Math.imul(ah7, bh5)) | 0;
  2824. lo = (lo + Math.imul(al6, bl6)) | 0;
  2825. mid = (mid + Math.imul(al6, bh6)) | 0;
  2826. mid = (mid + Math.imul(ah6, bl6)) | 0;
  2827. hi = (hi + Math.imul(ah6, bh6)) | 0;
  2828. lo = (lo + Math.imul(al5, bl7)) | 0;
  2829. mid = (mid + Math.imul(al5, bh7)) | 0;
  2830. mid = (mid + Math.imul(ah5, bl7)) | 0;
  2831. hi = (hi + Math.imul(ah5, bh7)) | 0;
  2832. lo = (lo + Math.imul(al4, bl8)) | 0;
  2833. mid = (mid + Math.imul(al4, bh8)) | 0;
  2834. mid = (mid + Math.imul(ah4, bl8)) | 0;
  2835. hi = (hi + Math.imul(ah4, bh8)) | 0;
  2836. lo = (lo + Math.imul(al3, bl9)) | 0;
  2837. mid = (mid + Math.imul(al3, bh9)) | 0;
  2838. mid = (mid + Math.imul(ah3, bl9)) | 0;
  2839. hi = (hi + Math.imul(ah3, bh9)) | 0;
  2840. var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2841. c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
  2842. w12 &= 0x3ffffff;
  2843. /* k = 13 */
  2844. lo = Math.imul(al9, bl4);
  2845. mid = Math.imul(al9, bh4);
  2846. mid = (mid + Math.imul(ah9, bl4)) | 0;
  2847. hi = Math.imul(ah9, bh4);
  2848. lo = (lo + Math.imul(al8, bl5)) | 0;
  2849. mid = (mid + Math.imul(al8, bh5)) | 0;
  2850. mid = (mid + Math.imul(ah8, bl5)) | 0;
  2851. hi = (hi + Math.imul(ah8, bh5)) | 0;
  2852. lo = (lo + Math.imul(al7, bl6)) | 0;
  2853. mid = (mid + Math.imul(al7, bh6)) | 0;
  2854. mid = (mid + Math.imul(ah7, bl6)) | 0;
  2855. hi = (hi + Math.imul(ah7, bh6)) | 0;
  2856. lo = (lo + Math.imul(al6, bl7)) | 0;
  2857. mid = (mid + Math.imul(al6, bh7)) | 0;
  2858. mid = (mid + Math.imul(ah6, bl7)) | 0;
  2859. hi = (hi + Math.imul(ah6, bh7)) | 0;
  2860. lo = (lo + Math.imul(al5, bl8)) | 0;
  2861. mid = (mid + Math.imul(al5, bh8)) | 0;
  2862. mid = (mid + Math.imul(ah5, bl8)) | 0;
  2863. hi = (hi + Math.imul(ah5, bh8)) | 0;
  2864. lo = (lo + Math.imul(al4, bl9)) | 0;
  2865. mid = (mid + Math.imul(al4, bh9)) | 0;
  2866. mid = (mid + Math.imul(ah4, bl9)) | 0;
  2867. hi = (hi + Math.imul(ah4, bh9)) | 0;
  2868. var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2869. c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
  2870. w13 &= 0x3ffffff;
  2871. /* k = 14 */
  2872. lo = Math.imul(al9, bl5);
  2873. mid = Math.imul(al9, bh5);
  2874. mid = (mid + Math.imul(ah9, bl5)) | 0;
  2875. hi = Math.imul(ah9, bh5);
  2876. lo = (lo + Math.imul(al8, bl6)) | 0;
  2877. mid = (mid + Math.imul(al8, bh6)) | 0;
  2878. mid = (mid + Math.imul(ah8, bl6)) | 0;
  2879. hi = (hi + Math.imul(ah8, bh6)) | 0;
  2880. lo = (lo + Math.imul(al7, bl7)) | 0;
  2881. mid = (mid + Math.imul(al7, bh7)) | 0;
  2882. mid = (mid + Math.imul(ah7, bl7)) | 0;
  2883. hi = (hi + Math.imul(ah7, bh7)) | 0;
  2884. lo = (lo + Math.imul(al6, bl8)) | 0;
  2885. mid = (mid + Math.imul(al6, bh8)) | 0;
  2886. mid = (mid + Math.imul(ah6, bl8)) | 0;
  2887. hi = (hi + Math.imul(ah6, bh8)) | 0;
  2888. lo = (lo + Math.imul(al5, bl9)) | 0;
  2889. mid = (mid + Math.imul(al5, bh9)) | 0;
  2890. mid = (mid + Math.imul(ah5, bl9)) | 0;
  2891. hi = (hi + Math.imul(ah5, bh9)) | 0;
  2892. var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2893. c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
  2894. w14 &= 0x3ffffff;
  2895. /* k = 15 */
  2896. lo = Math.imul(al9, bl6);
  2897. mid = Math.imul(al9, bh6);
  2898. mid = (mid + Math.imul(ah9, bl6)) | 0;
  2899. hi = Math.imul(ah9, bh6);
  2900. lo = (lo + Math.imul(al8, bl7)) | 0;
  2901. mid = (mid + Math.imul(al8, bh7)) | 0;
  2902. mid = (mid + Math.imul(ah8, bl7)) | 0;
  2903. hi = (hi + Math.imul(ah8, bh7)) | 0;
  2904. lo = (lo + Math.imul(al7, bl8)) | 0;
  2905. mid = (mid + Math.imul(al7, bh8)) | 0;
  2906. mid = (mid + Math.imul(ah7, bl8)) | 0;
  2907. hi = (hi + Math.imul(ah7, bh8)) | 0;
  2908. lo = (lo + Math.imul(al6, bl9)) | 0;
  2909. mid = (mid + Math.imul(al6, bh9)) | 0;
  2910. mid = (mid + Math.imul(ah6, bl9)) | 0;
  2911. hi = (hi + Math.imul(ah6, bh9)) | 0;
  2912. var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2913. c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
  2914. w15 &= 0x3ffffff;
  2915. /* k = 16 */
  2916. lo = Math.imul(al9, bl7);
  2917. mid = Math.imul(al9, bh7);
  2918. mid = (mid + Math.imul(ah9, bl7)) | 0;
  2919. hi = Math.imul(ah9, bh7);
  2920. lo = (lo + Math.imul(al8, bl8)) | 0;
  2921. mid = (mid + Math.imul(al8, bh8)) | 0;
  2922. mid = (mid + Math.imul(ah8, bl8)) | 0;
  2923. hi = (hi + Math.imul(ah8, bh8)) | 0;
  2924. lo = (lo + Math.imul(al7, bl9)) | 0;
  2925. mid = (mid + Math.imul(al7, bh9)) | 0;
  2926. mid = (mid + Math.imul(ah7, bl9)) | 0;
  2927. hi = (hi + Math.imul(ah7, bh9)) | 0;
  2928. var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2929. c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
  2930. w16 &= 0x3ffffff;
  2931. /* k = 17 */
  2932. lo = Math.imul(al9, bl8);
  2933. mid = Math.imul(al9, bh8);
  2934. mid = (mid + Math.imul(ah9, bl8)) | 0;
  2935. hi = Math.imul(ah9, bh8);
  2936. lo = (lo + Math.imul(al8, bl9)) | 0;
  2937. mid = (mid + Math.imul(al8, bh9)) | 0;
  2938. mid = (mid + Math.imul(ah8, bl9)) | 0;
  2939. hi = (hi + Math.imul(ah8, bh9)) | 0;
  2940. var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2941. c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
  2942. w17 &= 0x3ffffff;
  2943. /* k = 18 */
  2944. lo = Math.imul(al9, bl9);
  2945. mid = Math.imul(al9, bh9);
  2946. mid = (mid + Math.imul(ah9, bl9)) | 0;
  2947. hi = Math.imul(ah9, bh9);
  2948. var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  2949. c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
  2950. w18 &= 0x3ffffff;
  2951. o[0] = w0;
  2952. o[1] = w1;
  2953. o[2] = w2;
  2954. o[3] = w3;
  2955. o[4] = w4;
  2956. o[5] = w5;
  2957. o[6] = w6;
  2958. o[7] = w7;
  2959. o[8] = w8;
  2960. o[9] = w9;
  2961. o[10] = w10;
  2962. o[11] = w11;
  2963. o[12] = w12;
  2964. o[13] = w13;
  2965. o[14] = w14;
  2966. o[15] = w15;
  2967. o[16] = w16;
  2968. o[17] = w17;
  2969. o[18] = w18;
  2970. if (c !== 0) {
  2971. o[19] = c;
  2972. out.length++;
  2973. }
  2974. return out;
  2975. };
  2976. // Polyfill comb
  2977. if (!Math.imul) {
  2978. comb10MulTo = smallMulTo;
  2979. }
  2980. function bigMulTo (self, num, out) {
  2981. out.negative = num.negative ^ self.negative;
  2982. out.length = self.length + num.length;
  2983. var carry = 0;
  2984. var hncarry = 0;
  2985. for (var k = 0; k < out.length - 1; k++) {
  2986. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  2987. // note that ncarry could be >= 0x3ffffff
  2988. var ncarry = hncarry;
  2989. hncarry = 0;
  2990. var rword = carry & 0x3ffffff;
  2991. var maxJ = Math.min(k, num.length - 1);
  2992. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  2993. var i = k - j;
  2994. var a = self.words[i] | 0;
  2995. var b = num.words[j] | 0;
  2996. var r = a * b;
  2997. var lo = r & 0x3ffffff;
  2998. ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
  2999. lo = (lo + rword) | 0;
  3000. rword = lo & 0x3ffffff;
  3001. ncarry = (ncarry + (lo >>> 26)) | 0;
  3002. hncarry += ncarry >>> 26;
  3003. ncarry &= 0x3ffffff;
  3004. }
  3005. out.words[k] = rword;
  3006. carry = ncarry;
  3007. ncarry = hncarry;
  3008. }
  3009. if (carry !== 0) {
  3010. out.words[k] = carry;
  3011. } else {
  3012. out.length--;
  3013. }
  3014. return out.strip();
  3015. }
  3016. function jumboMulTo (self, num, out) {
  3017. var fftm = new FFTM();
  3018. return fftm.mulp(self, num, out);
  3019. }
  3020. BN.prototype.mulTo = function mulTo (num, out) {
  3021. var res;
  3022. var len = this.length + num.length;
  3023. if (this.length === 10 && num.length === 10) {
  3024. res = comb10MulTo(this, num, out);
  3025. } else if (len < 63) {
  3026. res = smallMulTo(this, num, out);
  3027. } else if (len < 1024) {
  3028. res = bigMulTo(this, num, out);
  3029. } else {
  3030. res = jumboMulTo(this, num, out);
  3031. }
  3032. return res;
  3033. };
  3034. // Cooley-Tukey algorithm for FFT
  3035. // slightly revisited to rely on looping instead of recursion
  3036. function FFTM (x, y) {
  3037. this.x = x;
  3038. this.y = y;
  3039. }
  3040. FFTM.prototype.makeRBT = function makeRBT (N) {
  3041. var t = new Array(N);
  3042. var l = BN.prototype._countBits(N) - 1;
  3043. for (var i = 0; i < N; i++) {
  3044. t[i] = this.revBin(i, l, N);
  3045. }
  3046. return t;
  3047. };
  3048. // Returns binary-reversed representation of `x`
  3049. FFTM.prototype.revBin = function revBin (x, l, N) {
  3050. if (x === 0 || x === N - 1) return x;
  3051. var rb = 0;
  3052. for (var i = 0; i < l; i++) {
  3053. rb |= (x & 1) << (l - i - 1);
  3054. x >>= 1;
  3055. }
  3056. return rb;
  3057. };
  3058. // Performs "tweedling" phase, therefore 'emulating'
  3059. // behaviour of the recursive algorithm
  3060. FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
  3061. for (var i = 0; i < N; i++) {
  3062. rtws[i] = rws[rbt[i]];
  3063. itws[i] = iws[rbt[i]];
  3064. }
  3065. };
  3066. FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
  3067. this.permute(rbt, rws, iws, rtws, itws, N);
  3068. for (var s = 1; s < N; s <<= 1) {
  3069. var l = s << 1;
  3070. var rtwdf = Math.cos(2 * Math.PI / l);
  3071. var itwdf = Math.sin(2 * Math.PI / l);
  3072. for (var p = 0; p < N; p += l) {
  3073. var rtwdf_ = rtwdf;
  3074. var itwdf_ = itwdf;
  3075. for (var j = 0; j < s; j++) {
  3076. var re = rtws[p + j];
  3077. var ie = itws[p + j];
  3078. var ro = rtws[p + j + s];
  3079. var io = itws[p + j + s];
  3080. var rx = rtwdf_ * ro - itwdf_ * io;
  3081. io = rtwdf_ * io + itwdf_ * ro;
  3082. ro = rx;
  3083. rtws[p + j] = re + ro;
  3084. itws[p + j] = ie + io;
  3085. rtws[p + j + s] = re - ro;
  3086. itws[p + j + s] = ie - io;
  3087. /* jshint maxdepth : false */
  3088. if (j !== l) {
  3089. rx = rtwdf * rtwdf_ - itwdf * itwdf_;
  3090. itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
  3091. rtwdf_ = rx;
  3092. }
  3093. }
  3094. }
  3095. }
  3096. };
  3097. FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
  3098. var N = Math.max(m, n) | 1;
  3099. var odd = N & 1;
  3100. var i = 0;
  3101. for (N = N / 2 | 0; N; N = N >>> 1) {
  3102. i++;
  3103. }
  3104. return 1 << i + 1 + odd;
  3105. };
  3106. FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
  3107. if (N <= 1) return;
  3108. for (var i = 0; i < N / 2; i++) {
  3109. var t = rws[i];
  3110. rws[i] = rws[N - i - 1];
  3111. rws[N - i - 1] = t;
  3112. t = iws[i];
  3113. iws[i] = -iws[N - i - 1];
  3114. iws[N - i - 1] = -t;
  3115. }
  3116. };
  3117. FFTM.prototype.normalize13b = function normalize13b (ws, N) {
  3118. var carry = 0;
  3119. for (var i = 0; i < N / 2; i++) {
  3120. var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
  3121. Math.round(ws[2 * i] / N) +
  3122. carry;
  3123. ws[i] = w & 0x3ffffff;
  3124. if (w < 0x4000000) {
  3125. carry = 0;
  3126. } else {
  3127. carry = w / 0x4000000 | 0;
  3128. }
  3129. }
  3130. return ws;
  3131. };
  3132. FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
  3133. var carry = 0;
  3134. for (var i = 0; i < len; i++) {
  3135. carry = carry + (ws[i] | 0);
  3136. rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
  3137. rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
  3138. }
  3139. // Pad with zeroes
  3140. for (i = 2 * len; i < N; ++i) {
  3141. rws[i] = 0;
  3142. }
  3143. assert(carry === 0);
  3144. assert((carry & ~0x1fff) === 0);
  3145. };
  3146. FFTM.prototype.stub = function stub (N) {
  3147. var ph = new Array(N);
  3148. for (var i = 0; i < N; i++) {
  3149. ph[i] = 0;
  3150. }
  3151. return ph;
  3152. };
  3153. FFTM.prototype.mulp = function mulp (x, y, out) {
  3154. var N = 2 * this.guessLen13b(x.length, y.length);
  3155. var rbt = this.makeRBT(N);
  3156. var _ = this.stub(N);
  3157. var rws = new Array(N);
  3158. var rwst = new Array(N);
  3159. var iwst = new Array(N);
  3160. var nrws = new Array(N);
  3161. var nrwst = new Array(N);
  3162. var niwst = new Array(N);
  3163. var rmws = out.words;
  3164. rmws.length = N;
  3165. this.convert13b(x.words, x.length, rws, N);
  3166. this.convert13b(y.words, y.length, nrws, N);
  3167. this.transform(rws, _, rwst, iwst, N, rbt);
  3168. this.transform(nrws, _, nrwst, niwst, N, rbt);
  3169. for (var i = 0; i < N; i++) {
  3170. var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
  3171. iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
  3172. rwst[i] = rx;
  3173. }
  3174. this.conjugate(rwst, iwst, N);
  3175. this.transform(rwst, iwst, rmws, _, N, rbt);
  3176. this.conjugate(rmws, _, N);
  3177. this.normalize13b(rmws, N);
  3178. out.negative = x.negative ^ y.negative;
  3179. out.length = x.length + y.length;
  3180. return out.strip();
  3181. };
  3182. // Multiply `this` by `num`
  3183. BN.prototype.mul = function mul (num) {
  3184. var out = new BN(null);
  3185. out.words = new Array(this.length + num.length);
  3186. return this.mulTo(num, out);
  3187. };
  3188. // Multiply employing FFT
  3189. BN.prototype.mulf = function mulf (num) {
  3190. var out = new BN(null);
  3191. out.words = new Array(this.length + num.length);
  3192. return jumboMulTo(this, num, out);
  3193. };
  3194. // In-place Multiplication
  3195. BN.prototype.imul = function imul (num) {
  3196. return this.clone().mulTo(num, this);
  3197. };
  3198. BN.prototype.imuln = function imuln (num) {
  3199. assert(typeof num === 'number');
  3200. assert(num < 0x4000000);
  3201. // Carry
  3202. var carry = 0;
  3203. for (var i = 0; i < this.length; i++) {
  3204. var w = (this.words[i] | 0) * num;
  3205. var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
  3206. carry >>= 26;
  3207. carry += (w / 0x4000000) | 0;
  3208. // NOTE: lo is 27bit maximum
  3209. carry += lo >>> 26;
  3210. this.words[i] = lo & 0x3ffffff;
  3211. }
  3212. if (carry !== 0) {
  3213. this.words[i] = carry;
  3214. this.length++;
  3215. }
  3216. return this;
  3217. };
  3218. BN.prototype.muln = function muln (num) {
  3219. return this.clone().imuln(num);
  3220. };
  3221. // `this` * `this`
  3222. BN.prototype.sqr = function sqr () {
  3223. return this.mul(this);
  3224. };
  3225. // `this` * `this` in-place
  3226. BN.prototype.isqr = function isqr () {
  3227. return this.imul(this.clone());
  3228. };
  3229. // Math.pow(`this`, `num`)
  3230. BN.prototype.pow = function pow (num) {
  3231. var w = toBitArray(num);
  3232. if (w.length === 0) return new BN(1);
  3233. // Skip leading zeroes
  3234. var res = this;
  3235. for (var i = 0; i < w.length; i++, res = res.sqr()) {
  3236. if (w[i] !== 0) break;
  3237. }
  3238. if (++i < w.length) {
  3239. for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
  3240. if (w[i] === 0) continue;
  3241. res = res.mul(q);
  3242. }
  3243. }
  3244. return res;
  3245. };
  3246. // Shift-left in-place
  3247. BN.prototype.iushln = function iushln (bits) {
  3248. assert(typeof bits === 'number' && bits >= 0);
  3249. var r = bits % 26;
  3250. var s = (bits - r) / 26;
  3251. var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
  3252. var i;
  3253. if (r !== 0) {
  3254. var carry = 0;
  3255. for (i = 0; i < this.length; i++) {
  3256. var newCarry = this.words[i] & carryMask;
  3257. var c = ((this.words[i] | 0) - newCarry) << r;
  3258. this.words[i] = c | carry;
  3259. carry = newCarry >>> (26 - r);
  3260. }
  3261. if (carry) {
  3262. this.words[i] = carry;
  3263. this.length++;
  3264. }
  3265. }
  3266. if (s !== 0) {
  3267. for (i = this.length - 1; i >= 0; i--) {
  3268. this.words[i + s] = this.words[i];
  3269. }
  3270. for (i = 0; i < s; i++) {
  3271. this.words[i] = 0;
  3272. }
  3273. this.length += s;
  3274. }
  3275. return this.strip();
  3276. };
  3277. BN.prototype.ishln = function ishln (bits) {
  3278. // TODO(indutny): implement me
  3279. assert(this.negative === 0);
  3280. return this.iushln(bits);
  3281. };
  3282. // Shift-right in-place
  3283. // NOTE: `hint` is a lowest bit before trailing zeroes
  3284. // NOTE: if `extended` is present - it will be filled with destroyed bits
  3285. BN.prototype.iushrn = function iushrn (bits, hint, extended) {
  3286. assert(typeof bits === 'number' && bits >= 0);
  3287. var h;
  3288. if (hint) {
  3289. h = (hint - (hint % 26)) / 26;
  3290. } else {
  3291. h = 0;
  3292. }
  3293. var r = bits % 26;
  3294. var s = Math.min((bits - r) / 26, this.length);
  3295. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  3296. var maskedWords = extended;
  3297. h -= s;
  3298. h = Math.max(0, h);
  3299. // Extended mode, copy masked part
  3300. if (maskedWords) {
  3301. for (var i = 0; i < s; i++) {
  3302. maskedWords.words[i] = this.words[i];
  3303. }
  3304. maskedWords.length = s;
  3305. }
  3306. if (s === 0) {
  3307. // No-op, we should not move anything at all
  3308. } else if (this.length > s) {
  3309. this.length -= s;
  3310. for (i = 0; i < this.length; i++) {
  3311. this.words[i] = this.words[i + s];
  3312. }
  3313. } else {
  3314. this.words[0] = 0;
  3315. this.length = 1;
  3316. }
  3317. var carry = 0;
  3318. for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
  3319. var word = this.words[i] | 0;
  3320. this.words[i] = (carry << (26 - r)) | (word >>> r);
  3321. carry = word & mask;
  3322. }
  3323. // Push carried bits as a mask
  3324. if (maskedWords && carry !== 0) {
  3325. maskedWords.words[maskedWords.length++] = carry;
  3326. }
  3327. if (this.length === 0) {
  3328. this.words[0] = 0;
  3329. this.length = 1;
  3330. }
  3331. return this.strip();
  3332. };
  3333. BN.prototype.ishrn = function ishrn (bits, hint, extended) {
  3334. // TODO(indutny): implement me
  3335. assert(this.negative === 0);
  3336. return this.iushrn(bits, hint, extended);
  3337. };
  3338. // Shift-left
  3339. BN.prototype.shln = function shln (bits) {
  3340. return this.clone().ishln(bits);
  3341. };
  3342. BN.prototype.ushln = function ushln (bits) {
  3343. return this.clone().iushln(bits);
  3344. };
  3345. // Shift-right
  3346. BN.prototype.shrn = function shrn (bits) {
  3347. return this.clone().ishrn(bits);
  3348. };
  3349. BN.prototype.ushrn = function ushrn (bits) {
  3350. return this.clone().iushrn(bits);
  3351. };
  3352. // Test if n bit is set
  3353. BN.prototype.testn = function testn (bit) {
  3354. assert(typeof bit === 'number' && bit >= 0);
  3355. var r = bit % 26;
  3356. var s = (bit - r) / 26;
  3357. var q = 1 << r;
  3358. // Fast case: bit is much higher than all existing words
  3359. if (this.length <= s) return false;
  3360. // Check bit and return
  3361. var w = this.words[s];
  3362. return !!(w & q);
  3363. };
  3364. // Return only lowers bits of number (in-place)
  3365. BN.prototype.imaskn = function imaskn (bits) {
  3366. assert(typeof bits === 'number' && bits >= 0);
  3367. var r = bits % 26;
  3368. var s = (bits - r) / 26;
  3369. assert(this.negative === 0, 'imaskn works only with positive numbers');
  3370. if (this.length <= s) {
  3371. return this;
  3372. }
  3373. if (r !== 0) {
  3374. s++;
  3375. }
  3376. this.length = Math.min(s, this.length);
  3377. if (r !== 0) {
  3378. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  3379. this.words[this.length - 1] &= mask;
  3380. }
  3381. return this.strip();
  3382. };
  3383. // Return only lowers bits of number
  3384. BN.prototype.maskn = function maskn (bits) {
  3385. return this.clone().imaskn(bits);
  3386. };
  3387. // Add plain number `num` to `this`
  3388. BN.prototype.iaddn = function iaddn (num) {
  3389. assert(typeof num === 'number');
  3390. assert(num < 0x4000000);
  3391. if (num < 0) return this.isubn(-num);
  3392. // Possible sign change
  3393. if (this.negative !== 0) {
  3394. if (this.length === 1 && (this.words[0] | 0) < num) {
  3395. this.words[0] = num - (this.words[0] | 0);
  3396. this.negative = 0;
  3397. return this;
  3398. }
  3399. this.negative = 0;
  3400. this.isubn(num);
  3401. this.negative = 1;
  3402. return this;
  3403. }
  3404. // Add without checks
  3405. return this._iaddn(num);
  3406. };
  3407. BN.prototype._iaddn = function _iaddn (num) {
  3408. this.words[0] += num;
  3409. // Carry
  3410. for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
  3411. this.words[i] -= 0x4000000;
  3412. if (i === this.length - 1) {
  3413. this.words[i + 1] = 1;
  3414. } else {
  3415. this.words[i + 1]++;
  3416. }
  3417. }
  3418. this.length = Math.max(this.length, i + 1);
  3419. return this;
  3420. };
  3421. // Subtract plain number `num` from `this`
  3422. BN.prototype.isubn = function isubn (num) {
  3423. assert(typeof num === 'number');
  3424. assert(num < 0x4000000);
  3425. if (num < 0) return this.iaddn(-num);
  3426. if (this.negative !== 0) {
  3427. this.negative = 0;
  3428. this.iaddn(num);
  3429. this.negative = 1;
  3430. return this;
  3431. }
  3432. this.words[0] -= num;
  3433. if (this.length === 1 && this.words[0] < 0) {
  3434. this.words[0] = -this.words[0];
  3435. this.negative = 1;
  3436. } else {
  3437. // Carry
  3438. for (var i = 0; i < this.length && this.words[i] < 0; i++) {
  3439. this.words[i] += 0x4000000;
  3440. this.words[i + 1] -= 1;
  3441. }
  3442. }
  3443. return this.strip();
  3444. };
  3445. BN.prototype.addn = function addn (num) {
  3446. return this.clone().iaddn(num);
  3447. };
  3448. BN.prototype.subn = function subn (num) {
  3449. return this.clone().isubn(num);
  3450. };
  3451. BN.prototype.iabs = function iabs () {
  3452. this.negative = 0;
  3453. return this;
  3454. };
  3455. BN.prototype.abs = function abs () {
  3456. return this.clone().iabs();
  3457. };
  3458. BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
  3459. var len = num.length + shift;
  3460. var i;
  3461. this._expand(len);
  3462. var w;
  3463. var carry = 0;
  3464. for (i = 0; i < num.length; i++) {
  3465. w = (this.words[i + shift] | 0) + carry;
  3466. var right = (num.words[i] | 0) * mul;
  3467. w -= right & 0x3ffffff;
  3468. carry = (w >> 26) - ((right / 0x4000000) | 0);
  3469. this.words[i + shift] = w & 0x3ffffff;
  3470. }
  3471. for (; i < this.length - shift; i++) {
  3472. w = (this.words[i + shift] | 0) + carry;
  3473. carry = w >> 26;
  3474. this.words[i + shift] = w & 0x3ffffff;
  3475. }
  3476. if (carry === 0) return this.strip();
  3477. // Subtraction overflow
  3478. assert(carry === -1);
  3479. carry = 0;
  3480. for (i = 0; i < this.length; i++) {
  3481. w = -(this.words[i] | 0) + carry;
  3482. carry = w >> 26;
  3483. this.words[i] = w & 0x3ffffff;
  3484. }
  3485. this.negative = 1;
  3486. return this.strip();
  3487. };
  3488. BN.prototype._wordDiv = function _wordDiv (num, mode) {
  3489. var shift = this.length - num.length;
  3490. var a = this.clone();
  3491. var b = num;
  3492. // Normalize
  3493. var bhi = b.words[b.length - 1] | 0;
  3494. var bhiBits = this._countBits(bhi);
  3495. shift = 26 - bhiBits;
  3496. if (shift !== 0) {
  3497. b = b.ushln(shift);
  3498. a.iushln(shift);
  3499. bhi = b.words[b.length - 1] | 0;
  3500. }
  3501. // Initialize quotient
  3502. var m = a.length - b.length;
  3503. var q;
  3504. if (mode !== 'mod') {
  3505. q = new BN(null);
  3506. q.length = m + 1;
  3507. q.words = new Array(q.length);
  3508. for (var i = 0; i < q.length; i++) {
  3509. q.words[i] = 0;
  3510. }
  3511. }
  3512. var diff = a.clone()._ishlnsubmul(b, 1, m);
  3513. if (diff.negative === 0) {
  3514. a = diff;
  3515. if (q) {
  3516. q.words[m] = 1;
  3517. }
  3518. }
  3519. for (var j = m - 1; j >= 0; j--) {
  3520. var qj = (a.words[b.length + j] | 0) * 0x4000000 +
  3521. (a.words[b.length + j - 1] | 0);
  3522. // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
  3523. // (0x7ffffff)
  3524. qj = Math.min((qj / bhi) | 0, 0x3ffffff);
  3525. a._ishlnsubmul(b, qj, j);
  3526. while (a.negative !== 0) {
  3527. qj--;
  3528. a.negative = 0;
  3529. a._ishlnsubmul(b, 1, j);
  3530. if (!a.isZero()) {
  3531. a.negative ^= 1;
  3532. }
  3533. }
  3534. if (q) {
  3535. q.words[j] = qj;
  3536. }
  3537. }
  3538. if (q) {
  3539. q.strip();
  3540. }
  3541. a.strip();
  3542. // Denormalize
  3543. if (mode !== 'div' && shift !== 0) {
  3544. a.iushrn(shift);
  3545. }
  3546. return {
  3547. div: q || null,
  3548. mod: a
  3549. };
  3550. };
  3551. // NOTE: 1) `mode` can be set to `mod` to request mod only,
  3552. // to `div` to request div only, or be absent to
  3553. // request both div & mod
  3554. // 2) `positive` is true if unsigned mod is requested
  3555. BN.prototype.divmod = function divmod (num, mode, positive) {
  3556. assert(!num.isZero());
  3557. if (this.isZero()) {
  3558. return {
  3559. div: new BN(0),
  3560. mod: new BN(0)
  3561. };
  3562. }
  3563. var div, mod, res;
  3564. if (this.negative !== 0 && num.negative === 0) {
  3565. res = this.neg().divmod(num, mode);
  3566. if (mode !== 'mod') {
  3567. div = res.div.neg();
  3568. }
  3569. if (mode !== 'div') {
  3570. mod = res.mod.neg();
  3571. if (positive && mod.negative !== 0) {
  3572. mod.iadd(num);
  3573. }
  3574. }
  3575. return {
  3576. div: div,
  3577. mod: mod
  3578. };
  3579. }
  3580. if (this.negative === 0 && num.negative !== 0) {
  3581. res = this.divmod(num.neg(), mode);
  3582. if (mode !== 'mod') {
  3583. div = res.div.neg();
  3584. }
  3585. return {
  3586. div: div,
  3587. mod: res.mod
  3588. };
  3589. }
  3590. if ((this.negative & num.negative) !== 0) {
  3591. res = this.neg().divmod(num.neg(), mode);
  3592. if (mode !== 'div') {
  3593. mod = res.mod.neg();
  3594. if (positive && mod.negative !== 0) {
  3595. mod.isub(num);
  3596. }
  3597. }
  3598. return {
  3599. div: res.div,
  3600. mod: mod
  3601. };
  3602. }
  3603. // Both numbers are positive at this point
  3604. // Strip both numbers to approximate shift value
  3605. if (num.length > this.length || this.cmp(num) < 0) {
  3606. return {
  3607. div: new BN(0),
  3608. mod: this
  3609. };
  3610. }
  3611. // Very short reduction
  3612. if (num.length === 1) {
  3613. if (mode === 'div') {
  3614. return {
  3615. div: this.divn(num.words[0]),
  3616. mod: null
  3617. };
  3618. }
  3619. if (mode === 'mod') {
  3620. return {
  3621. div: null,
  3622. mod: new BN(this.modn(num.words[0]))
  3623. };
  3624. }
  3625. return {
  3626. div: this.divn(num.words[0]),
  3627. mod: new BN(this.modn(num.words[0]))
  3628. };
  3629. }
  3630. return this._wordDiv(num, mode);
  3631. };
  3632. // Find `this` / `num`
  3633. BN.prototype.div = function div (num) {
  3634. return this.divmod(num, 'div', false).div;
  3635. };
  3636. // Find `this` % `num`
  3637. BN.prototype.mod = function mod (num) {
  3638. return this.divmod(num, 'mod', false).mod;
  3639. };
  3640. BN.prototype.umod = function umod (num) {
  3641. return this.divmod(num, 'mod', true).mod;
  3642. };
  3643. // Find Round(`this` / `num`)
  3644. BN.prototype.divRound = function divRound (num) {
  3645. var dm = this.divmod(num);
  3646. // Fast case - exact division
  3647. if (dm.mod.isZero()) return dm.div;
  3648. var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
  3649. var half = num.ushrn(1);
  3650. var r2 = num.andln(1);
  3651. var cmp = mod.cmp(half);
  3652. // Round down
  3653. if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
  3654. // Round up
  3655. return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
  3656. };
  3657. BN.prototype.modn = function modn (num) {
  3658. assert(num <= 0x3ffffff);
  3659. var p = (1 << 26) % num;
  3660. var acc = 0;
  3661. for (var i = this.length - 1; i >= 0; i--) {
  3662. acc = (p * acc + (this.words[i] | 0)) % num;
  3663. }
  3664. return acc;
  3665. };
  3666. // In-place division by number
  3667. BN.prototype.idivn = function idivn (num) {
  3668. assert(num <= 0x3ffffff);
  3669. var carry = 0;
  3670. for (var i = this.length - 1; i >= 0; i--) {
  3671. var w = (this.words[i] | 0) + carry * 0x4000000;
  3672. this.words[i] = (w / num) | 0;
  3673. carry = w % num;
  3674. }
  3675. return this.strip();
  3676. };
  3677. BN.prototype.divn = function divn (num) {
  3678. return this.clone().idivn(num);
  3679. };
  3680. BN.prototype.egcd = function egcd (p) {
  3681. assert(p.negative === 0);
  3682. assert(!p.isZero());
  3683. var x = this;
  3684. var y = p.clone();
  3685. if (x.negative !== 0) {
  3686. x = x.umod(p);
  3687. } else {
  3688. x = x.clone();
  3689. }
  3690. // A * x + B * y = x
  3691. var A = new BN(1);
  3692. var B = new BN(0);
  3693. // C * x + D * y = y
  3694. var C = new BN(0);
  3695. var D = new BN(1);
  3696. var g = 0;
  3697. while (x.isEven() && y.isEven()) {
  3698. x.iushrn(1);
  3699. y.iushrn(1);
  3700. ++g;
  3701. }
  3702. var yp = y.clone();
  3703. var xp = x.clone();
  3704. while (!x.isZero()) {
  3705. for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  3706. if (i > 0) {
  3707. x.iushrn(i);
  3708. while (i-- > 0) {
  3709. if (A.isOdd() || B.isOdd()) {
  3710. A.iadd(yp);
  3711. B.isub(xp);
  3712. }
  3713. A.iushrn(1);
  3714. B.iushrn(1);
  3715. }
  3716. }
  3717. for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  3718. if (j > 0) {
  3719. y.iushrn(j);
  3720. while (j-- > 0) {
  3721. if (C.isOdd() || D.isOdd()) {
  3722. C.iadd(yp);
  3723. D.isub(xp);
  3724. }
  3725. C.iushrn(1);
  3726. D.iushrn(1);
  3727. }
  3728. }
  3729. if (x.cmp(y) >= 0) {
  3730. x.isub(y);
  3731. A.isub(C);
  3732. B.isub(D);
  3733. } else {
  3734. y.isub(x);
  3735. C.isub(A);
  3736. D.isub(B);
  3737. }
  3738. }
  3739. return {
  3740. a: C,
  3741. b: D,
  3742. gcd: y.iushln(g)
  3743. };
  3744. };
  3745. // This is reduced incarnation of the binary EEA
  3746. // above, designated to invert members of the
  3747. // _prime_ fields F(p) at a maximal speed
  3748. BN.prototype._invmp = function _invmp (p) {
  3749. assert(p.negative === 0);
  3750. assert(!p.isZero());
  3751. var a = this;
  3752. var b = p.clone();
  3753. if (a.negative !== 0) {
  3754. a = a.umod(p);
  3755. } else {
  3756. a = a.clone();
  3757. }
  3758. var x1 = new BN(1);
  3759. var x2 = new BN(0);
  3760. var delta = b.clone();
  3761. while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
  3762. for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  3763. if (i > 0) {
  3764. a.iushrn(i);
  3765. while (i-- > 0) {
  3766. if (x1.isOdd()) {
  3767. x1.iadd(delta);
  3768. }
  3769. x1.iushrn(1);
  3770. }
  3771. }
  3772. for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  3773. if (j > 0) {
  3774. b.iushrn(j);
  3775. while (j-- > 0) {
  3776. if (x2.isOdd()) {
  3777. x2.iadd(delta);
  3778. }
  3779. x2.iushrn(1);
  3780. }
  3781. }
  3782. if (a.cmp(b) >= 0) {
  3783. a.isub(b);
  3784. x1.isub(x2);
  3785. } else {
  3786. b.isub(a);
  3787. x2.isub(x1);
  3788. }
  3789. }
  3790. var res;
  3791. if (a.cmpn(1) === 0) {
  3792. res = x1;
  3793. } else {
  3794. res = x2;
  3795. }
  3796. if (res.cmpn(0) < 0) {
  3797. res.iadd(p);
  3798. }
  3799. return res;
  3800. };
  3801. BN.prototype.gcd = function gcd (num) {
  3802. if (this.isZero()) return num.abs();
  3803. if (num.isZero()) return this.abs();
  3804. var a = this.clone();
  3805. var b = num.clone();
  3806. a.negative = 0;
  3807. b.negative = 0;
  3808. // Remove common factor of two
  3809. for (var shift = 0; a.isEven() && b.isEven(); shift++) {
  3810. a.iushrn(1);
  3811. b.iushrn(1);
  3812. }
  3813. do {
  3814. while (a.isEven()) {
  3815. a.iushrn(1);
  3816. }
  3817. while (b.isEven()) {
  3818. b.iushrn(1);
  3819. }
  3820. var r = a.cmp(b);
  3821. if (r < 0) {
  3822. // Swap `a` and `b` to make `a` always bigger than `b`
  3823. var t = a;
  3824. a = b;
  3825. b = t;
  3826. } else if (r === 0 || b.cmpn(1) === 0) {
  3827. break;
  3828. }
  3829. a.isub(b);
  3830. } while (true);
  3831. return b.iushln(shift);
  3832. };
  3833. // Invert number in the field F(num)
  3834. BN.prototype.invm = function invm (num) {
  3835. return this.egcd(num).a.umod(num);
  3836. };
  3837. BN.prototype.isEven = function isEven () {
  3838. return (this.words[0] & 1) === 0;
  3839. };
  3840. BN.prototype.isOdd = function isOdd () {
  3841. return (this.words[0] & 1) === 1;
  3842. };
  3843. // And first word and num
  3844. BN.prototype.andln = function andln (num) {
  3845. return this.words[0] & num;
  3846. };
  3847. // Increment at the bit position in-line
  3848. BN.prototype.bincn = function bincn (bit) {
  3849. assert(typeof bit === 'number');
  3850. var r = bit % 26;
  3851. var s = (bit - r) / 26;
  3852. var q = 1 << r;
  3853. // Fast case: bit is much higher than all existing words
  3854. if (this.length <= s) {
  3855. this._expand(s + 1);
  3856. this.words[s] |= q;
  3857. return this;
  3858. }
  3859. // Add bit and propagate, if needed
  3860. var carry = q;
  3861. for (var i = s; carry !== 0 && i < this.length; i++) {
  3862. var w = this.words[i] | 0;
  3863. w += carry;
  3864. carry = w >>> 26;
  3865. w &= 0x3ffffff;
  3866. this.words[i] = w;
  3867. }
  3868. if (carry !== 0) {
  3869. this.words[i] = carry;
  3870. this.length++;
  3871. }
  3872. return this;
  3873. };
  3874. BN.prototype.isZero = function isZero () {
  3875. return this.length === 1 && this.words[0] === 0;
  3876. };
  3877. BN.prototype.cmpn = function cmpn (num) {
  3878. var negative = num < 0;
  3879. if (this.negative !== 0 && !negative) return -1;
  3880. if (this.negative === 0 && negative) return 1;
  3881. this.strip();
  3882. var res;
  3883. if (this.length > 1) {
  3884. res = 1;
  3885. } else {
  3886. if (negative) {
  3887. num = -num;
  3888. }
  3889. assert(num <= 0x3ffffff, 'Number is too big');
  3890. var w = this.words[0] | 0;
  3891. res = w === num ? 0 : w < num ? -1 : 1;
  3892. }
  3893. if (this.negative !== 0) return -res | 0;
  3894. return res;
  3895. };
  3896. // Compare two numbers and return:
  3897. // 1 - if `this` > `num`
  3898. // 0 - if `this` == `num`
  3899. // -1 - if `this` < `num`
  3900. BN.prototype.cmp = function cmp (num) {
  3901. if (this.negative !== 0 && num.negative === 0) return -1;
  3902. if (this.negative === 0 && num.negative !== 0) return 1;
  3903. var res = this.ucmp(num);
  3904. if (this.negative !== 0) return -res | 0;
  3905. return res;
  3906. };
  3907. // Unsigned comparison
  3908. BN.prototype.ucmp = function ucmp (num) {
  3909. // At this point both numbers have the same sign
  3910. if (this.length > num.length) return 1;
  3911. if (this.length < num.length) return -1;
  3912. var res = 0;
  3913. for (var i = this.length - 1; i >= 0; i--) {
  3914. var a = this.words[i] | 0;
  3915. var b = num.words[i] | 0;
  3916. if (a === b) continue;
  3917. if (a < b) {
  3918. res = -1;
  3919. } else if (a > b) {
  3920. res = 1;
  3921. }
  3922. break;
  3923. }
  3924. return res;
  3925. };
  3926. BN.prototype.gtn = function gtn (num) {
  3927. return this.cmpn(num) === 1;
  3928. };
  3929. BN.prototype.gt = function gt (num) {
  3930. return this.cmp(num) === 1;
  3931. };
  3932. BN.prototype.gten = function gten (num) {
  3933. return this.cmpn(num) >= 0;
  3934. };
  3935. BN.prototype.gte = function gte (num) {
  3936. return this.cmp(num) >= 0;
  3937. };
  3938. BN.prototype.ltn = function ltn (num) {
  3939. return this.cmpn(num) === -1;
  3940. };
  3941. BN.prototype.lt = function lt (num) {
  3942. return this.cmp(num) === -1;
  3943. };
  3944. BN.prototype.lten = function lten (num) {
  3945. return this.cmpn(num) <= 0;
  3946. };
  3947. BN.prototype.lte = function lte (num) {
  3948. return this.cmp(num) <= 0;
  3949. };
  3950. BN.prototype.eqn = function eqn (num) {
  3951. return this.cmpn(num) === 0;
  3952. };
  3953. BN.prototype.eq = function eq (num) {
  3954. return this.cmp(num) === 0;
  3955. };
  3956. //
  3957. // A reduce context, could be using montgomery or something better, depending
  3958. // on the `m` itself.
  3959. //
  3960. BN.red = function red (num) {
  3961. return new Red(num);
  3962. };
  3963. BN.prototype.toRed = function toRed (ctx) {
  3964. assert(!this.red, 'Already a number in reduction context');
  3965. assert(this.negative === 0, 'red works only with positives');
  3966. return ctx.convertTo(this)._forceRed(ctx);
  3967. };
  3968. BN.prototype.fromRed = function fromRed () {
  3969. assert(this.red, 'fromRed works only with numbers in reduction context');
  3970. return this.red.convertFrom(this);
  3971. };
  3972. BN.prototype._forceRed = function _forceRed (ctx) {
  3973. this.red = ctx;
  3974. return this;
  3975. };
  3976. BN.prototype.forceRed = function forceRed (ctx) {
  3977. assert(!this.red, 'Already a number in reduction context');
  3978. return this._forceRed(ctx);
  3979. };
  3980. BN.prototype.redAdd = function redAdd (num) {
  3981. assert(this.red, 'redAdd works only with red numbers');
  3982. return this.red.add(this, num);
  3983. };
  3984. BN.prototype.redIAdd = function redIAdd (num) {
  3985. assert(this.red, 'redIAdd works only with red numbers');
  3986. return this.red.iadd(this, num);
  3987. };
  3988. BN.prototype.redSub = function redSub (num) {
  3989. assert(this.red, 'redSub works only with red numbers');
  3990. return this.red.sub(this, num);
  3991. };
  3992. BN.prototype.redISub = function redISub (num) {
  3993. assert(this.red, 'redISub works only with red numbers');
  3994. return this.red.isub(this, num);
  3995. };
  3996. BN.prototype.redShl = function redShl (num) {
  3997. assert(this.red, 'redShl works only with red numbers');
  3998. return this.red.shl(this, num);
  3999. };
  4000. BN.prototype.redMul = function redMul (num) {
  4001. assert(this.red, 'redMul works only with red numbers');
  4002. this.red._verify2(this, num);
  4003. return this.red.mul(this, num);
  4004. };
  4005. BN.prototype.redIMul = function redIMul (num) {
  4006. assert(this.red, 'redMul works only with red numbers');
  4007. this.red._verify2(this, num);
  4008. return this.red.imul(this, num);
  4009. };
  4010. BN.prototype.redSqr = function redSqr () {
  4011. assert(this.red, 'redSqr works only with red numbers');
  4012. this.red._verify1(this);
  4013. return this.red.sqr(this);
  4014. };
  4015. BN.prototype.redISqr = function redISqr () {
  4016. assert(this.red, 'redISqr works only with red numbers');
  4017. this.red._verify1(this);
  4018. return this.red.isqr(this);
  4019. };
  4020. // Square root over p
  4021. BN.prototype.redSqrt = function redSqrt () {
  4022. assert(this.red, 'redSqrt works only with red numbers');
  4023. this.red._verify1(this);
  4024. return this.red.sqrt(this);
  4025. };
  4026. BN.prototype.redInvm = function redInvm () {
  4027. assert(this.red, 'redInvm works only with red numbers');
  4028. this.red._verify1(this);
  4029. return this.red.invm(this);
  4030. };
  4031. // Return negative clone of `this` % `red modulo`
  4032. BN.prototype.redNeg = function redNeg () {
  4033. assert(this.red, 'redNeg works only with red numbers');
  4034. this.red._verify1(this);
  4035. return this.red.neg(this);
  4036. };
  4037. BN.prototype.redPow = function redPow (num) {
  4038. assert(this.red && !num.red, 'redPow(normalNum)');
  4039. this.red._verify1(this);
  4040. return this.red.pow(this, num);
  4041. };
  4042. // Prime numbers with efficient reduction
  4043. var primes = {
  4044. k256: null,
  4045. p224: null,
  4046. p192: null,
  4047. p25519: null
  4048. };
  4049. // Pseudo-Mersenne prime
  4050. function MPrime (name, p) {
  4051. // P = 2 ^ N - K
  4052. this.name = name;
  4053. this.p = new BN(p, 16);
  4054. this.n = this.p.bitLength();
  4055. this.k = new BN(1).iushln(this.n).isub(this.p);
  4056. this.tmp = this._tmp();
  4057. }
  4058. MPrime.prototype._tmp = function _tmp () {
  4059. var tmp = new BN(null);
  4060. tmp.words = new Array(Math.ceil(this.n / 13));
  4061. return tmp;
  4062. };
  4063. MPrime.prototype.ireduce = function ireduce (num) {
  4064. // Assumes that `num` is less than `P^2`
  4065. // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
  4066. var r = num;
  4067. var rlen;
  4068. do {
  4069. this.split(r, this.tmp);
  4070. r = this.imulK(r);
  4071. r = r.iadd(this.tmp);
  4072. rlen = r.bitLength();
  4073. } while (rlen > this.n);
  4074. var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
  4075. if (cmp === 0) {
  4076. r.words[0] = 0;
  4077. r.length = 1;
  4078. } else if (cmp > 0) {
  4079. r.isub(this.p);
  4080. } else {
  4081. if (r.strip !== undefined) {
  4082. // r is BN v4 instance
  4083. r.strip();
  4084. } else {
  4085. // r is BN v5 instance
  4086. r._strip();
  4087. }
  4088. }
  4089. return r;
  4090. };
  4091. MPrime.prototype.split = function split (input, out) {
  4092. input.iushrn(this.n, 0, out);
  4093. };
  4094. MPrime.prototype.imulK = function imulK (num) {
  4095. return num.imul(this.k);
  4096. };
  4097. function K256 () {
  4098. MPrime.call(
  4099. this,
  4100. 'k256',
  4101. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
  4102. }
  4103. inherits(K256, MPrime);
  4104. K256.prototype.split = function split (input, output) {
  4105. // 256 = 9 * 26 + 22
  4106. var mask = 0x3fffff;
  4107. var outLen = Math.min(input.length, 9);
  4108. for (var i = 0; i < outLen; i++) {
  4109. output.words[i] = input.words[i];
  4110. }
  4111. output.length = outLen;
  4112. if (input.length <= 9) {
  4113. input.words[0] = 0;
  4114. input.length = 1;
  4115. return;
  4116. }
  4117. // Shift by 9 limbs
  4118. var prev = input.words[9];
  4119. output.words[output.length++] = prev & mask;
  4120. for (i = 10; i < input.length; i++) {
  4121. var next = input.words[i] | 0;
  4122. input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
  4123. prev = next;
  4124. }
  4125. prev >>>= 22;
  4126. input.words[i - 10] = prev;
  4127. if (prev === 0 && input.length > 10) {
  4128. input.length -= 10;
  4129. } else {
  4130. input.length -= 9;
  4131. }
  4132. };
  4133. K256.prototype.imulK = function imulK (num) {
  4134. // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
  4135. num.words[num.length] = 0;
  4136. num.words[num.length + 1] = 0;
  4137. num.length += 2;
  4138. // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
  4139. var lo = 0;
  4140. for (var i = 0; i < num.length; i++) {
  4141. var w = num.words[i] | 0;
  4142. lo += w * 0x3d1;
  4143. num.words[i] = lo & 0x3ffffff;
  4144. lo = w * 0x40 + ((lo / 0x4000000) | 0);
  4145. }
  4146. // Fast length reduction
  4147. if (num.words[num.length - 1] === 0) {
  4148. num.length--;
  4149. if (num.words[num.length - 1] === 0) {
  4150. num.length--;
  4151. }
  4152. }
  4153. return num;
  4154. };
  4155. function P224 () {
  4156. MPrime.call(
  4157. this,
  4158. 'p224',
  4159. 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
  4160. }
  4161. inherits(P224, MPrime);
  4162. function P192 () {
  4163. MPrime.call(
  4164. this,
  4165. 'p192',
  4166. 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
  4167. }
  4168. inherits(P192, MPrime);
  4169. function P25519 () {
  4170. // 2 ^ 255 - 19
  4171. MPrime.call(
  4172. this,
  4173. '25519',
  4174. '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
  4175. }
  4176. inherits(P25519, MPrime);
  4177. P25519.prototype.imulK = function imulK (num) {
  4178. // K = 0x13
  4179. var carry = 0;
  4180. for (var i = 0; i < num.length; i++) {
  4181. var hi = (num.words[i] | 0) * 0x13 + carry;
  4182. var lo = hi & 0x3ffffff;
  4183. hi >>>= 26;
  4184. num.words[i] = lo;
  4185. carry = hi;
  4186. }
  4187. if (carry !== 0) {
  4188. num.words[num.length++] = carry;
  4189. }
  4190. return num;
  4191. };
  4192. // Exported mostly for testing purposes, use plain name instead
  4193. BN._prime = function prime (name) {
  4194. // Cached version of prime
  4195. if (primes[name]) return primes[name];
  4196. var prime;
  4197. if (name === 'k256') {
  4198. prime = new K256();
  4199. } else if (name === 'p224') {
  4200. prime = new P224();
  4201. } else if (name === 'p192') {
  4202. prime = new P192();
  4203. } else if (name === 'p25519') {
  4204. prime = new P25519();
  4205. } else {
  4206. throw new Error('Unknown prime ' + name);
  4207. }
  4208. primes[name] = prime;
  4209. return prime;
  4210. };
  4211. //
  4212. // Base reduction engine
  4213. //
  4214. function Red (m) {
  4215. if (typeof m === 'string') {
  4216. var prime = BN._prime(m);
  4217. this.m = prime.p;
  4218. this.prime = prime;
  4219. } else {
  4220. assert(m.gtn(1), 'modulus must be greater than 1');
  4221. this.m = m;
  4222. this.prime = null;
  4223. }
  4224. }
  4225. Red.prototype._verify1 = function _verify1 (a) {
  4226. assert(a.negative === 0, 'red works only with positives');
  4227. assert(a.red, 'red works only with red numbers');
  4228. };
  4229. Red.prototype._verify2 = function _verify2 (a, b) {
  4230. assert((a.negative | b.negative) === 0, 'red works only with positives');
  4231. assert(a.red && a.red === b.red,
  4232. 'red works only with red numbers');
  4233. };
  4234. Red.prototype.imod = function imod (a) {
  4235. if (this.prime) return this.prime.ireduce(a)._forceRed(this);
  4236. return a.umod(this.m)._forceRed(this);
  4237. };
  4238. Red.prototype.neg = function neg (a) {
  4239. if (a.isZero()) {
  4240. return a.clone();
  4241. }
  4242. return this.m.sub(a)._forceRed(this);
  4243. };
  4244. Red.prototype.add = function add (a, b) {
  4245. this._verify2(a, b);
  4246. var res = a.add(b);
  4247. if (res.cmp(this.m) >= 0) {
  4248. res.isub(this.m);
  4249. }
  4250. return res._forceRed(this);
  4251. };
  4252. Red.prototype.iadd = function iadd (a, b) {
  4253. this._verify2(a, b);
  4254. var res = a.iadd(b);
  4255. if (res.cmp(this.m) >= 0) {
  4256. res.isub(this.m);
  4257. }
  4258. return res;
  4259. };
  4260. Red.prototype.sub = function sub (a, b) {
  4261. this._verify2(a, b);
  4262. var res = a.sub(b);
  4263. if (res.cmpn(0) < 0) {
  4264. res.iadd(this.m);
  4265. }
  4266. return res._forceRed(this);
  4267. };
  4268. Red.prototype.isub = function isub (a, b) {
  4269. this._verify2(a, b);
  4270. var res = a.isub(b);
  4271. if (res.cmpn(0) < 0) {
  4272. res.iadd(this.m);
  4273. }
  4274. return res;
  4275. };
  4276. Red.prototype.shl = function shl (a, num) {
  4277. this._verify1(a);
  4278. return this.imod(a.ushln(num));
  4279. };
  4280. Red.prototype.imul = function imul (a, b) {
  4281. this._verify2(a, b);
  4282. return this.imod(a.imul(b));
  4283. };
  4284. Red.prototype.mul = function mul (a, b) {
  4285. this._verify2(a, b);
  4286. return this.imod(a.mul(b));
  4287. };
  4288. Red.prototype.isqr = function isqr (a) {
  4289. return this.imul(a, a.clone());
  4290. };
  4291. Red.prototype.sqr = function sqr (a) {
  4292. return this.mul(a, a);
  4293. };
  4294. Red.prototype.sqrt = function sqrt (a) {
  4295. if (a.isZero()) return a.clone();
  4296. var mod3 = this.m.andln(3);
  4297. assert(mod3 % 2 === 1);
  4298. // Fast case
  4299. if (mod3 === 3) {
  4300. var pow = this.m.add(new BN(1)).iushrn(2);
  4301. return this.pow(a, pow);
  4302. }
  4303. // Tonelli-Shanks algorithm (Totally unoptimized and slow)
  4304. //
  4305. // Find Q and S, that Q * 2 ^ S = (P - 1)
  4306. var q = this.m.subn(1);
  4307. var s = 0;
  4308. while (!q.isZero() && q.andln(1) === 0) {
  4309. s++;
  4310. q.iushrn(1);
  4311. }
  4312. assert(!q.isZero());
  4313. var one = new BN(1).toRed(this);
  4314. var nOne = one.redNeg();
  4315. // Find quadratic non-residue
  4316. // NOTE: Max is such because of generalized Riemann hypothesis.
  4317. var lpow = this.m.subn(1).iushrn(1);
  4318. var z = this.m.bitLength();
  4319. z = new BN(2 * z * z).toRed(this);
  4320. while (this.pow(z, lpow).cmp(nOne) !== 0) {
  4321. z.redIAdd(nOne);
  4322. }
  4323. var c = this.pow(z, q);
  4324. var r = this.pow(a, q.addn(1).iushrn(1));
  4325. var t = this.pow(a, q);
  4326. var m = s;
  4327. while (t.cmp(one) !== 0) {
  4328. var tmp = t;
  4329. for (var i = 0; tmp.cmp(one) !== 0; i++) {
  4330. tmp = tmp.redSqr();
  4331. }
  4332. assert(i < m);
  4333. var b = this.pow(c, new BN(1).iushln(m - i - 1));
  4334. r = r.redMul(b);
  4335. c = b.redSqr();
  4336. t = t.redMul(c);
  4337. m = i;
  4338. }
  4339. return r;
  4340. };
  4341. Red.prototype.invm = function invm (a) {
  4342. var inv = a._invmp(this.m);
  4343. if (inv.negative !== 0) {
  4344. inv.negative = 0;
  4345. return this.imod(inv).redNeg();
  4346. } else {
  4347. return this.imod(inv);
  4348. }
  4349. };
  4350. Red.prototype.pow = function pow (a, num) {
  4351. if (num.isZero()) return new BN(1).toRed(this);
  4352. if (num.cmpn(1) === 0) return a.clone();
  4353. var windowSize = 4;
  4354. var wnd = new Array(1 << windowSize);
  4355. wnd[0] = new BN(1).toRed(this);
  4356. wnd[1] = a;
  4357. for (var i = 2; i < wnd.length; i++) {
  4358. wnd[i] = this.mul(wnd[i - 1], a);
  4359. }
  4360. var res = wnd[0];
  4361. var current = 0;
  4362. var currentLen = 0;
  4363. var start = num.bitLength() % 26;
  4364. if (start === 0) {
  4365. start = 26;
  4366. }
  4367. for (i = num.length - 1; i >= 0; i--) {
  4368. var word = num.words[i];
  4369. for (var j = start - 1; j >= 0; j--) {
  4370. var bit = (word >> j) & 1;
  4371. if (res !== wnd[0]) {
  4372. res = this.sqr(res);
  4373. }
  4374. if (bit === 0 && current === 0) {
  4375. currentLen = 0;
  4376. continue;
  4377. }
  4378. current <<= 1;
  4379. current |= bit;
  4380. currentLen++;
  4381. if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
  4382. res = this.mul(res, wnd[current]);
  4383. currentLen = 0;
  4384. current = 0;
  4385. }
  4386. start = 26;
  4387. }
  4388. return res;
  4389. };
  4390. Red.prototype.convertTo = function convertTo (num) {
  4391. var r = num.umod(this.m);
  4392. return r === num ? r.clone() : r;
  4393. };
  4394. Red.prototype.convertFrom = function convertFrom (num) {
  4395. var res = num.clone();
  4396. res.red = null;
  4397. return res;
  4398. };
  4399. //
  4400. // Montgomery method engine
  4401. //
  4402. BN.mont = function mont (num) {
  4403. return new Mont(num);
  4404. };
  4405. function Mont (m) {
  4406. Red.call(this, m);
  4407. this.shift = this.m.bitLength();
  4408. if (this.shift % 26 !== 0) {
  4409. this.shift += 26 - (this.shift % 26);
  4410. }
  4411. this.r = new BN(1).iushln(this.shift);
  4412. this.r2 = this.imod(this.r.sqr());
  4413. this.rinv = this.r._invmp(this.m);
  4414. this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
  4415. this.minv = this.minv.umod(this.r);
  4416. this.minv = this.r.sub(this.minv);
  4417. }
  4418. inherits(Mont, Red);
  4419. Mont.prototype.convertTo = function convertTo (num) {
  4420. return this.imod(num.ushln(this.shift));
  4421. };
  4422. Mont.prototype.convertFrom = function convertFrom (num) {
  4423. var r = this.imod(num.mul(this.rinv));
  4424. r.red = null;
  4425. return r;
  4426. };
  4427. Mont.prototype.imul = function imul (a, b) {
  4428. if (a.isZero() || b.isZero()) {
  4429. a.words[0] = 0;
  4430. a.length = 1;
  4431. return a;
  4432. }
  4433. var t = a.imul(b);
  4434. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  4435. var u = t.isub(c).iushrn(this.shift);
  4436. var res = u;
  4437. if (u.cmp(this.m) >= 0) {
  4438. res = u.isub(this.m);
  4439. } else if (u.cmpn(0) < 0) {
  4440. res = u.iadd(this.m);
  4441. }
  4442. return res._forceRed(this);
  4443. };
  4444. Mont.prototype.mul = function mul (a, b) {
  4445. if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
  4446. var t = a.mul(b);
  4447. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  4448. var u = t.isub(c).iushrn(this.shift);
  4449. var res = u;
  4450. if (u.cmp(this.m) >= 0) {
  4451. res = u.isub(this.m);
  4452. } else if (u.cmpn(0) < 0) {
  4453. res = u.iadd(this.m);
  4454. }
  4455. return res._forceRed(this);
  4456. };
  4457. Mont.prototype.invm = function invm (a) {
  4458. // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
  4459. var res = this.imod(a._invmp(this.m).mul(this.r2));
  4460. return res._forceRed(this);
  4461. };
  4462. })( false || module, this);
  4463. /***/ }),
  4464. /***/ 69282:
  4465. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  4466. "use strict";
  4467. /* provided dependency */ var process = __webpack_require__(34155);
  4468. // Currently in sync with Node.js lib/assert.js
  4469. // https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b
  4470. // Originally from narwhal.js (http://narwhaljs.org)
  4471. // Copyright (c) 2009 Thomas Robinson <280north.com>
  4472. //
  4473. // Permission is hereby granted, free of charge, to any person obtaining a copy
  4474. // of this software and associated documentation files (the 'Software'), to
  4475. // deal in the Software without restriction, including without limitation the
  4476. // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  4477. // sell copies of the Software, and to permit persons to whom the Software is
  4478. // furnished to do so, subject to the following conditions:
  4479. //
  4480. // The above copyright notice and this permission notice shall be included in
  4481. // all copies or substantial portions of the Software.
  4482. //
  4483. // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  4484. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  4485. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  4486. // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  4487. // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  4488. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  4489. function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
  4490. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  4491. var _require = __webpack_require__(62136),
  4492. _require$codes = _require.codes,
  4493. ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,
  4494. ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
  4495. ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,
  4496. ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,
  4497. ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
  4498. var AssertionError = __webpack_require__(25961);
  4499. var _require2 = __webpack_require__(89539),
  4500. inspect = _require2.inspect;
  4501. var _require$types = (__webpack_require__(89539).types),
  4502. isPromise = _require$types.isPromise,
  4503. isRegExp = _require$types.isRegExp;
  4504. var objectAssign = Object.assign ? Object.assign : (__webpack_require__(8091).assign);
  4505. var objectIs = Object.is ? Object.is : __webpack_require__(20609);
  4506. var errorCache = new Map();
  4507. var isDeepEqual;
  4508. var isDeepStrictEqual;
  4509. var parseExpressionAt;
  4510. var findNodeAround;
  4511. var decoder;
  4512. function lazyLoadComparison() {
  4513. var comparison = __webpack_require__(19158);
  4514. isDeepEqual = comparison.isDeepEqual;
  4515. isDeepStrictEqual = comparison.isDeepStrictEqual;
  4516. } // Escape control characters but not \n and \t to keep the line breaks and
  4517. // indentation intact.
  4518. // eslint-disable-next-line no-control-regex
  4519. var escapeSequencesRegExp = /[\x00-\x08\x0b\x0c\x0e-\x1f]/g;
  4520. var meta = (/* unused pure expression or super */ null && (["\\u0000", "\\u0001", "\\u0002", "\\u0003", "\\u0004", "\\u0005", "\\u0006", "\\u0007", '\\b', '', '', "\\u000b", '\\f', '', "\\u000e", "\\u000f", "\\u0010", "\\u0011", "\\u0012", "\\u0013", "\\u0014", "\\u0015", "\\u0016", "\\u0017", "\\u0018", "\\u0019", "\\u001a", "\\u001b", "\\u001c", "\\u001d", "\\u001e", "\\u001f"]));
  4521. var escapeFn = function escapeFn(str) {
  4522. return meta[str.charCodeAt(0)];
  4523. };
  4524. var warned = false; // The assert module provides functions that throw
  4525. // AssertionError's when particular conditions are not met. The
  4526. // assert module must conform to the following interface.
  4527. var assert = module.exports = ok;
  4528. var NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError
  4529. // when a corresponding condition is not met, with a message that
  4530. // may be undefined if not provided. All assertion methods provide
  4531. // both the actual and expected values to the assertion error for
  4532. // display purposes.
  4533. function innerFail(obj) {
  4534. if (obj.message instanceof Error) throw obj.message;
  4535. throw new AssertionError(obj);
  4536. }
  4537. function fail(actual, expected, message, operator, stackStartFn) {
  4538. var argsLen = arguments.length;
  4539. var internalMessage;
  4540. if (argsLen === 0) {
  4541. internalMessage = 'Failed';
  4542. } else if (argsLen === 1) {
  4543. message = actual;
  4544. actual = undefined;
  4545. } else {
  4546. if (warned === false) {
  4547. warned = true;
  4548. var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);
  4549. warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');
  4550. }
  4551. if (argsLen === 2) operator = '!=';
  4552. }
  4553. if (message instanceof Error) throw message;
  4554. var errArgs = {
  4555. actual: actual,
  4556. expected: expected,
  4557. operator: operator === undefined ? 'fail' : operator,
  4558. stackStartFn: stackStartFn || fail
  4559. };
  4560. if (message !== undefined) {
  4561. errArgs.message = message;
  4562. }
  4563. var err = new AssertionError(errArgs);
  4564. if (internalMessage) {
  4565. err.message = internalMessage;
  4566. err.generatedMessage = true;
  4567. }
  4568. throw err;
  4569. }
  4570. assert.fail = fail; // The AssertionError is defined in internal/error.
  4571. assert.AssertionError = AssertionError;
  4572. function innerOk(fn, argLen, value, message) {
  4573. if (!value) {
  4574. var generatedMessage = false;
  4575. if (argLen === 0) {
  4576. generatedMessage = true;
  4577. message = 'No value argument passed to `assert.ok()`';
  4578. } else if (message instanceof Error) {
  4579. throw message;
  4580. }
  4581. var err = new AssertionError({
  4582. actual: value,
  4583. expected: true,
  4584. message: message,
  4585. operator: '==',
  4586. stackStartFn: fn
  4587. });
  4588. err.generatedMessage = generatedMessage;
  4589. throw err;
  4590. }
  4591. } // Pure assertion tests whether a value is truthy, as determined
  4592. // by !!value.
  4593. function ok() {
  4594. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  4595. args[_key] = arguments[_key];
  4596. }
  4597. innerOk.apply(void 0, [ok, args.length].concat(args));
  4598. }
  4599. assert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.
  4600. /* eslint-disable no-restricted-properties */
  4601. assert.equal = function equal(actual, expected, message) {
  4602. if (arguments.length < 2) {
  4603. throw new ERR_MISSING_ARGS('actual', 'expected');
  4604. } // eslint-disable-next-line eqeqeq
  4605. if (actual != expected) {
  4606. innerFail({
  4607. actual: actual,
  4608. expected: expected,
  4609. message: message,
  4610. operator: '==',
  4611. stackStartFn: equal
  4612. });
  4613. }
  4614. }; // The non-equality assertion tests for whether two objects are not
  4615. // equal with !=.
  4616. assert.notEqual = function notEqual(actual, expected, message) {
  4617. if (arguments.length < 2) {
  4618. throw new ERR_MISSING_ARGS('actual', 'expected');
  4619. } // eslint-disable-next-line eqeqeq
  4620. if (actual == expected) {
  4621. innerFail({
  4622. actual: actual,
  4623. expected: expected,
  4624. message: message,
  4625. operator: '!=',
  4626. stackStartFn: notEqual
  4627. });
  4628. }
  4629. }; // The equivalence assertion tests a deep equality relation.
  4630. assert.deepEqual = function deepEqual(actual, expected, message) {
  4631. if (arguments.length < 2) {
  4632. throw new ERR_MISSING_ARGS('actual', 'expected');
  4633. }
  4634. if (isDeepEqual === undefined) lazyLoadComparison();
  4635. if (!isDeepEqual(actual, expected)) {
  4636. innerFail({
  4637. actual: actual,
  4638. expected: expected,
  4639. message: message,
  4640. operator: 'deepEqual',
  4641. stackStartFn: deepEqual
  4642. });
  4643. }
  4644. }; // The non-equivalence assertion tests for any deep inequality.
  4645. assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
  4646. if (arguments.length < 2) {
  4647. throw new ERR_MISSING_ARGS('actual', 'expected');
  4648. }
  4649. if (isDeepEqual === undefined) lazyLoadComparison();
  4650. if (isDeepEqual(actual, expected)) {
  4651. innerFail({
  4652. actual: actual,
  4653. expected: expected,
  4654. message: message,
  4655. operator: 'notDeepEqual',
  4656. stackStartFn: notDeepEqual
  4657. });
  4658. }
  4659. };
  4660. /* eslint-enable */
  4661. assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
  4662. if (arguments.length < 2) {
  4663. throw new ERR_MISSING_ARGS('actual', 'expected');
  4664. }
  4665. if (isDeepEqual === undefined) lazyLoadComparison();
  4666. if (!isDeepStrictEqual(actual, expected)) {
  4667. innerFail({
  4668. actual: actual,
  4669. expected: expected,
  4670. message: message,
  4671. operator: 'deepStrictEqual',
  4672. stackStartFn: deepStrictEqual
  4673. });
  4674. }
  4675. };
  4676. assert.notDeepStrictEqual = notDeepStrictEqual;
  4677. function notDeepStrictEqual(actual, expected, message) {
  4678. if (arguments.length < 2) {
  4679. throw new ERR_MISSING_ARGS('actual', 'expected');
  4680. }
  4681. if (isDeepEqual === undefined) lazyLoadComparison();
  4682. if (isDeepStrictEqual(actual, expected)) {
  4683. innerFail({
  4684. actual: actual,
  4685. expected: expected,
  4686. message: message,
  4687. operator: 'notDeepStrictEqual',
  4688. stackStartFn: notDeepStrictEqual
  4689. });
  4690. }
  4691. }
  4692. assert.strictEqual = function strictEqual(actual, expected, message) {
  4693. if (arguments.length < 2) {
  4694. throw new ERR_MISSING_ARGS('actual', 'expected');
  4695. }
  4696. if (!objectIs(actual, expected)) {
  4697. innerFail({
  4698. actual: actual,
  4699. expected: expected,
  4700. message: message,
  4701. operator: 'strictEqual',
  4702. stackStartFn: strictEqual
  4703. });
  4704. }
  4705. };
  4706. assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
  4707. if (arguments.length < 2) {
  4708. throw new ERR_MISSING_ARGS('actual', 'expected');
  4709. }
  4710. if (objectIs(actual, expected)) {
  4711. innerFail({
  4712. actual: actual,
  4713. expected: expected,
  4714. message: message,
  4715. operator: 'notStrictEqual',
  4716. stackStartFn: notStrictEqual
  4717. });
  4718. }
  4719. };
  4720. var Comparison = function Comparison(obj, keys, actual) {
  4721. var _this = this;
  4722. _classCallCheck(this, Comparison);
  4723. keys.forEach(function (key) {
  4724. if (key in obj) {
  4725. if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {
  4726. _this[key] = actual[key];
  4727. } else {
  4728. _this[key] = obj[key];
  4729. }
  4730. }
  4731. });
  4732. };
  4733. function compareExceptionKey(actual, expected, key, message, keys, fn) {
  4734. if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {
  4735. if (!message) {
  4736. // Create placeholder objects to create a nice output.
  4737. var a = new Comparison(actual, keys);
  4738. var b = new Comparison(expected, keys, actual);
  4739. var err = new AssertionError({
  4740. actual: a,
  4741. expected: b,
  4742. operator: 'deepStrictEqual',
  4743. stackStartFn: fn
  4744. });
  4745. err.actual = actual;
  4746. err.expected = expected;
  4747. err.operator = fn.name;
  4748. throw err;
  4749. }
  4750. innerFail({
  4751. actual: actual,
  4752. expected: expected,
  4753. message: message,
  4754. operator: fn.name,
  4755. stackStartFn: fn
  4756. });
  4757. }
  4758. }
  4759. function expectedException(actual, expected, msg, fn) {
  4760. if (typeof expected !== 'function') {
  4761. if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.
  4762. if (arguments.length === 2) {
  4763. throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);
  4764. } // Handle primitives properly.
  4765. if (_typeof(actual) !== 'object' || actual === null) {
  4766. var err = new AssertionError({
  4767. actual: actual,
  4768. expected: expected,
  4769. message: msg,
  4770. operator: 'deepStrictEqual',
  4771. stackStartFn: fn
  4772. });
  4773. err.operator = fn.name;
  4774. throw err;
  4775. }
  4776. var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared
  4777. // as well.
  4778. if (expected instanceof Error) {
  4779. keys.push('name', 'message');
  4780. } else if (keys.length === 0) {
  4781. throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');
  4782. }
  4783. if (isDeepEqual === undefined) lazyLoadComparison();
  4784. keys.forEach(function (key) {
  4785. if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {
  4786. return;
  4787. }
  4788. compareExceptionKey(actual, expected, key, msg, keys, fn);
  4789. });
  4790. return true;
  4791. } // Guard instanceof against arrow functions as they don't have a prototype.
  4792. if (expected.prototype !== undefined && actual instanceof expected) {
  4793. return true;
  4794. }
  4795. if (Error.isPrototypeOf(expected)) {
  4796. return false;
  4797. }
  4798. return expected.call({}, actual) === true;
  4799. }
  4800. function getActual(fn) {
  4801. if (typeof fn !== 'function') {
  4802. throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);
  4803. }
  4804. try {
  4805. fn();
  4806. } catch (e) {
  4807. return e;
  4808. }
  4809. return NO_EXCEPTION_SENTINEL;
  4810. }
  4811. function checkIsPromise(obj) {
  4812. // Accept native ES6 promises and promises that are implemented in a similar
  4813. // way. Do not accept thenables that use a function as `obj` and that have no
  4814. // `catch` handler.
  4815. // TODO: thenables are checked up until they have the correct methods,
  4816. // but according to documentation, the `then` method should receive
  4817. // the `fulfill` and `reject` arguments as well or it may be never resolved.
  4818. return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';
  4819. }
  4820. function waitForActual(promiseFn) {
  4821. return Promise.resolve().then(function () {
  4822. var resultPromise;
  4823. if (typeof promiseFn === 'function') {
  4824. // Return a rejected promise if `promiseFn` throws synchronously.
  4825. resultPromise = promiseFn(); // Fail in case no promise is returned.
  4826. if (!checkIsPromise(resultPromise)) {
  4827. throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);
  4828. }
  4829. } else if (checkIsPromise(promiseFn)) {
  4830. resultPromise = promiseFn;
  4831. } else {
  4832. throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);
  4833. }
  4834. return Promise.resolve().then(function () {
  4835. return resultPromise;
  4836. }).then(function () {
  4837. return NO_EXCEPTION_SENTINEL;
  4838. }).catch(function (e) {
  4839. return e;
  4840. });
  4841. });
  4842. }
  4843. function expectsError(stackStartFn, actual, error, message) {
  4844. if (typeof error === 'string') {
  4845. if (arguments.length === 4) {
  4846. throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);
  4847. }
  4848. if (_typeof(actual) === 'object' && actual !== null) {
  4849. if (actual.message === error) {
  4850. throw new ERR_AMBIGUOUS_ARGUMENT('error/message', "The error message \"".concat(actual.message, "\" is identical to the message."));
  4851. }
  4852. } else if (actual === error) {
  4853. throw new ERR_AMBIGUOUS_ARGUMENT('error/message', "The error \"".concat(actual, "\" is identical to the message."));
  4854. }
  4855. message = error;
  4856. error = undefined;
  4857. } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {
  4858. throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);
  4859. }
  4860. if (actual === NO_EXCEPTION_SENTINEL) {
  4861. var details = '';
  4862. if (error && error.name) {
  4863. details += " (".concat(error.name, ")");
  4864. }
  4865. details += message ? ": ".concat(message) : '.';
  4866. var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';
  4867. innerFail({
  4868. actual: undefined,
  4869. expected: error,
  4870. operator: stackStartFn.name,
  4871. message: "Missing expected ".concat(fnType).concat(details),
  4872. stackStartFn: stackStartFn
  4873. });
  4874. }
  4875. if (error && !expectedException(actual, error, message, stackStartFn)) {
  4876. throw actual;
  4877. }
  4878. }
  4879. function expectsNoError(stackStartFn, actual, error, message) {
  4880. if (actual === NO_EXCEPTION_SENTINEL) return;
  4881. if (typeof error === 'string') {
  4882. message = error;
  4883. error = undefined;
  4884. }
  4885. if (!error || expectedException(actual, error)) {
  4886. var details = message ? ": ".concat(message) : '.';
  4887. var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';
  4888. innerFail({
  4889. actual: actual,
  4890. expected: error,
  4891. operator: stackStartFn.name,
  4892. message: "Got unwanted ".concat(fnType).concat(details, "\n") + "Actual message: \"".concat(actual && actual.message, "\""),
  4893. stackStartFn: stackStartFn
  4894. });
  4895. }
  4896. throw actual;
  4897. }
  4898. assert.throws = function throws(promiseFn) {
  4899. for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
  4900. args[_key2 - 1] = arguments[_key2];
  4901. }
  4902. expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));
  4903. };
  4904. assert.rejects = function rejects(promiseFn) {
  4905. for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
  4906. args[_key3 - 1] = arguments[_key3];
  4907. }
  4908. return waitForActual(promiseFn).then(function (result) {
  4909. return expectsError.apply(void 0, [rejects, result].concat(args));
  4910. });
  4911. };
  4912. assert.doesNotThrow = function doesNotThrow(fn) {
  4913. for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
  4914. args[_key4 - 1] = arguments[_key4];
  4915. }
  4916. expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));
  4917. };
  4918. assert.doesNotReject = function doesNotReject(fn) {
  4919. for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
  4920. args[_key5 - 1] = arguments[_key5];
  4921. }
  4922. return waitForActual(fn).then(function (result) {
  4923. return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));
  4924. });
  4925. };
  4926. assert.ifError = function ifError(err) {
  4927. if (err !== null && err !== undefined) {
  4928. var message = 'ifError got unwanted exception: ';
  4929. if (_typeof(err) === 'object' && typeof err.message === 'string') {
  4930. if (err.message.length === 0 && err.constructor) {
  4931. message += err.constructor.name;
  4932. } else {
  4933. message += err.message;
  4934. }
  4935. } else {
  4936. message += inspect(err);
  4937. }
  4938. var newErr = new AssertionError({
  4939. actual: err,
  4940. expected: null,
  4941. operator: 'ifError',
  4942. message: message,
  4943. stackStartFn: ifError
  4944. }); // Make sure we actually have a stack trace!
  4945. var origStack = err.stack;
  4946. if (typeof origStack === 'string') {
  4947. // This will remove any duplicated frames from the error frames taken
  4948. // from within `ifError` and add the original error frames to the newly
  4949. // created ones.
  4950. var tmp2 = origStack.split('\n');
  4951. tmp2.shift(); // Filter all frames existing in err.stack.
  4952. var tmp1 = newErr.stack.split('\n');
  4953. for (var i = 0; i < tmp2.length; i++) {
  4954. // Find the first occurrence of the frame.
  4955. var pos = tmp1.indexOf(tmp2[i]);
  4956. if (pos !== -1) {
  4957. // Only keep new frames.
  4958. tmp1 = tmp1.slice(0, pos);
  4959. break;
  4960. }
  4961. }
  4962. newErr.stack = "".concat(tmp1.join('\n'), "\n").concat(tmp2.join('\n'));
  4963. }
  4964. throw newErr;
  4965. }
  4966. }; // Expose a strict only variant of assert
  4967. function strict() {
  4968. for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
  4969. args[_key6] = arguments[_key6];
  4970. }
  4971. innerOk.apply(void 0, [strict, args.length].concat(args));
  4972. }
  4973. assert.strict = objectAssign(strict, assert, {
  4974. equal: assert.strictEqual,
  4975. deepEqual: assert.deepStrictEqual,
  4976. notEqual: assert.notStrictEqual,
  4977. notDeepEqual: assert.notDeepStrictEqual
  4978. });
  4979. assert.strict.strict = assert.strict;
  4980. /***/ }),
  4981. /***/ 25961:
  4982. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  4983. "use strict";
  4984. /* provided dependency */ var process = __webpack_require__(34155);
  4985. // Currently in sync with Node.js lib/internal/assert/assertion_error.js
  4986. // https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c
  4987. function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
  4988. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  4989. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  4990. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  4991. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  4992. function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
  4993. function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
  4994. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
  4995. function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
  4996. function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  4997. function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
  4998. function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
  4999. function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
  5000. function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
  5001. function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
  5002. var _require = __webpack_require__(89539),
  5003. inspect = _require.inspect;
  5004. var _require2 = __webpack_require__(62136),
  5005. ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
  5006. function endsWith(str, search, this_len) {
  5007. if (this_len === undefined || this_len > str.length) {
  5008. this_len = str.length;
  5009. }
  5010. return str.substring(this_len - search.length, this_len) === search;
  5011. } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
  5012. function repeat(str, count) {
  5013. count = Math.floor(count);
  5014. if (str.length == 0 || count == 0) return '';
  5015. var maxCount = str.length * count;
  5016. count = Math.floor(Math.log(count) / Math.log(2));
  5017. while (count) {
  5018. str += str;
  5019. count--;
  5020. }
  5021. str += str.substring(0, maxCount - str.length);
  5022. return str;
  5023. }
  5024. var blue = '';
  5025. var green = '';
  5026. var red = '';
  5027. var white = '';
  5028. var kReadableOperator = {
  5029. deepStrictEqual: 'Expected values to be strictly deep-equal:',
  5030. strictEqual: 'Expected values to be strictly equal:',
  5031. strictEqualObject: 'Expected "actual" to be reference-equal to "expected":',
  5032. deepEqual: 'Expected values to be loosely deep-equal:',
  5033. equal: 'Expected values to be loosely equal:',
  5034. notDeepStrictEqual: 'Expected "actual" not to be strictly deep-equal to:',
  5035. notStrictEqual: 'Expected "actual" to be strictly unequal to:',
  5036. notStrictEqualObject: 'Expected "actual" not to be reference-equal to "expected":',
  5037. notDeepEqual: 'Expected "actual" not to be loosely deep-equal to:',
  5038. notEqual: 'Expected "actual" to be loosely unequal to:',
  5039. notIdentical: 'Values identical but not reference-equal:'
  5040. }; // Comparing short primitives should just show === / !== instead of using the
  5041. // diff.
  5042. var kMaxShortLength = 10;
  5043. function copyError(source) {
  5044. var keys = Object.keys(source);
  5045. var target = Object.create(Object.getPrototypeOf(source));
  5046. keys.forEach(function (key) {
  5047. target[key] = source[key];
  5048. });
  5049. Object.defineProperty(target, 'message', {
  5050. value: source.message
  5051. });
  5052. return target;
  5053. }
  5054. function inspectValue(val) {
  5055. // The util.inspect default values could be changed. This makes sure the
  5056. // error messages contain the necessary information nevertheless.
  5057. return inspect(val, {
  5058. compact: false,
  5059. customInspect: false,
  5060. depth: 1000,
  5061. maxArrayLength: Infinity,
  5062. // Assert compares only enumerable properties (with a few exceptions).
  5063. showHidden: false,
  5064. // Having a long line as error is better than wrapping the line for
  5065. // comparison for now.
  5066. // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we
  5067. // have meta information about the inspected properties (i.e., know where
  5068. // in what line the property starts and ends).
  5069. breakLength: Infinity,
  5070. // Assert does not detect proxies currently.
  5071. showProxy: false,
  5072. sorted: true,
  5073. // Inspect getters as we also check them when comparing entries.
  5074. getters: true
  5075. });
  5076. }
  5077. function createErrDiff(actual, expected, operator) {
  5078. var other = '';
  5079. var res = '';
  5080. var lastPos = 0;
  5081. var end = '';
  5082. var skipped = false;
  5083. var actualInspected = inspectValue(actual);
  5084. var actualLines = actualInspected.split('\n');
  5085. var expectedLines = inspectValue(expected).split('\n');
  5086. var i = 0;
  5087. var indicator = ''; // In case both values are objects explicitly mark them as not reference equal
  5088. // for the `strictEqual` operator.
  5089. if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {
  5090. operator = 'strictEqualObject';
  5091. } // If "actual" and "expected" fit on a single line and they are not strictly
  5092. // equal, check further special handling.
  5093. if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {
  5094. var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of "actual" and "expected" together is less than
  5095. // kMaxShortLength and if neither is an object and at least one of them is
  5096. // not `zero`, use the strict equal comparison to visualize the output.
  5097. if (inputLength <= kMaxShortLength) {
  5098. if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {
  5099. // -0 === +0
  5100. return "".concat(kReadableOperator[operator], "\n\n") + "".concat(actualLines[0], " !== ").concat(expectedLines[0], "\n");
  5101. }
  5102. } else if (operator !== 'strictEqualObject') {
  5103. // If the stderr is a tty and the input length is lower than the current
  5104. // columns per line, add a mismatch indicator below the output. If it is
  5105. // not a tty, use a default value of 80 characters.
  5106. var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;
  5107. if (inputLength < maxLength) {
  5108. while (actualLines[0][i] === expectedLines[0][i]) {
  5109. i++;
  5110. } // Ignore the first characters.
  5111. if (i > 2) {
  5112. // Add position indicator for the first mismatch in case it is a
  5113. // single line and the input length is less than the column length.
  5114. indicator = "\n ".concat(repeat(' ', i), "^");
  5115. i = 0;
  5116. }
  5117. }
  5118. }
  5119. } // Remove all ending lines that match (this optimizes the output for
  5120. // readability by reducing the number of total changed lines).
  5121. var a = actualLines[actualLines.length - 1];
  5122. var b = expectedLines[expectedLines.length - 1];
  5123. while (a === b) {
  5124. if (i++ < 2) {
  5125. end = "\n ".concat(a).concat(end);
  5126. } else {
  5127. other = a;
  5128. }
  5129. actualLines.pop();
  5130. expectedLines.pop();
  5131. if (actualLines.length === 0 || expectedLines.length === 0) break;
  5132. a = actualLines[actualLines.length - 1];
  5133. b = expectedLines[expectedLines.length - 1];
  5134. }
  5135. var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.
  5136. // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })
  5137. if (maxLines === 0) {
  5138. // We have to get the result again. The lines were all removed before.
  5139. var _actualLines = actualInspected.split('\n'); // Only remove lines in case it makes sense to collapse those.
  5140. // TODO: Accept env to always show the full error.
  5141. if (_actualLines.length > 30) {
  5142. _actualLines[26] = "".concat(blue, "...").concat(white);
  5143. while (_actualLines.length > 27) {
  5144. _actualLines.pop();
  5145. }
  5146. }
  5147. return "".concat(kReadableOperator.notIdentical, "\n\n").concat(_actualLines.join('\n'), "\n");
  5148. }
  5149. if (i > 3) {
  5150. end = "\n".concat(blue, "...").concat(white).concat(end);
  5151. skipped = true;
  5152. }
  5153. if (other !== '') {
  5154. end = "\n ".concat(other).concat(end);
  5155. other = '';
  5156. }
  5157. var printedLines = 0;
  5158. var msg = kReadableOperator[operator] + "\n".concat(green, "+ actual").concat(white, " ").concat(red, "- expected").concat(white);
  5159. var skippedMsg = " ".concat(blue, "...").concat(white, " Lines skipped");
  5160. for (i = 0; i < maxLines; i++) {
  5161. // Only extra expected lines exist
  5162. var cur = i - lastPos;
  5163. if (actualLines.length < i + 1) {
  5164. // If the last diverging line is more than one line above and the
  5165. // current line is at least line three, add some of the former lines and
  5166. // also add dots to indicate skipped entries.
  5167. if (cur > 1 && i > 2) {
  5168. if (cur > 4) {
  5169. res += "\n".concat(blue, "...").concat(white);
  5170. skipped = true;
  5171. } else if (cur > 3) {
  5172. res += "\n ".concat(expectedLines[i - 2]);
  5173. printedLines++;
  5174. }
  5175. res += "\n ".concat(expectedLines[i - 1]);
  5176. printedLines++;
  5177. } // Mark the current line as the last diverging one.
  5178. lastPos = i; // Add the expected line to the cache.
  5179. other += "\n".concat(red, "-").concat(white, " ").concat(expectedLines[i]);
  5180. printedLines++; // Only extra actual lines exist
  5181. } else if (expectedLines.length < i + 1) {
  5182. // If the last diverging line is more than one line above and the
  5183. // current line is at least line three, add some of the former lines and
  5184. // also add dots to indicate skipped entries.
  5185. if (cur > 1 && i > 2) {
  5186. if (cur > 4) {
  5187. res += "\n".concat(blue, "...").concat(white);
  5188. skipped = true;
  5189. } else if (cur > 3) {
  5190. res += "\n ".concat(actualLines[i - 2]);
  5191. printedLines++;
  5192. }
  5193. res += "\n ".concat(actualLines[i - 1]);
  5194. printedLines++;
  5195. } // Mark the current line as the last diverging one.
  5196. lastPos = i; // Add the actual line to the result.
  5197. res += "\n".concat(green, "+").concat(white, " ").concat(actualLines[i]);
  5198. printedLines++; // Lines diverge
  5199. } else {
  5200. var expectedLine = expectedLines[i];
  5201. var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by
  5202. // a trailing comma. In that case it is actually identical and we should
  5203. // mark it as such.
  5204. var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,
  5205. // add a comma at the end of the actual line. Otherwise the output could
  5206. // look weird as in:
  5207. //
  5208. // [
  5209. // 1 // No comma at the end!
  5210. // + 2
  5211. // ]
  5212. //
  5213. if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {
  5214. divergingLines = false;
  5215. actualLine += ',';
  5216. }
  5217. if (divergingLines) {
  5218. // If the last diverging line is more than one line above and the
  5219. // current line is at least line three, add some of the former lines and
  5220. // also add dots to indicate skipped entries.
  5221. if (cur > 1 && i > 2) {
  5222. if (cur > 4) {
  5223. res += "\n".concat(blue, "...").concat(white);
  5224. skipped = true;
  5225. } else if (cur > 3) {
  5226. res += "\n ".concat(actualLines[i - 2]);
  5227. printedLines++;
  5228. }
  5229. res += "\n ".concat(actualLines[i - 1]);
  5230. printedLines++;
  5231. } // Mark the current line as the last diverging one.
  5232. lastPos = i; // Add the actual line to the result and cache the expected diverging
  5233. // line so consecutive diverging lines show up as +++--- and not +-+-+-.
  5234. res += "\n".concat(green, "+").concat(white, " ").concat(actualLine);
  5235. other += "\n".concat(red, "-").concat(white, " ").concat(expectedLine);
  5236. printedLines += 2; // Lines are identical
  5237. } else {
  5238. // Add all cached information to the result before adding other things
  5239. // and reset the cache.
  5240. res += other;
  5241. other = ''; // If the last diverging line is exactly one line above or if it is the
  5242. // very first line, add the line to the result.
  5243. if (cur === 1 || i === 0) {
  5244. res += "\n ".concat(actualLine);
  5245. printedLines++;
  5246. }
  5247. }
  5248. } // Inspected object to big (Show ~20 rows max)
  5249. if (printedLines > 20 && i < maxLines - 2) {
  5250. return "".concat(msg).concat(skippedMsg, "\n").concat(res, "\n").concat(blue, "...").concat(white).concat(other, "\n") + "".concat(blue, "...").concat(white);
  5251. }
  5252. }
  5253. return "".concat(msg).concat(skipped ? skippedMsg : '', "\n").concat(res).concat(other).concat(end).concat(indicator);
  5254. }
  5255. var AssertionError =
  5256. /*#__PURE__*/
  5257. function (_Error) {
  5258. _inherits(AssertionError, _Error);
  5259. function AssertionError(options) {
  5260. var _this;
  5261. _classCallCheck(this, AssertionError);
  5262. if (_typeof(options) !== 'object' || options === null) {
  5263. throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);
  5264. }
  5265. var message = options.message,
  5266. operator = options.operator,
  5267. stackStartFn = options.stackStartFn;
  5268. var actual = options.actual,
  5269. expected = options.expected;
  5270. var limit = Error.stackTraceLimit;
  5271. Error.stackTraceLimit = 0;
  5272. if (message != null) {
  5273. _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));
  5274. } else {
  5275. if (process.stderr && process.stderr.isTTY) {
  5276. // Reset on each call to make sure we handle dynamically set environment
  5277. // variables correct.
  5278. if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {
  5279. blue = "\x1B[34m";
  5280. green = "\x1B[32m";
  5281. white = "\x1B[39m";
  5282. red = "\x1B[31m";
  5283. } else {
  5284. blue = '';
  5285. green = '';
  5286. white = '';
  5287. red = '';
  5288. }
  5289. } // Prevent the error stack from being visible by duplicating the error
  5290. // in a very close way to the original in case both sides are actually
  5291. // instances of Error.
  5292. if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {
  5293. actual = copyError(actual);
  5294. expected = copyError(expected);
  5295. }
  5296. if (operator === 'deepStrictEqual' || operator === 'strictEqual') {
  5297. _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));
  5298. } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {
  5299. // In case the objects are equal but the operator requires unequal, show
  5300. // the first object and say A equals B
  5301. var base = kReadableOperator[operator];
  5302. var res = inspectValue(actual).split('\n'); // In case "actual" is an object, it should not be reference equal.
  5303. if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {
  5304. base = kReadableOperator.notStrictEqualObject;
  5305. } // Only remove lines in case it makes sense to collapse those.
  5306. // TODO: Accept env to always show the full error.
  5307. if (res.length > 30) {
  5308. res[26] = "".concat(blue, "...").concat(white);
  5309. while (res.length > 27) {
  5310. res.pop();
  5311. }
  5312. } // Only print a single input.
  5313. if (res.length === 1) {
  5314. _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, "".concat(base, " ").concat(res[0])));
  5315. } else {
  5316. _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, "".concat(base, "\n\n").concat(res.join('\n'), "\n")));
  5317. }
  5318. } else {
  5319. var _res = inspectValue(actual);
  5320. var other = '';
  5321. var knownOperators = kReadableOperator[operator];
  5322. if (operator === 'notDeepEqual' || operator === 'notEqual') {
  5323. _res = "".concat(kReadableOperator[operator], "\n\n").concat(_res);
  5324. if (_res.length > 1024) {
  5325. _res = "".concat(_res.slice(0, 1021), "...");
  5326. }
  5327. } else {
  5328. other = "".concat(inspectValue(expected));
  5329. if (_res.length > 512) {
  5330. _res = "".concat(_res.slice(0, 509), "...");
  5331. }
  5332. if (other.length > 512) {
  5333. other = "".concat(other.slice(0, 509), "...");
  5334. }
  5335. if (operator === 'deepEqual' || operator === 'equal') {
  5336. _res = "".concat(knownOperators, "\n\n").concat(_res, "\n\nshould equal\n\n");
  5337. } else {
  5338. other = " ".concat(operator, " ").concat(other);
  5339. }
  5340. }
  5341. _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, "".concat(_res).concat(other)));
  5342. }
  5343. }
  5344. Error.stackTraceLimit = limit;
  5345. _this.generatedMessage = !message;
  5346. Object.defineProperty(_assertThisInitialized(_this), 'name', {
  5347. value: 'AssertionError [ERR_ASSERTION]',
  5348. enumerable: false,
  5349. writable: true,
  5350. configurable: true
  5351. });
  5352. _this.code = 'ERR_ASSERTION';
  5353. _this.actual = actual;
  5354. _this.expected = expected;
  5355. _this.operator = operator;
  5356. if (Error.captureStackTrace) {
  5357. // eslint-disable-next-line no-restricted-syntax
  5358. Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);
  5359. } // Create error message including the error code in the name.
  5360. _this.stack; // Reset the name.
  5361. _this.name = 'AssertionError';
  5362. return _possibleConstructorReturn(_this);
  5363. }
  5364. _createClass(AssertionError, [{
  5365. key: "toString",
  5366. value: function toString() {
  5367. return "".concat(this.name, " [").concat(this.code, "]: ").concat(this.message);
  5368. }
  5369. }, {
  5370. key: inspect.custom,
  5371. value: function value(recurseTimes, ctx) {
  5372. // This limits the `actual` and `expected` property default inspection to
  5373. // the minimum depth. Otherwise those values would be too verbose compared
  5374. // to the actual error message which contains a combined view of these two
  5375. // input values.
  5376. return inspect(this, _objectSpread({}, ctx, {
  5377. customInspect: false,
  5378. depth: 0
  5379. }));
  5380. }
  5381. }]);
  5382. return AssertionError;
  5383. }(_wrapNativeSuper(Error));
  5384. module.exports = AssertionError;
  5385. /***/ }),
  5386. /***/ 62136:
  5387. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  5388. "use strict";
  5389. // Currently in sync with Node.js lib/internal/errors.js
  5390. // https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f
  5391. /* eslint node-core/documented-errors: "error" */
  5392. /* eslint node-core/alphabetize-errors: "error" */
  5393. /* eslint node-core/prefer-util-format-errors: "error" */
  5394. // The whole point behind this internal module is to allow Node.js to no
  5395. // longer be forced to treat every error message change as a semver-major
  5396. // change. The NodeError classes here all expose a `code` property whose
  5397. // value statically and permanently identifies the error. While the error
  5398. // message may change, the code should not.
  5399. function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
  5400. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  5401. function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
  5402. function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
  5403. function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
  5404. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
  5405. function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
  5406. var codes = {}; // Lazy loaded
  5407. var assert;
  5408. var util;
  5409. function createErrorType(code, message, Base) {
  5410. if (!Base) {
  5411. Base = Error;
  5412. }
  5413. function getMessage(arg1, arg2, arg3) {
  5414. if (typeof message === 'string') {
  5415. return message;
  5416. } else {
  5417. return message(arg1, arg2, arg3);
  5418. }
  5419. }
  5420. var NodeError =
  5421. /*#__PURE__*/
  5422. function (_Base) {
  5423. _inherits(NodeError, _Base);
  5424. function NodeError(arg1, arg2, arg3) {
  5425. var _this;
  5426. _classCallCheck(this, NodeError);
  5427. _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));
  5428. _this.code = code;
  5429. return _this;
  5430. }
  5431. return NodeError;
  5432. }(Base);
  5433. codes[code] = NodeError;
  5434. } // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
  5435. function oneOf(expected, thing) {
  5436. if (Array.isArray(expected)) {
  5437. var len = expected.length;
  5438. expected = expected.map(function (i) {
  5439. return String(i);
  5440. });
  5441. if (len > 2) {
  5442. return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1];
  5443. } else if (len === 2) {
  5444. return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]);
  5445. } else {
  5446. return "of ".concat(thing, " ").concat(expected[0]);
  5447. }
  5448. } else {
  5449. return "of ".concat(thing, " ").concat(String(expected));
  5450. }
  5451. } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
  5452. function startsWith(str, search, pos) {
  5453. return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
  5454. } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
  5455. function endsWith(str, search, this_len) {
  5456. if (this_len === undefined || this_len > str.length) {
  5457. this_len = str.length;
  5458. }
  5459. return str.substring(this_len - search.length, this_len) === search;
  5460. } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
  5461. function includes(str, search, start) {
  5462. if (typeof start !== 'number') {
  5463. start = 0;
  5464. }
  5465. if (start + search.length > str.length) {
  5466. return false;
  5467. } else {
  5468. return str.indexOf(search, start) !== -1;
  5469. }
  5470. }
  5471. createErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The "%s" argument is ambiguous. %s', TypeError);
  5472. createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
  5473. if (assert === undefined) assert = __webpack_require__(69282);
  5474. assert(typeof name === 'string', "'name' must be a string"); // determiner: 'must be' or 'must not be'
  5475. var determiner;
  5476. if (typeof expected === 'string' && startsWith(expected, 'not ')) {
  5477. determiner = 'must not be';
  5478. expected = expected.replace(/^not /, '');
  5479. } else {
  5480. determiner = 'must be';
  5481. }
  5482. var msg;
  5483. if (endsWith(name, ' argument')) {
  5484. // For cases like 'first argument'
  5485. msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
  5486. } else {
  5487. var type = includes(name, '.') ? 'property' : 'argument';
  5488. msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
  5489. } // TODO(BridgeAR): Improve the output by showing `null` and similar.
  5490. msg += ". Received type ".concat(_typeof(actual));
  5491. return msg;
  5492. }, TypeError);
  5493. createErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {
  5494. var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';
  5495. if (util === undefined) util = __webpack_require__(89539);
  5496. var inspected = util.inspect(value);
  5497. if (inspected.length > 128) {
  5498. inspected = "".concat(inspected.slice(0, 128), "...");
  5499. }
  5500. return "The argument '".concat(name, "' ").concat(reason, ". Received ").concat(inspected);
  5501. }, TypeError, RangeError);
  5502. createErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {
  5503. var type;
  5504. if (value && value.constructor && value.constructor.name) {
  5505. type = "instance of ".concat(value.constructor.name);
  5506. } else {
  5507. type = "type ".concat(_typeof(value));
  5508. }
  5509. return "Expected ".concat(input, " to be returned from the \"").concat(name, "\"") + " function but got ".concat(type, ".");
  5510. }, TypeError);
  5511. createErrorType('ERR_MISSING_ARGS', function () {
  5512. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  5513. args[_key] = arguments[_key];
  5514. }
  5515. if (assert === undefined) assert = __webpack_require__(69282);
  5516. assert(args.length > 0, 'At least one arg needs to be specified');
  5517. var msg = 'The ';
  5518. var len = args.length;
  5519. args = args.map(function (a) {
  5520. return "\"".concat(a, "\"");
  5521. });
  5522. switch (len) {
  5523. case 1:
  5524. msg += "".concat(args[0], " argument");
  5525. break;
  5526. case 2:
  5527. msg += "".concat(args[0], " and ").concat(args[1], " arguments");
  5528. break;
  5529. default:
  5530. msg += args.slice(0, len - 1).join(', ');
  5531. msg += ", and ".concat(args[len - 1], " arguments");
  5532. break;
  5533. }
  5534. return "".concat(msg, " must be specified");
  5535. }, TypeError);
  5536. module.exports.codes = codes;
  5537. /***/ }),
  5538. /***/ 19158:
  5539. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  5540. "use strict";
  5541. // Currently in sync with Node.js lib/internal/util/comparisons.js
  5542. // https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9
  5543. function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
  5544. function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
  5545. function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
  5546. function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
  5547. function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
  5548. var regexFlagsSupported = /a/g.flags !== undefined;
  5549. var arrayFromSet = function arrayFromSet(set) {
  5550. var array = [];
  5551. set.forEach(function (value) {
  5552. return array.push(value);
  5553. });
  5554. return array;
  5555. };
  5556. var arrayFromMap = function arrayFromMap(map) {
  5557. var array = [];
  5558. map.forEach(function (value, key) {
  5559. return array.push([key, value]);
  5560. });
  5561. return array;
  5562. };
  5563. var objectIs = Object.is ? Object.is : __webpack_require__(20609);
  5564. var objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {
  5565. return [];
  5566. };
  5567. var numberIsNaN = Number.isNaN ? Number.isNaN : __webpack_require__(20360);
  5568. function uncurryThis(f) {
  5569. return f.call.bind(f);
  5570. }
  5571. var hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
  5572. var propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);
  5573. var objectToString = uncurryThis(Object.prototype.toString);
  5574. var _require$types = (__webpack_require__(89539).types),
  5575. isAnyArrayBuffer = _require$types.isAnyArrayBuffer,
  5576. isArrayBufferView = _require$types.isArrayBufferView,
  5577. isDate = _require$types.isDate,
  5578. isMap = _require$types.isMap,
  5579. isRegExp = _require$types.isRegExp,
  5580. isSet = _require$types.isSet,
  5581. isNativeError = _require$types.isNativeError,
  5582. isBoxedPrimitive = _require$types.isBoxedPrimitive,
  5583. isNumberObject = _require$types.isNumberObject,
  5584. isStringObject = _require$types.isStringObject,
  5585. isBooleanObject = _require$types.isBooleanObject,
  5586. isBigIntObject = _require$types.isBigIntObject,
  5587. isSymbolObject = _require$types.isSymbolObject,
  5588. isFloat32Array = _require$types.isFloat32Array,
  5589. isFloat64Array = _require$types.isFloat64Array;
  5590. function isNonIndex(key) {
  5591. if (key.length === 0 || key.length > 10) return true;
  5592. for (var i = 0; i < key.length; i++) {
  5593. var code = key.charCodeAt(i);
  5594. if (code < 48 || code > 57) return true;
  5595. } // The maximum size for an array is 2 ** 32 -1.
  5596. return key.length === 10 && key >= Math.pow(2, 32);
  5597. }
  5598. function getOwnNonIndexProperties(value) {
  5599. return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));
  5600. } // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
  5601. // original notice:
  5602. /*!
  5603. * The buffer module from node.js, for the browser.
  5604. *
  5605. * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
  5606. * @license MIT
  5607. */
  5608. function compare(a, b) {
  5609. if (a === b) {
  5610. return 0;
  5611. }
  5612. var x = a.length;
  5613. var y = b.length;
  5614. for (var i = 0, len = Math.min(x, y); i < len; ++i) {
  5615. if (a[i] !== b[i]) {
  5616. x = a[i];
  5617. y = b[i];
  5618. break;
  5619. }
  5620. }
  5621. if (x < y) {
  5622. return -1;
  5623. }
  5624. if (y < x) {
  5625. return 1;
  5626. }
  5627. return 0;
  5628. }
  5629. var ONLY_ENUMERABLE = undefined;
  5630. var kStrict = true;
  5631. var kLoose = false;
  5632. var kNoIterator = 0;
  5633. var kIsArray = 1;
  5634. var kIsSet = 2;
  5635. var kIsMap = 3; // Check if they have the same source and flags
  5636. function areSimilarRegExps(a, b) {
  5637. return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);
  5638. }
  5639. function areSimilarFloatArrays(a, b) {
  5640. if (a.byteLength !== b.byteLength) {
  5641. return false;
  5642. }
  5643. for (var offset = 0; offset < a.byteLength; offset++) {
  5644. if (a[offset] !== b[offset]) {
  5645. return false;
  5646. }
  5647. }
  5648. return true;
  5649. }
  5650. function areSimilarTypedArrays(a, b) {
  5651. if (a.byteLength !== b.byteLength) {
  5652. return false;
  5653. }
  5654. return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;
  5655. }
  5656. function areEqualArrayBuffers(buf1, buf2) {
  5657. return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;
  5658. }
  5659. function isEqualBoxedPrimitive(val1, val2) {
  5660. if (isNumberObject(val1)) {
  5661. return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));
  5662. }
  5663. if (isStringObject(val1)) {
  5664. return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);
  5665. }
  5666. if (isBooleanObject(val1)) {
  5667. return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);
  5668. }
  5669. if (isBigIntObject(val1)) {
  5670. return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);
  5671. }
  5672. return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);
  5673. } // Notes: Type tags are historical [[Class]] properties that can be set by
  5674. // FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS
  5675. // and retrieved using Object.prototype.toString.call(obj) in JS
  5676. // See https://tc39.github.io/ecma262/#sec-object.prototype.tostring
  5677. // for a list of tags pre-defined in the spec.
  5678. // There are some unspecified tags in the wild too (e.g. typed array tags).
  5679. // Since tags can be altered, they only serve fast failures
  5680. //
  5681. // Typed arrays and buffers are checked by comparing the content in their
  5682. // underlying ArrayBuffer. This optimization requires that it's
  5683. // reasonable to interpret their underlying memory in the same way,
  5684. // which is checked by comparing their type tags.
  5685. // (e.g. a Uint8Array and a Uint16Array with the same memory content
  5686. // could still be different because they will be interpreted differently).
  5687. //
  5688. // For strict comparison, objects should have
  5689. // a) The same built-in type tags
  5690. // b) The same prototypes.
  5691. function innerDeepEqual(val1, val2, strict, memos) {
  5692. // All identical values are equivalent, as determined by ===.
  5693. if (val1 === val2) {
  5694. if (val1 !== 0) return true;
  5695. return strict ? objectIs(val1, val2) : true;
  5696. } // Check more closely if val1 and val2 are equal.
  5697. if (strict) {
  5698. if (_typeof(val1) !== 'object') {
  5699. return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);
  5700. }
  5701. if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {
  5702. return false;
  5703. }
  5704. if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {
  5705. return false;
  5706. }
  5707. } else {
  5708. if (val1 === null || _typeof(val1) !== 'object') {
  5709. if (val2 === null || _typeof(val2) !== 'object') {
  5710. // eslint-disable-next-line eqeqeq
  5711. return val1 == val2;
  5712. }
  5713. return false;
  5714. }
  5715. if (val2 === null || _typeof(val2) !== 'object') {
  5716. return false;
  5717. }
  5718. }
  5719. var val1Tag = objectToString(val1);
  5720. var val2Tag = objectToString(val2);
  5721. if (val1Tag !== val2Tag) {
  5722. return false;
  5723. }
  5724. if (Array.isArray(val1)) {
  5725. // Check for sparse arrays and general fast path
  5726. if (val1.length !== val2.length) {
  5727. return false;
  5728. }
  5729. var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);
  5730. var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);
  5731. if (keys1.length !== keys2.length) {
  5732. return false;
  5733. }
  5734. return keyCheck(val1, val2, strict, memos, kIsArray, keys1);
  5735. } // [browserify] This triggers on certain types in IE (Map/Set) so we don't
  5736. // wan't to early return out of the rest of the checks. However we can check
  5737. // if the second value is one of these values and the first isn't.
  5738. if (val1Tag === '[object Object]') {
  5739. // return keyCheck(val1, val2, strict, memos, kNoIterator);
  5740. if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {
  5741. return false;
  5742. }
  5743. }
  5744. if (isDate(val1)) {
  5745. if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {
  5746. return false;
  5747. }
  5748. } else if (isRegExp(val1)) {
  5749. if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {
  5750. return false;
  5751. }
  5752. } else if (isNativeError(val1) || val1 instanceof Error) {
  5753. // Do not compare the stack as it might differ even though the error itself
  5754. // is otherwise identical.
  5755. if (val1.message !== val2.message || val1.name !== val2.name) {
  5756. return false;
  5757. }
  5758. } else if (isArrayBufferView(val1)) {
  5759. if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {
  5760. if (!areSimilarFloatArrays(val1, val2)) {
  5761. return false;
  5762. }
  5763. } else if (!areSimilarTypedArrays(val1, val2)) {
  5764. return false;
  5765. } // Buffer.compare returns true, so val1.length === val2.length. If they both
  5766. // only contain numeric keys, we don't need to exam further than checking
  5767. // the symbols.
  5768. var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);
  5769. var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);
  5770. if (_keys.length !== _keys2.length) {
  5771. return false;
  5772. }
  5773. return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);
  5774. } else if (isSet(val1)) {
  5775. if (!isSet(val2) || val1.size !== val2.size) {
  5776. return false;
  5777. }
  5778. return keyCheck(val1, val2, strict, memos, kIsSet);
  5779. } else if (isMap(val1)) {
  5780. if (!isMap(val2) || val1.size !== val2.size) {
  5781. return false;
  5782. }
  5783. return keyCheck(val1, val2, strict, memos, kIsMap);
  5784. } else if (isAnyArrayBuffer(val1)) {
  5785. if (!areEqualArrayBuffers(val1, val2)) {
  5786. return false;
  5787. }
  5788. } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {
  5789. return false;
  5790. }
  5791. return keyCheck(val1, val2, strict, memos, kNoIterator);
  5792. }
  5793. function getEnumerables(val, keys) {
  5794. return keys.filter(function (k) {
  5795. return propertyIsEnumerable(val, k);
  5796. });
  5797. }
  5798. function keyCheck(val1, val2, strict, memos, iterationType, aKeys) {
  5799. // For all remaining Object pairs, including Array, objects and Maps,
  5800. // equivalence is determined by having:
  5801. // a) The same number of owned enumerable properties
  5802. // b) The same set of keys/indexes (although not necessarily the same order)
  5803. // c) Equivalent values for every corresponding key/index
  5804. // d) For Sets and Maps, equal contents
  5805. // Note: this accounts for both named and indexed properties on Arrays.
  5806. if (arguments.length === 5) {
  5807. aKeys = Object.keys(val1);
  5808. var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.
  5809. if (aKeys.length !== bKeys.length) {
  5810. return false;
  5811. }
  5812. } // Cheap key test
  5813. var i = 0;
  5814. for (; i < aKeys.length; i++) {
  5815. if (!hasOwnProperty(val2, aKeys[i])) {
  5816. return false;
  5817. }
  5818. }
  5819. if (strict && arguments.length === 5) {
  5820. var symbolKeysA = objectGetOwnPropertySymbols(val1);
  5821. if (symbolKeysA.length !== 0) {
  5822. var count = 0;
  5823. for (i = 0; i < symbolKeysA.length; i++) {
  5824. var key = symbolKeysA[i];
  5825. if (propertyIsEnumerable(val1, key)) {
  5826. if (!propertyIsEnumerable(val2, key)) {
  5827. return false;
  5828. }
  5829. aKeys.push(key);
  5830. count++;
  5831. } else if (propertyIsEnumerable(val2, key)) {
  5832. return false;
  5833. }
  5834. }
  5835. var symbolKeysB = objectGetOwnPropertySymbols(val2);
  5836. if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {
  5837. return false;
  5838. }
  5839. } else {
  5840. var _symbolKeysB = objectGetOwnPropertySymbols(val2);
  5841. if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {
  5842. return false;
  5843. }
  5844. }
  5845. }
  5846. if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {
  5847. return true;
  5848. } // Use memos to handle cycles.
  5849. if (memos === undefined) {
  5850. memos = {
  5851. val1: new Map(),
  5852. val2: new Map(),
  5853. position: 0
  5854. };
  5855. } else {
  5856. // We prevent up to two map.has(x) calls by directly retrieving the value
  5857. // and checking for undefined. The map can only contain numbers, so it is
  5858. // safe to check for undefined only.
  5859. var val2MemoA = memos.val1.get(val1);
  5860. if (val2MemoA !== undefined) {
  5861. var val2MemoB = memos.val2.get(val2);
  5862. if (val2MemoB !== undefined) {
  5863. return val2MemoA === val2MemoB;
  5864. }
  5865. }
  5866. memos.position++;
  5867. }
  5868. memos.val1.set(val1, memos.position);
  5869. memos.val2.set(val2, memos.position);
  5870. var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);
  5871. memos.val1.delete(val1);
  5872. memos.val2.delete(val2);
  5873. return areEq;
  5874. }
  5875. function setHasEqualElement(set, val1, strict, memo) {
  5876. // Go looking.
  5877. var setValues = arrayFromSet(set);
  5878. for (var i = 0; i < setValues.length; i++) {
  5879. var val2 = setValues[i];
  5880. if (innerDeepEqual(val1, val2, strict, memo)) {
  5881. // Remove the matching element to make sure we do not check that again.
  5882. set.delete(val2);
  5883. return true;
  5884. }
  5885. }
  5886. return false;
  5887. } // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using
  5888. // Sadly it is not possible to detect corresponding values properly in case the
  5889. // type is a string, number, bigint or boolean. The reason is that those values
  5890. // can match lots of different string values (e.g., 1n == '+00001').
  5891. function findLooseMatchingPrimitives(prim) {
  5892. switch (_typeof(prim)) {
  5893. case 'undefined':
  5894. return null;
  5895. case 'object':
  5896. // Only pass in null as object!
  5897. return undefined;
  5898. case 'symbol':
  5899. return false;
  5900. case 'string':
  5901. prim = +prim;
  5902. // Loose equal entries exist only if the string is possible to convert to
  5903. // a regular number and not NaN.
  5904. // Fall through
  5905. case 'number':
  5906. if (numberIsNaN(prim)) {
  5907. return false;
  5908. }
  5909. }
  5910. return true;
  5911. }
  5912. function setMightHaveLoosePrim(a, b, prim) {
  5913. var altValue = findLooseMatchingPrimitives(prim);
  5914. if (altValue != null) return altValue;
  5915. return b.has(altValue) && !a.has(altValue);
  5916. }
  5917. function mapMightHaveLoosePrim(a, b, prim, item, memo) {
  5918. var altValue = findLooseMatchingPrimitives(prim);
  5919. if (altValue != null) {
  5920. return altValue;
  5921. }
  5922. var curB = b.get(altValue);
  5923. if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {
  5924. return false;
  5925. }
  5926. return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);
  5927. }
  5928. function setEquiv(a, b, strict, memo) {
  5929. // This is a lazily initiated Set of entries which have to be compared
  5930. // pairwise.
  5931. var set = null;
  5932. var aValues = arrayFromSet(a);
  5933. for (var i = 0; i < aValues.length; i++) {
  5934. var val = aValues[i]; // Note: Checking for the objects first improves the performance for object
  5935. // heavy sets but it is a minor slow down for primitives. As they are fast
  5936. // to check this improves the worst case scenario instead.
  5937. if (_typeof(val) === 'object' && val !== null) {
  5938. if (set === null) {
  5939. set = new Set();
  5940. } // If the specified value doesn't exist in the second set its an not null
  5941. // object (or non strict only: a not matching primitive) we'll need to go
  5942. // hunting for something thats deep-(strict-)equal to it. To make this
  5943. // O(n log n) complexity we have to copy these values in a new set first.
  5944. set.add(val);
  5945. } else if (!b.has(val)) {
  5946. if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.
  5947. if (!setMightHaveLoosePrim(a, b, val)) {
  5948. return false;
  5949. }
  5950. if (set === null) {
  5951. set = new Set();
  5952. }
  5953. set.add(val);
  5954. }
  5955. }
  5956. if (set !== null) {
  5957. var bValues = arrayFromSet(b);
  5958. for (var _i = 0; _i < bValues.length; _i++) {
  5959. var _val = bValues[_i]; // We have to check if a primitive value is already
  5960. // matching and only if it's not, go hunting for it.
  5961. if (_typeof(_val) === 'object' && _val !== null) {
  5962. if (!setHasEqualElement(set, _val, strict, memo)) return false;
  5963. } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {
  5964. return false;
  5965. }
  5966. }
  5967. return set.size === 0;
  5968. }
  5969. return true;
  5970. }
  5971. function mapHasEqualEntry(set, map, key1, item1, strict, memo) {
  5972. // To be able to handle cases like:
  5973. // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])
  5974. // ... we need to consider *all* matching keys, not just the first we find.
  5975. var setValues = arrayFromSet(set);
  5976. for (var i = 0; i < setValues.length; i++) {
  5977. var key2 = setValues[i];
  5978. if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {
  5979. set.delete(key2);
  5980. return true;
  5981. }
  5982. }
  5983. return false;
  5984. }
  5985. function mapEquiv(a, b, strict, memo) {
  5986. var set = null;
  5987. var aEntries = arrayFromMap(a);
  5988. for (var i = 0; i < aEntries.length; i++) {
  5989. var _aEntries$i = _slicedToArray(aEntries[i], 2),
  5990. key = _aEntries$i[0],
  5991. item1 = _aEntries$i[1];
  5992. if (_typeof(key) === 'object' && key !== null) {
  5993. if (set === null) {
  5994. set = new Set();
  5995. }
  5996. set.add(key);
  5997. } else {
  5998. // By directly retrieving the value we prevent another b.has(key) check in
  5999. // almost all possible cases.
  6000. var item2 = b.get(key);
  6001. if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {
  6002. if (strict) return false; // Fast path to detect missing string, symbol, undefined and null
  6003. // keys.
  6004. if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;
  6005. if (set === null) {
  6006. set = new Set();
  6007. }
  6008. set.add(key);
  6009. }
  6010. }
  6011. }
  6012. if (set !== null) {
  6013. var bEntries = arrayFromMap(b);
  6014. for (var _i2 = 0; _i2 < bEntries.length; _i2++) {
  6015. var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),
  6016. key = _bEntries$_i[0],
  6017. item = _bEntries$_i[1];
  6018. if (_typeof(key) === 'object' && key !== null) {
  6019. if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;
  6020. } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {
  6021. return false;
  6022. }
  6023. }
  6024. return set.size === 0;
  6025. }
  6026. return true;
  6027. }
  6028. function objEquiv(a, b, strict, keys, memos, iterationType) {
  6029. // Sets and maps don't have their entries accessible via normal object
  6030. // properties.
  6031. var i = 0;
  6032. if (iterationType === kIsSet) {
  6033. if (!setEquiv(a, b, strict, memos)) {
  6034. return false;
  6035. }
  6036. } else if (iterationType === kIsMap) {
  6037. if (!mapEquiv(a, b, strict, memos)) {
  6038. return false;
  6039. }
  6040. } else if (iterationType === kIsArray) {
  6041. for (; i < a.length; i++) {
  6042. if (hasOwnProperty(a, i)) {
  6043. if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {
  6044. return false;
  6045. }
  6046. } else if (hasOwnProperty(b, i)) {
  6047. return false;
  6048. } else {
  6049. // Array is sparse.
  6050. var keysA = Object.keys(a);
  6051. for (; i < keysA.length; i++) {
  6052. var key = keysA[i];
  6053. if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {
  6054. return false;
  6055. }
  6056. }
  6057. if (keysA.length !== Object.keys(b).length) {
  6058. return false;
  6059. }
  6060. return true;
  6061. }
  6062. }
  6063. } // The pair must have equivalent values for every corresponding key.
  6064. // Possibly expensive deep test:
  6065. for (i = 0; i < keys.length; i++) {
  6066. var _key = keys[i];
  6067. if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {
  6068. return false;
  6069. }
  6070. }
  6071. return true;
  6072. }
  6073. function isDeepEqual(val1, val2) {
  6074. return innerDeepEqual(val1, val2, kLoose);
  6075. }
  6076. function isDeepStrictEqual(val1, val2) {
  6077. return innerDeepEqual(val1, val2, kStrict);
  6078. }
  6079. module.exports = {
  6080. isDeepEqual: isDeepEqual,
  6081. isDeepStrictEqual: isDeepStrictEqual
  6082. };
  6083. /***/ }),
  6084. /***/ 58162:
  6085. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  6086. "use strict";
  6087. // base-x encoding / decoding
  6088. // Copyright (c) 2018 base-x contributors
  6089. // Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)
  6090. // Distributed under the MIT software license, see the accompanying
  6091. // file LICENSE or http://www.opensource.org/licenses/mit-license.php.
  6092. // @ts-ignore
  6093. var _Buffer = (__webpack_require__(89509).Buffer)
  6094. function base (ALPHABET) {
  6095. if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }
  6096. var BASE_MAP = new Uint8Array(256)
  6097. for (var j = 0; j < BASE_MAP.length; j++) {
  6098. BASE_MAP[j] = 255
  6099. }
  6100. for (var i = 0; i < ALPHABET.length; i++) {
  6101. var x = ALPHABET.charAt(i)
  6102. var xc = x.charCodeAt(0)
  6103. if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }
  6104. BASE_MAP[xc] = i
  6105. }
  6106. var BASE = ALPHABET.length
  6107. var LEADER = ALPHABET.charAt(0)
  6108. var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up
  6109. var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up
  6110. function encode (source) {
  6111. if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }
  6112. if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }
  6113. if (source.length === 0) { return '' }
  6114. // Skip & count leading zeroes.
  6115. var zeroes = 0
  6116. var length = 0
  6117. var pbegin = 0
  6118. var pend = source.length
  6119. while (pbegin !== pend && source[pbegin] === 0) {
  6120. pbegin++
  6121. zeroes++
  6122. }
  6123. // Allocate enough space in big-endian base58 representation.
  6124. var size = ((pend - pbegin) * iFACTOR + 1) >>> 0
  6125. var b58 = new Uint8Array(size)
  6126. // Process the bytes.
  6127. while (pbegin !== pend) {
  6128. var carry = source[pbegin]
  6129. // Apply "b58 = b58 * 256 + ch".
  6130. var i = 0
  6131. for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {
  6132. carry += (256 * b58[it1]) >>> 0
  6133. b58[it1] = (carry % BASE) >>> 0
  6134. carry = (carry / BASE) >>> 0
  6135. }
  6136. if (carry !== 0) { throw new Error('Non-zero carry') }
  6137. length = i
  6138. pbegin++
  6139. }
  6140. // Skip leading zeroes in base58 result.
  6141. var it2 = size - length
  6142. while (it2 !== size && b58[it2] === 0) {
  6143. it2++
  6144. }
  6145. // Translate the result into a string.
  6146. var str = LEADER.repeat(zeroes)
  6147. for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }
  6148. return str
  6149. }
  6150. function decodeUnsafe (source) {
  6151. if (typeof source !== 'string') { throw new TypeError('Expected String') }
  6152. if (source.length === 0) { return _Buffer.alloc(0) }
  6153. var psz = 0
  6154. // Skip and count leading '1's.
  6155. var zeroes = 0
  6156. var length = 0
  6157. while (source[psz] === LEADER) {
  6158. zeroes++
  6159. psz++
  6160. }
  6161. // Allocate enough space in big-endian base256 representation.
  6162. var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.
  6163. var b256 = new Uint8Array(size)
  6164. // Process the characters.
  6165. while (source[psz]) {
  6166. // Decode character
  6167. var carry = BASE_MAP[source.charCodeAt(psz)]
  6168. // Invalid character
  6169. if (carry === 255) { return }
  6170. var i = 0
  6171. for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {
  6172. carry += (BASE * b256[it3]) >>> 0
  6173. b256[it3] = (carry % 256) >>> 0
  6174. carry = (carry / 256) >>> 0
  6175. }
  6176. if (carry !== 0) { throw new Error('Non-zero carry') }
  6177. length = i
  6178. psz++
  6179. }
  6180. // Skip leading zeroes in b256.
  6181. var it4 = size - length
  6182. while (it4 !== size && b256[it4] === 0) {
  6183. it4++
  6184. }
  6185. var vch = _Buffer.allocUnsafe(zeroes + (size - it4))
  6186. vch.fill(0x00, 0, zeroes)
  6187. var j = zeroes
  6188. while (it4 !== size) {
  6189. vch[j++] = b256[it4++]
  6190. }
  6191. return vch
  6192. }
  6193. function decode (string) {
  6194. var buffer = decodeUnsafe(string)
  6195. if (buffer) { return buffer }
  6196. throw new Error('Non-base' + BASE + ' character')
  6197. }
  6198. return {
  6199. encode: encode,
  6200. decodeUnsafe: decodeUnsafe,
  6201. decode: decode
  6202. }
  6203. }
  6204. module.exports = base
  6205. /***/ }),
  6206. /***/ 79742:
  6207. /***/ ((__unused_webpack_module, exports) => {
  6208. "use strict";
  6209. exports.byteLength = byteLength
  6210. exports.toByteArray = toByteArray
  6211. exports.fromByteArray = fromByteArray
  6212. var lookup = []
  6213. var revLookup = []
  6214. var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
  6215. var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
  6216. for (var i = 0, len = code.length; i < len; ++i) {
  6217. lookup[i] = code[i]
  6218. revLookup[code.charCodeAt(i)] = i
  6219. }
  6220. // Support decoding URL-safe base64 strings, as Node.js does.
  6221. // See: https://en.wikipedia.org/wiki/Base64#URL_applications
  6222. revLookup['-'.charCodeAt(0)] = 62
  6223. revLookup['_'.charCodeAt(0)] = 63
  6224. function getLens (b64) {
  6225. var len = b64.length
  6226. if (len % 4 > 0) {
  6227. throw new Error('Invalid string. Length must be a multiple of 4')
  6228. }
  6229. // Trim off extra bytes after placeholder bytes are found
  6230. // See: https://github.com/beatgammit/base64-js/issues/42
  6231. var validLen = b64.indexOf('=')
  6232. if (validLen === -1) validLen = len
  6233. var placeHoldersLen = validLen === len
  6234. ? 0
  6235. : 4 - (validLen % 4)
  6236. return [validLen, placeHoldersLen]
  6237. }
  6238. // base64 is 4/3 + up to two characters of the original data
  6239. function byteLength (b64) {
  6240. var lens = getLens(b64)
  6241. var validLen = lens[0]
  6242. var placeHoldersLen = lens[1]
  6243. return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
  6244. }
  6245. function _byteLength (b64, validLen, placeHoldersLen) {
  6246. return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
  6247. }
  6248. function toByteArray (b64) {
  6249. var tmp
  6250. var lens = getLens(b64)
  6251. var validLen = lens[0]
  6252. var placeHoldersLen = lens[1]
  6253. var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
  6254. var curByte = 0
  6255. // if there are placeholders, only get up to the last complete 4 chars
  6256. var len = placeHoldersLen > 0
  6257. ? validLen - 4
  6258. : validLen
  6259. var i
  6260. for (i = 0; i < len; i += 4) {
  6261. tmp =
  6262. (revLookup[b64.charCodeAt(i)] << 18) |
  6263. (revLookup[b64.charCodeAt(i + 1)] << 12) |
  6264. (revLookup[b64.charCodeAt(i + 2)] << 6) |
  6265. revLookup[b64.charCodeAt(i + 3)]
  6266. arr[curByte++] = (tmp >> 16) & 0xFF
  6267. arr[curByte++] = (tmp >> 8) & 0xFF
  6268. arr[curByte++] = tmp & 0xFF
  6269. }
  6270. if (placeHoldersLen === 2) {
  6271. tmp =
  6272. (revLookup[b64.charCodeAt(i)] << 2) |
  6273. (revLookup[b64.charCodeAt(i + 1)] >> 4)
  6274. arr[curByte++] = tmp & 0xFF
  6275. }
  6276. if (placeHoldersLen === 1) {
  6277. tmp =
  6278. (revLookup[b64.charCodeAt(i)] << 10) |
  6279. (revLookup[b64.charCodeAt(i + 1)] << 4) |
  6280. (revLookup[b64.charCodeAt(i + 2)] >> 2)
  6281. arr[curByte++] = (tmp >> 8) & 0xFF
  6282. arr[curByte++] = tmp & 0xFF
  6283. }
  6284. return arr
  6285. }
  6286. function tripletToBase64 (num) {
  6287. return lookup[num >> 18 & 0x3F] +
  6288. lookup[num >> 12 & 0x3F] +
  6289. lookup[num >> 6 & 0x3F] +
  6290. lookup[num & 0x3F]
  6291. }
  6292. function encodeChunk (uint8, start, end) {
  6293. var tmp
  6294. var output = []
  6295. for (var i = start; i < end; i += 3) {
  6296. tmp =
  6297. ((uint8[i] << 16) & 0xFF0000) +
  6298. ((uint8[i + 1] << 8) & 0xFF00) +
  6299. (uint8[i + 2] & 0xFF)
  6300. output.push(tripletToBase64(tmp))
  6301. }
  6302. return output.join('')
  6303. }
  6304. function fromByteArray (uint8) {
  6305. var tmp
  6306. var len = uint8.length
  6307. var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
  6308. var parts = []
  6309. var maxChunkLength = 16383 // must be multiple of 3
  6310. // go through the array every three bytes, we'll deal with trailing stuff later
  6311. for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
  6312. parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
  6313. }
  6314. // pad the end with zeros, but make sure to not forget the extra bytes
  6315. if (extraBytes === 1) {
  6316. tmp = uint8[len - 1]
  6317. parts.push(
  6318. lookup[tmp >> 2] +
  6319. lookup[(tmp << 4) & 0x3F] +
  6320. '=='
  6321. )
  6322. } else if (extraBytes === 2) {
  6323. tmp = (uint8[len - 2] << 8) + uint8[len - 1]
  6324. parts.push(
  6325. lookup[tmp >> 10] +
  6326. lookup[(tmp >> 4) & 0x3F] +
  6327. lookup[(tmp << 2) & 0x3F] +
  6328. '='
  6329. )
  6330. }
  6331. return parts.join('')
  6332. }
  6333. /***/ }),
  6334. /***/ 24736:
  6335. /***/ ((module, exports, __webpack_require__) => {
  6336. /* module decorator */ module = __webpack_require__.nmd(module);
  6337. var __WEBPACK_AMD_DEFINE_RESULT__;var bigInt = (function (undefined) {
  6338. "use strict";
  6339. var BASE = 1e7,
  6340. LOG_BASE = 7,
  6341. MAX_INT = 9007199254740992,
  6342. MAX_INT_ARR = smallToArray(MAX_INT),
  6343. DEFAULT_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz";
  6344. var supportsNativeBigInt = typeof BigInt === "function";
  6345. function Integer(v, radix, alphabet, caseSensitive) {
  6346. if (typeof v === "undefined") return Integer[0];
  6347. if (typeof radix !== "undefined") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive);
  6348. return parseValue(v);
  6349. }
  6350. function BigInteger(value, sign) {
  6351. this.value = value;
  6352. this.sign = sign;
  6353. this.isSmall = false;
  6354. }
  6355. BigInteger.prototype = Object.create(Integer.prototype);
  6356. function SmallInteger(value) {
  6357. this.value = value;
  6358. this.sign = value < 0;
  6359. this.isSmall = true;
  6360. }
  6361. SmallInteger.prototype = Object.create(Integer.prototype);
  6362. function NativeBigInt(value) {
  6363. this.value = value;
  6364. }
  6365. NativeBigInt.prototype = Object.create(Integer.prototype);
  6366. function isPrecise(n) {
  6367. return -MAX_INT < n && n < MAX_INT;
  6368. }
  6369. function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes
  6370. if (n < 1e7)
  6371. return [n];
  6372. if (n < 1e14)
  6373. return [n % 1e7, Math.floor(n / 1e7)];
  6374. return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];
  6375. }
  6376. function arrayToSmall(arr) { // If BASE changes this function may need to change
  6377. trim(arr);
  6378. var length = arr.length;
  6379. if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {
  6380. switch (length) {
  6381. case 0: return 0;
  6382. case 1: return arr[0];
  6383. case 2: return arr[0] + arr[1] * BASE;
  6384. default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;
  6385. }
  6386. }
  6387. return arr;
  6388. }
  6389. function trim(v) {
  6390. var i = v.length;
  6391. while (v[--i] === 0);
  6392. v.length = i + 1;
  6393. }
  6394. function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger
  6395. var x = new Array(length);
  6396. var i = -1;
  6397. while (++i < length) {
  6398. x[i] = 0;
  6399. }
  6400. return x;
  6401. }
  6402. function truncate(n) {
  6403. if (n > 0) return Math.floor(n);
  6404. return Math.ceil(n);
  6405. }
  6406. function add(a, b) { // assumes a and b are arrays with a.length >= b.length
  6407. var l_a = a.length,
  6408. l_b = b.length,
  6409. r = new Array(l_a),
  6410. carry = 0,
  6411. base = BASE,
  6412. sum, i;
  6413. for (i = 0; i < l_b; i++) {
  6414. sum = a[i] + b[i] + carry;
  6415. carry = sum >= base ? 1 : 0;
  6416. r[i] = sum - carry * base;
  6417. }
  6418. while (i < l_a) {
  6419. sum = a[i] + carry;
  6420. carry = sum === base ? 1 : 0;
  6421. r[i++] = sum - carry * base;
  6422. }
  6423. if (carry > 0) r.push(carry);
  6424. return r;
  6425. }
  6426. function addAny(a, b) {
  6427. if (a.length >= b.length) return add(a, b);
  6428. return add(b, a);
  6429. }
  6430. function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT
  6431. var l = a.length,
  6432. r = new Array(l),
  6433. base = BASE,
  6434. sum, i;
  6435. for (i = 0; i < l; i++) {
  6436. sum = a[i] - base + carry;
  6437. carry = Math.floor(sum / base);
  6438. r[i] = sum - carry * base;
  6439. carry += 1;
  6440. }
  6441. while (carry > 0) {
  6442. r[i++] = carry % base;
  6443. carry = Math.floor(carry / base);
  6444. }
  6445. return r;
  6446. }
  6447. BigInteger.prototype.add = function (v) {
  6448. var n = parseValue(v);
  6449. if (this.sign !== n.sign) {
  6450. return this.subtract(n.negate());
  6451. }
  6452. var a = this.value, b = n.value;
  6453. if (n.isSmall) {
  6454. return new BigInteger(addSmall(a, Math.abs(b)), this.sign);
  6455. }
  6456. return new BigInteger(addAny(a, b), this.sign);
  6457. };
  6458. BigInteger.prototype.plus = BigInteger.prototype.add;
  6459. SmallInteger.prototype.add = function (v) {
  6460. var n = parseValue(v);
  6461. var a = this.value;
  6462. if (a < 0 !== n.sign) {
  6463. return this.subtract(n.negate());
  6464. }
  6465. var b = n.value;
  6466. if (n.isSmall) {
  6467. if (isPrecise(a + b)) return new SmallInteger(a + b);
  6468. b = smallToArray(Math.abs(b));
  6469. }
  6470. return new BigInteger(addSmall(b, Math.abs(a)), a < 0);
  6471. };
  6472. SmallInteger.prototype.plus = SmallInteger.prototype.add;
  6473. NativeBigInt.prototype.add = function (v) {
  6474. return new NativeBigInt(this.value + parseValue(v).value);
  6475. }
  6476. NativeBigInt.prototype.plus = NativeBigInt.prototype.add;
  6477. function subtract(a, b) { // assumes a and b are arrays with a >= b
  6478. var a_l = a.length,
  6479. b_l = b.length,
  6480. r = new Array(a_l),
  6481. borrow = 0,
  6482. base = BASE,
  6483. i, difference;
  6484. for (i = 0; i < b_l; i++) {
  6485. difference = a[i] - borrow - b[i];
  6486. if (difference < 0) {
  6487. difference += base;
  6488. borrow = 1;
  6489. } else borrow = 0;
  6490. r[i] = difference;
  6491. }
  6492. for (i = b_l; i < a_l; i++) {
  6493. difference = a[i] - borrow;
  6494. if (difference < 0) difference += base;
  6495. else {
  6496. r[i++] = difference;
  6497. break;
  6498. }
  6499. r[i] = difference;
  6500. }
  6501. for (; i < a_l; i++) {
  6502. r[i] = a[i];
  6503. }
  6504. trim(r);
  6505. return r;
  6506. }
  6507. function subtractAny(a, b, sign) {
  6508. var value;
  6509. if (compareAbs(a, b) >= 0) {
  6510. value = subtract(a, b);
  6511. } else {
  6512. value = subtract(b, a);
  6513. sign = !sign;
  6514. }
  6515. value = arrayToSmall(value);
  6516. if (typeof value === "number") {
  6517. if (sign) value = -value;
  6518. return new SmallInteger(value);
  6519. }
  6520. return new BigInteger(value, sign);
  6521. }
  6522. function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT
  6523. var l = a.length,
  6524. r = new Array(l),
  6525. carry = -b,
  6526. base = BASE,
  6527. i, difference;
  6528. for (i = 0; i < l; i++) {
  6529. difference = a[i] + carry;
  6530. carry = Math.floor(difference / base);
  6531. difference %= base;
  6532. r[i] = difference < 0 ? difference + base : difference;
  6533. }
  6534. r = arrayToSmall(r);
  6535. if (typeof r === "number") {
  6536. if (sign) r = -r;
  6537. return new SmallInteger(r);
  6538. } return new BigInteger(r, sign);
  6539. }
  6540. BigInteger.prototype.subtract = function (v) {
  6541. var n = parseValue(v);
  6542. if (this.sign !== n.sign) {
  6543. return this.add(n.negate());
  6544. }
  6545. var a = this.value, b = n.value;
  6546. if (n.isSmall)
  6547. return subtractSmall(a, Math.abs(b), this.sign);
  6548. return subtractAny(a, b, this.sign);
  6549. };
  6550. BigInteger.prototype.minus = BigInteger.prototype.subtract;
  6551. SmallInteger.prototype.subtract = function (v) {
  6552. var n = parseValue(v);
  6553. var a = this.value;
  6554. if (a < 0 !== n.sign) {
  6555. return this.add(n.negate());
  6556. }
  6557. var b = n.value;
  6558. if (n.isSmall) {
  6559. return new SmallInteger(a - b);
  6560. }
  6561. return subtractSmall(b, Math.abs(a), a >= 0);
  6562. };
  6563. SmallInteger.prototype.minus = SmallInteger.prototype.subtract;
  6564. NativeBigInt.prototype.subtract = function (v) {
  6565. return new NativeBigInt(this.value - parseValue(v).value);
  6566. }
  6567. NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract;
  6568. BigInteger.prototype.negate = function () {
  6569. return new BigInteger(this.value, !this.sign);
  6570. };
  6571. SmallInteger.prototype.negate = function () {
  6572. var sign = this.sign;
  6573. var small = new SmallInteger(-this.value);
  6574. small.sign = !sign;
  6575. return small;
  6576. };
  6577. NativeBigInt.prototype.negate = function () {
  6578. return new NativeBigInt(-this.value);
  6579. }
  6580. BigInteger.prototype.abs = function () {
  6581. return new BigInteger(this.value, false);
  6582. };
  6583. SmallInteger.prototype.abs = function () {
  6584. return new SmallInteger(Math.abs(this.value));
  6585. };
  6586. NativeBigInt.prototype.abs = function () {
  6587. return new NativeBigInt(this.value >= 0 ? this.value : -this.value);
  6588. }
  6589. function multiplyLong(a, b) {
  6590. var a_l = a.length,
  6591. b_l = b.length,
  6592. l = a_l + b_l,
  6593. r = createArray(l),
  6594. base = BASE,
  6595. product, carry, i, a_i, b_j;
  6596. for (i = 0; i < a_l; ++i) {
  6597. a_i = a[i];
  6598. for (var j = 0; j < b_l; ++j) {
  6599. b_j = b[j];
  6600. product = a_i * b_j + r[i + j];
  6601. carry = Math.floor(product / base);
  6602. r[i + j] = product - carry * base;
  6603. r[i + j + 1] += carry;
  6604. }
  6605. }
  6606. trim(r);
  6607. return r;
  6608. }
  6609. function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE
  6610. var l = a.length,
  6611. r = new Array(l),
  6612. base = BASE,
  6613. carry = 0,
  6614. product, i;
  6615. for (i = 0; i < l; i++) {
  6616. product = a[i] * b + carry;
  6617. carry = Math.floor(product / base);
  6618. r[i] = product - carry * base;
  6619. }
  6620. while (carry > 0) {
  6621. r[i++] = carry % base;
  6622. carry = Math.floor(carry / base);
  6623. }
  6624. return r;
  6625. }
  6626. function shiftLeft(x, n) {
  6627. var r = [];
  6628. while (n-- > 0) r.push(0);
  6629. return r.concat(x);
  6630. }
  6631. function multiplyKaratsuba(x, y) {
  6632. var n = Math.max(x.length, y.length);
  6633. if (n <= 30) return multiplyLong(x, y);
  6634. n = Math.ceil(n / 2);
  6635. var b = x.slice(n),
  6636. a = x.slice(0, n),
  6637. d = y.slice(n),
  6638. c = y.slice(0, n);
  6639. var ac = multiplyKaratsuba(a, c),
  6640. bd = multiplyKaratsuba(b, d),
  6641. abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));
  6642. var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));
  6643. trim(product);
  6644. return product;
  6645. }
  6646. // The following function is derived from a surface fit of a graph plotting the performance difference
  6647. // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.
  6648. function useKaratsuba(l1, l2) {
  6649. return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;
  6650. }
  6651. BigInteger.prototype.multiply = function (v) {
  6652. var n = parseValue(v),
  6653. a = this.value, b = n.value,
  6654. sign = this.sign !== n.sign,
  6655. abs;
  6656. if (n.isSmall) {
  6657. if (b === 0) return Integer[0];
  6658. if (b === 1) return this;
  6659. if (b === -1) return this.negate();
  6660. abs = Math.abs(b);
  6661. if (abs < BASE) {
  6662. return new BigInteger(multiplySmall(a, abs), sign);
  6663. }
  6664. b = smallToArray(abs);
  6665. }
  6666. if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes
  6667. return new BigInteger(multiplyKaratsuba(a, b), sign);
  6668. return new BigInteger(multiplyLong(a, b), sign);
  6669. };
  6670. BigInteger.prototype.times = BigInteger.prototype.multiply;
  6671. function multiplySmallAndArray(a, b, sign) { // a >= 0
  6672. if (a < BASE) {
  6673. return new BigInteger(multiplySmall(b, a), sign);
  6674. }
  6675. return new BigInteger(multiplyLong(b, smallToArray(a)), sign);
  6676. }
  6677. SmallInteger.prototype._multiplyBySmall = function (a) {
  6678. if (isPrecise(a.value * this.value)) {
  6679. return new SmallInteger(a.value * this.value);
  6680. }
  6681. return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);
  6682. };
  6683. BigInteger.prototype._multiplyBySmall = function (a) {
  6684. if (a.value === 0) return Integer[0];
  6685. if (a.value === 1) return this;
  6686. if (a.value === -1) return this.negate();
  6687. return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);
  6688. };
  6689. SmallInteger.prototype.multiply = function (v) {
  6690. return parseValue(v)._multiplyBySmall(this);
  6691. };
  6692. SmallInteger.prototype.times = SmallInteger.prototype.multiply;
  6693. NativeBigInt.prototype.multiply = function (v) {
  6694. return new NativeBigInt(this.value * parseValue(v).value);
  6695. }
  6696. NativeBigInt.prototype.times = NativeBigInt.prototype.multiply;
  6697. function square(a) {
  6698. //console.assert(2 * BASE * BASE < MAX_INT);
  6699. var l = a.length,
  6700. r = createArray(l + l),
  6701. base = BASE,
  6702. product, carry, i, a_i, a_j;
  6703. for (i = 0; i < l; i++) {
  6704. a_i = a[i];
  6705. carry = 0 - a_i * a_i;
  6706. for (var j = i; j < l; j++) {
  6707. a_j = a[j];
  6708. product = 2 * (a_i * a_j) + r[i + j] + carry;
  6709. carry = Math.floor(product / base);
  6710. r[i + j] = product - carry * base;
  6711. }
  6712. r[i + l] = carry;
  6713. }
  6714. trim(r);
  6715. return r;
  6716. }
  6717. BigInteger.prototype.square = function () {
  6718. return new BigInteger(square(this.value), false);
  6719. };
  6720. SmallInteger.prototype.square = function () {
  6721. var value = this.value * this.value;
  6722. if (isPrecise(value)) return new SmallInteger(value);
  6723. return new BigInteger(square(smallToArray(Math.abs(this.value))), false);
  6724. };
  6725. NativeBigInt.prototype.square = function (v) {
  6726. return new NativeBigInt(this.value * this.value);
  6727. }
  6728. function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.
  6729. var a_l = a.length,
  6730. b_l = b.length,
  6731. base = BASE,
  6732. result = createArray(b.length),
  6733. divisorMostSignificantDigit = b[b_l - 1],
  6734. // normalization
  6735. lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),
  6736. remainder = multiplySmall(a, lambda),
  6737. divisor = multiplySmall(b, lambda),
  6738. quotientDigit, shift, carry, borrow, i, l, q;
  6739. if (remainder.length <= a_l) remainder.push(0);
  6740. divisor.push(0);
  6741. divisorMostSignificantDigit = divisor[b_l - 1];
  6742. for (shift = a_l - b_l; shift >= 0; shift--) {
  6743. quotientDigit = base - 1;
  6744. if (remainder[shift + b_l] !== divisorMostSignificantDigit) {
  6745. quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);
  6746. }
  6747. // quotientDigit <= base - 1
  6748. carry = 0;
  6749. borrow = 0;
  6750. l = divisor.length;
  6751. for (i = 0; i < l; i++) {
  6752. carry += quotientDigit * divisor[i];
  6753. q = Math.floor(carry / base);
  6754. borrow += remainder[shift + i] - (carry - q * base);
  6755. carry = q;
  6756. if (borrow < 0) {
  6757. remainder[shift + i] = borrow + base;
  6758. borrow = -1;
  6759. } else {
  6760. remainder[shift + i] = borrow;
  6761. borrow = 0;
  6762. }
  6763. }
  6764. while (borrow !== 0) {
  6765. quotientDigit -= 1;
  6766. carry = 0;
  6767. for (i = 0; i < l; i++) {
  6768. carry += remainder[shift + i] - base + divisor[i];
  6769. if (carry < 0) {
  6770. remainder[shift + i] = carry + base;
  6771. carry = 0;
  6772. } else {
  6773. remainder[shift + i] = carry;
  6774. carry = 1;
  6775. }
  6776. }
  6777. borrow += carry;
  6778. }
  6779. result[shift] = quotientDigit;
  6780. }
  6781. // denormalization
  6782. remainder = divModSmall(remainder, lambda)[0];
  6783. return [arrayToSmall(result), arrayToSmall(remainder)];
  6784. }
  6785. function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/
  6786. // Performs faster than divMod1 on larger input sizes.
  6787. var a_l = a.length,
  6788. b_l = b.length,
  6789. result = [],
  6790. part = [],
  6791. base = BASE,
  6792. guess, xlen, highx, highy, check;
  6793. while (a_l) {
  6794. part.unshift(a[--a_l]);
  6795. trim(part);
  6796. if (compareAbs(part, b) < 0) {
  6797. result.push(0);
  6798. continue;
  6799. }
  6800. xlen = part.length;
  6801. highx = part[xlen - 1] * base + part[xlen - 2];
  6802. highy = b[b_l - 1] * base + b[b_l - 2];
  6803. if (xlen > b_l) {
  6804. highx = (highx + 1) * base;
  6805. }
  6806. guess = Math.ceil(highx / highy);
  6807. do {
  6808. check = multiplySmall(b, guess);
  6809. if (compareAbs(check, part) <= 0) break;
  6810. guess--;
  6811. } while (guess);
  6812. result.push(guess);
  6813. part = subtract(part, check);
  6814. }
  6815. result.reverse();
  6816. return [arrayToSmall(result), arrayToSmall(part)];
  6817. }
  6818. function divModSmall(value, lambda) {
  6819. var length = value.length,
  6820. quotient = createArray(length),
  6821. base = BASE,
  6822. i, q, remainder, divisor;
  6823. remainder = 0;
  6824. for (i = length - 1; i >= 0; --i) {
  6825. divisor = remainder * base + value[i];
  6826. q = truncate(divisor / lambda);
  6827. remainder = divisor - q * lambda;
  6828. quotient[i] = q | 0;
  6829. }
  6830. return [quotient, remainder | 0];
  6831. }
  6832. function divModAny(self, v) {
  6833. var value, n = parseValue(v);
  6834. if (supportsNativeBigInt) {
  6835. return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)];
  6836. }
  6837. var a = self.value, b = n.value;
  6838. var quotient;
  6839. if (b === 0) throw new Error("Cannot divide by zero");
  6840. if (self.isSmall) {
  6841. if (n.isSmall) {
  6842. return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];
  6843. }
  6844. return [Integer[0], self];
  6845. }
  6846. if (n.isSmall) {
  6847. if (b === 1) return [self, Integer[0]];
  6848. if (b == -1) return [self.negate(), Integer[0]];
  6849. var abs = Math.abs(b);
  6850. if (abs < BASE) {
  6851. value = divModSmall(a, abs);
  6852. quotient = arrayToSmall(value[0]);
  6853. var remainder = value[1];
  6854. if (self.sign) remainder = -remainder;
  6855. if (typeof quotient === "number") {
  6856. if (self.sign !== n.sign) quotient = -quotient;
  6857. return [new SmallInteger(quotient), new SmallInteger(remainder)];
  6858. }
  6859. return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];
  6860. }
  6861. b = smallToArray(abs);
  6862. }
  6863. var comparison = compareAbs(a, b);
  6864. if (comparison === -1) return [Integer[0], self];
  6865. if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];
  6866. // divMod1 is faster on smaller input sizes
  6867. if (a.length + b.length <= 200)
  6868. value = divMod1(a, b);
  6869. else value = divMod2(a, b);
  6870. quotient = value[0];
  6871. var qSign = self.sign !== n.sign,
  6872. mod = value[1],
  6873. mSign = self.sign;
  6874. if (typeof quotient === "number") {
  6875. if (qSign) quotient = -quotient;
  6876. quotient = new SmallInteger(quotient);
  6877. } else quotient = new BigInteger(quotient, qSign);
  6878. if (typeof mod === "number") {
  6879. if (mSign) mod = -mod;
  6880. mod = new SmallInteger(mod);
  6881. } else mod = new BigInteger(mod, mSign);
  6882. return [quotient, mod];
  6883. }
  6884. BigInteger.prototype.divmod = function (v) {
  6885. var result = divModAny(this, v);
  6886. return {
  6887. quotient: result[0],
  6888. remainder: result[1]
  6889. };
  6890. };
  6891. NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod;
  6892. BigInteger.prototype.divide = function (v) {
  6893. return divModAny(this, v)[0];
  6894. };
  6895. NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {
  6896. return new NativeBigInt(this.value / parseValue(v).value);
  6897. };
  6898. SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;
  6899. BigInteger.prototype.mod = function (v) {
  6900. return divModAny(this, v)[1];
  6901. };
  6902. NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {
  6903. return new NativeBigInt(this.value % parseValue(v).value);
  6904. };
  6905. SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
  6906. BigInteger.prototype.pow = function (v) {
  6907. var n = parseValue(v),
  6908. a = this.value,
  6909. b = n.value,
  6910. value, x, y;
  6911. if (b === 0) return Integer[1];
  6912. if (a === 0) return Integer[0];
  6913. if (a === 1) return Integer[1];
  6914. if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];
  6915. if (n.sign) {
  6916. return Integer[0];
  6917. }
  6918. if (!n.isSmall) throw new Error("The exponent " + n.toString() + " is too large.");
  6919. if (this.isSmall) {
  6920. if (isPrecise(value = Math.pow(a, b)))
  6921. return new SmallInteger(truncate(value));
  6922. }
  6923. x = this;
  6924. y = Integer[1];
  6925. while (true) {
  6926. if (b & 1 === 1) {
  6927. y = y.times(x);
  6928. --b;
  6929. }
  6930. if (b === 0) break;
  6931. b /= 2;
  6932. x = x.square();
  6933. }
  6934. return y;
  6935. };
  6936. SmallInteger.prototype.pow = BigInteger.prototype.pow;
  6937. NativeBigInt.prototype.pow = function (v) {
  6938. var n = parseValue(v);
  6939. var a = this.value, b = n.value;
  6940. var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);
  6941. if (b === _0) return Integer[1];
  6942. if (a === _0) return Integer[0];
  6943. if (a === _1) return Integer[1];
  6944. if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];
  6945. if (n.isNegative()) return new NativeBigInt(_0);
  6946. var x = this;
  6947. var y = Integer[1];
  6948. while (true) {
  6949. if ((b & _1) === _1) {
  6950. y = y.times(x);
  6951. --b;
  6952. }
  6953. if (b === _0) break;
  6954. b /= _2;
  6955. x = x.square();
  6956. }
  6957. return y;
  6958. }
  6959. BigInteger.prototype.modPow = function (exp, mod) {
  6960. exp = parseValue(exp);
  6961. mod = parseValue(mod);
  6962. if (mod.isZero()) throw new Error("Cannot take modPow with modulus 0");
  6963. var r = Integer[1],
  6964. base = this.mod(mod);
  6965. if (exp.isNegative()) {
  6966. exp = exp.multiply(Integer[-1]);
  6967. base = base.modInv(mod);
  6968. }
  6969. while (exp.isPositive()) {
  6970. if (base.isZero()) return Integer[0];
  6971. if (exp.isOdd()) r = r.multiply(base).mod(mod);
  6972. exp = exp.divide(2);
  6973. base = base.square().mod(mod);
  6974. }
  6975. return r;
  6976. };
  6977. NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow;
  6978. function compareAbs(a, b) {
  6979. if (a.length !== b.length) {
  6980. return a.length > b.length ? 1 : -1;
  6981. }
  6982. for (var i = a.length - 1; i >= 0; i--) {
  6983. if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;
  6984. }
  6985. return 0;
  6986. }
  6987. BigInteger.prototype.compareAbs = function (v) {
  6988. var n = parseValue(v),
  6989. a = this.value,
  6990. b = n.value;
  6991. if (n.isSmall) return 1;
  6992. return compareAbs(a, b);
  6993. };
  6994. SmallInteger.prototype.compareAbs = function (v) {
  6995. var n = parseValue(v),
  6996. a = Math.abs(this.value),
  6997. b = n.value;
  6998. if (n.isSmall) {
  6999. b = Math.abs(b);
  7000. return a === b ? 0 : a > b ? 1 : -1;
  7001. }
  7002. return -1;
  7003. };
  7004. NativeBigInt.prototype.compareAbs = function (v) {
  7005. var a = this.value;
  7006. var b = parseValue(v).value;
  7007. a = a >= 0 ? a : -a;
  7008. b = b >= 0 ? b : -b;
  7009. return a === b ? 0 : a > b ? 1 : -1;
  7010. }
  7011. BigInteger.prototype.compare = function (v) {
  7012. // See discussion about comparison with Infinity:
  7013. // https://github.com/peterolson/BigInteger.js/issues/61
  7014. if (v === Infinity) {
  7015. return -1;
  7016. }
  7017. if (v === -Infinity) {
  7018. return 1;
  7019. }
  7020. var n = parseValue(v),
  7021. a = this.value,
  7022. b = n.value;
  7023. if (this.sign !== n.sign) {
  7024. return n.sign ? 1 : -1;
  7025. }
  7026. if (n.isSmall) {
  7027. return this.sign ? -1 : 1;
  7028. }
  7029. return compareAbs(a, b) * (this.sign ? -1 : 1);
  7030. };
  7031. BigInteger.prototype.compareTo = BigInteger.prototype.compare;
  7032. SmallInteger.prototype.compare = function (v) {
  7033. if (v === Infinity) {
  7034. return -1;
  7035. }
  7036. if (v === -Infinity) {
  7037. return 1;
  7038. }
  7039. var n = parseValue(v),
  7040. a = this.value,
  7041. b = n.value;
  7042. if (n.isSmall) {
  7043. return a == b ? 0 : a > b ? 1 : -1;
  7044. }
  7045. if (a < 0 !== n.sign) {
  7046. return a < 0 ? -1 : 1;
  7047. }
  7048. return a < 0 ? 1 : -1;
  7049. };
  7050. SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;
  7051. NativeBigInt.prototype.compare = function (v) {
  7052. if (v === Infinity) {
  7053. return -1;
  7054. }
  7055. if (v === -Infinity) {
  7056. return 1;
  7057. }
  7058. var a = this.value;
  7059. var b = parseValue(v).value;
  7060. return a === b ? 0 : a > b ? 1 : -1;
  7061. }
  7062. NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare;
  7063. BigInteger.prototype.equals = function (v) {
  7064. return this.compare(v) === 0;
  7065. };
  7066. NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;
  7067. BigInteger.prototype.notEquals = function (v) {
  7068. return this.compare(v) !== 0;
  7069. };
  7070. NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;
  7071. BigInteger.prototype.greater = function (v) {
  7072. return this.compare(v) > 0;
  7073. };
  7074. NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;
  7075. BigInteger.prototype.lesser = function (v) {
  7076. return this.compare(v) < 0;
  7077. };
  7078. NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;
  7079. BigInteger.prototype.greaterOrEquals = function (v) {
  7080. return this.compare(v) >= 0;
  7081. };
  7082. NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;
  7083. BigInteger.prototype.lesserOrEquals = function (v) {
  7084. return this.compare(v) <= 0;
  7085. };
  7086. NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;
  7087. BigInteger.prototype.isEven = function () {
  7088. return (this.value[0] & 1) === 0;
  7089. };
  7090. SmallInteger.prototype.isEven = function () {
  7091. return (this.value & 1) === 0;
  7092. };
  7093. NativeBigInt.prototype.isEven = function () {
  7094. return (this.value & BigInt(1)) === BigInt(0);
  7095. }
  7096. BigInteger.prototype.isOdd = function () {
  7097. return (this.value[0] & 1) === 1;
  7098. };
  7099. SmallInteger.prototype.isOdd = function () {
  7100. return (this.value & 1) === 1;
  7101. };
  7102. NativeBigInt.prototype.isOdd = function () {
  7103. return (this.value & BigInt(1)) === BigInt(1);
  7104. }
  7105. BigInteger.prototype.isPositive = function () {
  7106. return !this.sign;
  7107. };
  7108. SmallInteger.prototype.isPositive = function () {
  7109. return this.value > 0;
  7110. };
  7111. NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive;
  7112. BigInteger.prototype.isNegative = function () {
  7113. return this.sign;
  7114. };
  7115. SmallInteger.prototype.isNegative = function () {
  7116. return this.value < 0;
  7117. };
  7118. NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative;
  7119. BigInteger.prototype.isUnit = function () {
  7120. return false;
  7121. };
  7122. SmallInteger.prototype.isUnit = function () {
  7123. return Math.abs(this.value) === 1;
  7124. };
  7125. NativeBigInt.prototype.isUnit = function () {
  7126. return this.abs().value === BigInt(1);
  7127. }
  7128. BigInteger.prototype.isZero = function () {
  7129. return false;
  7130. };
  7131. SmallInteger.prototype.isZero = function () {
  7132. return this.value === 0;
  7133. };
  7134. NativeBigInt.prototype.isZero = function () {
  7135. return this.value === BigInt(0);
  7136. }
  7137. BigInteger.prototype.isDivisibleBy = function (v) {
  7138. var n = parseValue(v);
  7139. if (n.isZero()) return false;
  7140. if (n.isUnit()) return true;
  7141. if (n.compareAbs(2) === 0) return this.isEven();
  7142. return this.mod(n).isZero();
  7143. };
  7144. NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;
  7145. function isBasicPrime(v) {
  7146. var n = v.abs();
  7147. if (n.isUnit()) return false;
  7148. if (n.equals(2) || n.equals(3) || n.equals(5)) return true;
  7149. if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;
  7150. if (n.lesser(49)) return true;
  7151. // we don't know if it's prime: let the other functions figure it out
  7152. }
  7153. function millerRabinTest(n, a) {
  7154. var nPrev = n.prev(),
  7155. b = nPrev,
  7156. r = 0,
  7157. d, t, i, x;
  7158. while (b.isEven()) b = b.divide(2), r++;
  7159. next: for (i = 0; i < a.length; i++) {
  7160. if (n.lesser(a[i])) continue;
  7161. x = bigInt(a[i]).modPow(b, n);
  7162. if (x.isUnit() || x.equals(nPrev)) continue;
  7163. for (d = r - 1; d != 0; d--) {
  7164. x = x.square().mod(n);
  7165. if (x.isUnit()) return false;
  7166. if (x.equals(nPrev)) continue next;
  7167. }
  7168. return false;
  7169. }
  7170. return true;
  7171. }
  7172. // Set "strict" to true to force GRH-supported lower bound of 2*log(N)^2
  7173. BigInteger.prototype.isPrime = function (strict) {
  7174. var isPrime = isBasicPrime(this);
  7175. if (isPrime !== undefined) return isPrime;
  7176. var n = this.abs();
  7177. var bits = n.bitLength();
  7178. if (bits <= 64)
  7179. return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);
  7180. var logN = Math.log(2) * bits.toJSNumber();
  7181. var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);
  7182. for (var a = [], i = 0; i < t; i++) {
  7183. a.push(bigInt(i + 2));
  7184. }
  7185. return millerRabinTest(n, a);
  7186. };
  7187. NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;
  7188. BigInteger.prototype.isProbablePrime = function (iterations, rng) {
  7189. var isPrime = isBasicPrime(this);
  7190. if (isPrime !== undefined) return isPrime;
  7191. var n = this.abs();
  7192. var t = iterations === undefined ? 5 : iterations;
  7193. for (var a = [], i = 0; i < t; i++) {
  7194. a.push(bigInt.randBetween(2, n.minus(2), rng));
  7195. }
  7196. return millerRabinTest(n, a);
  7197. };
  7198. NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;
  7199. BigInteger.prototype.modInv = function (n) {
  7200. var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;
  7201. while (!newR.isZero()) {
  7202. q = r.divide(newR);
  7203. lastT = t;
  7204. lastR = r;
  7205. t = newT;
  7206. r = newR;
  7207. newT = lastT.subtract(q.multiply(newT));
  7208. newR = lastR.subtract(q.multiply(newR));
  7209. }
  7210. if (!r.isUnit()) throw new Error(this.toString() + " and " + n.toString() + " are not co-prime");
  7211. if (t.compare(0) === -1) {
  7212. t = t.add(n);
  7213. }
  7214. if (this.isNegative()) {
  7215. return t.negate();
  7216. }
  7217. return t;
  7218. };
  7219. NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv;
  7220. BigInteger.prototype.next = function () {
  7221. var value = this.value;
  7222. if (this.sign) {
  7223. return subtractSmall(value, 1, this.sign);
  7224. }
  7225. return new BigInteger(addSmall(value, 1), this.sign);
  7226. };
  7227. SmallInteger.prototype.next = function () {
  7228. var value = this.value;
  7229. if (value + 1 < MAX_INT) return new SmallInteger(value + 1);
  7230. return new BigInteger(MAX_INT_ARR, false);
  7231. };
  7232. NativeBigInt.prototype.next = function () {
  7233. return new NativeBigInt(this.value + BigInt(1));
  7234. }
  7235. BigInteger.prototype.prev = function () {
  7236. var value = this.value;
  7237. if (this.sign) {
  7238. return new BigInteger(addSmall(value, 1), true);
  7239. }
  7240. return subtractSmall(value, 1, this.sign);
  7241. };
  7242. SmallInteger.prototype.prev = function () {
  7243. var value = this.value;
  7244. if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);
  7245. return new BigInteger(MAX_INT_ARR, true);
  7246. };
  7247. NativeBigInt.prototype.prev = function () {
  7248. return new NativeBigInt(this.value - BigInt(1));
  7249. }
  7250. var powersOfTwo = [1];
  7251. while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);
  7252. var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];
  7253. function shift_isSmall(n) {
  7254. return Math.abs(n) <= BASE;
  7255. }
  7256. BigInteger.prototype.shiftLeft = function (v) {
  7257. var n = parseValue(v).toJSNumber();
  7258. if (!shift_isSmall(n)) {
  7259. throw new Error(String(n) + " is too large for shifting.");
  7260. }
  7261. if (n < 0) return this.shiftRight(-n);
  7262. var result = this;
  7263. if (result.isZero()) return result;
  7264. while (n >= powers2Length) {
  7265. result = result.multiply(highestPower2);
  7266. n -= powers2Length - 1;
  7267. }
  7268. return result.multiply(powersOfTwo[n]);
  7269. };
  7270. NativeBigInt.prototype.shiftLeft = SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;
  7271. BigInteger.prototype.shiftRight = function (v) {
  7272. var remQuo;
  7273. var n = parseValue(v).toJSNumber();
  7274. if (!shift_isSmall(n)) {
  7275. throw new Error(String(n) + " is too large for shifting.");
  7276. }
  7277. if (n < 0) return this.shiftLeft(-n);
  7278. var result = this;
  7279. while (n >= powers2Length) {
  7280. if (result.isZero() || (result.isNegative() && result.isUnit())) return result;
  7281. remQuo = divModAny(result, highestPower2);
  7282. result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
  7283. n -= powers2Length - 1;
  7284. }
  7285. remQuo = divModAny(result, powersOfTwo[n]);
  7286. return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
  7287. };
  7288. NativeBigInt.prototype.shiftRight = SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;
  7289. function bitwise(x, y, fn) {
  7290. y = parseValue(y);
  7291. var xSign = x.isNegative(), ySign = y.isNegative();
  7292. var xRem = xSign ? x.not() : x,
  7293. yRem = ySign ? y.not() : y;
  7294. var xDigit = 0, yDigit = 0;
  7295. var xDivMod = null, yDivMod = null;
  7296. var result = [];
  7297. while (!xRem.isZero() || !yRem.isZero()) {
  7298. xDivMod = divModAny(xRem, highestPower2);
  7299. xDigit = xDivMod[1].toJSNumber();
  7300. if (xSign) {
  7301. xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers
  7302. }
  7303. yDivMod = divModAny(yRem, highestPower2);
  7304. yDigit = yDivMod[1].toJSNumber();
  7305. if (ySign) {
  7306. yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers
  7307. }
  7308. xRem = xDivMod[0];
  7309. yRem = yDivMod[0];
  7310. result.push(fn(xDigit, yDigit));
  7311. }
  7312. var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);
  7313. for (var i = result.length - 1; i >= 0; i -= 1) {
  7314. sum = sum.multiply(highestPower2).add(bigInt(result[i]));
  7315. }
  7316. return sum;
  7317. }
  7318. BigInteger.prototype.not = function () {
  7319. return this.negate().prev();
  7320. };
  7321. NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not;
  7322. BigInteger.prototype.and = function (n) {
  7323. return bitwise(this, n, function (a, b) { return a & b; });
  7324. };
  7325. NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and;
  7326. BigInteger.prototype.or = function (n) {
  7327. return bitwise(this, n, function (a, b) { return a | b; });
  7328. };
  7329. NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or;
  7330. BigInteger.prototype.xor = function (n) {
  7331. return bitwise(this, n, function (a, b) { return a ^ b; });
  7332. };
  7333. NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;
  7334. var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;
  7335. function roughLOB(n) { // get lowestOneBit (rough)
  7336. // SmallInteger: return Min(lowestOneBit(n), 1 << 30)
  7337. // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]
  7338. var v = n.value,
  7339. x = typeof v === "number" ? v | LOBMASK_I :
  7340. typeof v === "bigint" ? v | BigInt(LOBMASK_I) :
  7341. v[0] + v[1] * BASE | LOBMASK_BI;
  7342. return x & -x;
  7343. }
  7344. function integerLogarithm(value, base) {
  7345. if (base.compareTo(value) <= 0) {
  7346. var tmp = integerLogarithm(value, base.square(base));
  7347. var p = tmp.p;
  7348. var e = tmp.e;
  7349. var t = p.multiply(base);
  7350. return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 };
  7351. }
  7352. return { p: bigInt(1), e: 0 };
  7353. }
  7354. BigInteger.prototype.bitLength = function () {
  7355. var n = this;
  7356. if (n.compareTo(bigInt(0)) < 0) {
  7357. n = n.negate().subtract(bigInt(1));
  7358. }
  7359. if (n.compareTo(bigInt(0)) === 0) {
  7360. return bigInt(0);
  7361. }
  7362. return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1));
  7363. }
  7364. NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength;
  7365. function max(a, b) {
  7366. a = parseValue(a);
  7367. b = parseValue(b);
  7368. return a.greater(b) ? a : b;
  7369. }
  7370. function min(a, b) {
  7371. a = parseValue(a);
  7372. b = parseValue(b);
  7373. return a.lesser(b) ? a : b;
  7374. }
  7375. function gcd(a, b) {
  7376. a = parseValue(a).abs();
  7377. b = parseValue(b).abs();
  7378. if (a.equals(b)) return a;
  7379. if (a.isZero()) return b;
  7380. if (b.isZero()) return a;
  7381. var c = Integer[1], d, t;
  7382. while (a.isEven() && b.isEven()) {
  7383. d = min(roughLOB(a), roughLOB(b));
  7384. a = a.divide(d);
  7385. b = b.divide(d);
  7386. c = c.multiply(d);
  7387. }
  7388. while (a.isEven()) {
  7389. a = a.divide(roughLOB(a));
  7390. }
  7391. do {
  7392. while (b.isEven()) {
  7393. b = b.divide(roughLOB(b));
  7394. }
  7395. if (a.greater(b)) {
  7396. t = b; b = a; a = t;
  7397. }
  7398. b = b.subtract(a);
  7399. } while (!b.isZero());
  7400. return c.isUnit() ? a : a.multiply(c);
  7401. }
  7402. function lcm(a, b) {
  7403. a = parseValue(a).abs();
  7404. b = parseValue(b).abs();
  7405. return a.divide(gcd(a, b)).multiply(b);
  7406. }
  7407. function randBetween(a, b, rng) {
  7408. a = parseValue(a);
  7409. b = parseValue(b);
  7410. var usedRNG = rng || Math.random;
  7411. var low = min(a, b), high = max(a, b);
  7412. var range = high.subtract(low).add(1);
  7413. if (range.isSmall) return low.add(Math.floor(usedRNG() * range));
  7414. var digits = toBase(range, BASE).value;
  7415. var result = [], restricted = true;
  7416. for (var i = 0; i < digits.length; i++) {
  7417. var top = restricted ? digits[i] + (i + 1 < digits.length ? digits[i + 1] / BASE : 0) : BASE;
  7418. var digit = truncate(usedRNG() * top);
  7419. result.push(digit);
  7420. if (digit < digits[i]) restricted = false;
  7421. }
  7422. return low.add(Integer.fromArray(result, BASE, false));
  7423. }
  7424. var parseBase = function (text, base, alphabet, caseSensitive) {
  7425. alphabet = alphabet || DEFAULT_ALPHABET;
  7426. text = String(text);
  7427. if (!caseSensitive) {
  7428. text = text.toLowerCase();
  7429. alphabet = alphabet.toLowerCase();
  7430. }
  7431. var length = text.length;
  7432. var i;
  7433. var absBase = Math.abs(base);
  7434. var alphabetValues = {};
  7435. for (i = 0; i < alphabet.length; i++) {
  7436. alphabetValues[alphabet[i]] = i;
  7437. }
  7438. for (i = 0; i < length; i++) {
  7439. var c = text[i];
  7440. if (c === "-") continue;
  7441. if (c in alphabetValues) {
  7442. if (alphabetValues[c] >= absBase) {
  7443. if (c === "1" && absBase === 1) continue;
  7444. throw new Error(c + " is not a valid digit in base " + base + ".");
  7445. }
  7446. }
  7447. }
  7448. base = parseValue(base);
  7449. var digits = [];
  7450. var isNegative = text[0] === "-";
  7451. for (i = isNegative ? 1 : 0; i < text.length; i++) {
  7452. var c = text[i];
  7453. if (c in alphabetValues) digits.push(parseValue(alphabetValues[c]));
  7454. else if (c === "<") {
  7455. var start = i;
  7456. do { i++; } while (text[i] !== ">" && i < text.length);
  7457. digits.push(parseValue(text.slice(start + 1, i)));
  7458. }
  7459. else throw new Error(c + " is not a valid character");
  7460. }
  7461. return parseBaseFromArray(digits, base, isNegative);
  7462. };
  7463. function parseBaseFromArray(digits, base, isNegative) {
  7464. var val = Integer[0], pow = Integer[1], i;
  7465. for (i = digits.length - 1; i >= 0; i--) {
  7466. val = val.add(digits[i].times(pow));
  7467. pow = pow.times(base);
  7468. }
  7469. return isNegative ? val.negate() : val;
  7470. }
  7471. function stringify(digit, alphabet) {
  7472. alphabet = alphabet || DEFAULT_ALPHABET;
  7473. if (digit < alphabet.length) {
  7474. return alphabet[digit];
  7475. }
  7476. return "<" + digit + ">";
  7477. }
  7478. function toBase(n, base) {
  7479. base = bigInt(base);
  7480. if (base.isZero()) {
  7481. if (n.isZero()) return { value: [0], isNegative: false };
  7482. throw new Error("Cannot convert nonzero numbers to base 0.");
  7483. }
  7484. if (base.equals(-1)) {
  7485. if (n.isZero()) return { value: [0], isNegative: false };
  7486. if (n.isNegative())
  7487. return {
  7488. value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber()))
  7489. .map(Array.prototype.valueOf, [1, 0])
  7490. ),
  7491. isNegative: false
  7492. };
  7493. var arr = Array.apply(null, Array(n.toJSNumber() - 1))
  7494. .map(Array.prototype.valueOf, [0, 1]);
  7495. arr.unshift([1]);
  7496. return {
  7497. value: [].concat.apply([], arr),
  7498. isNegative: false
  7499. };
  7500. }
  7501. var neg = false;
  7502. if (n.isNegative() && base.isPositive()) {
  7503. neg = true;
  7504. n = n.abs();
  7505. }
  7506. if (base.isUnit()) {
  7507. if (n.isZero()) return { value: [0], isNegative: false };
  7508. return {
  7509. value: Array.apply(null, Array(n.toJSNumber()))
  7510. .map(Number.prototype.valueOf, 1),
  7511. isNegative: neg
  7512. };
  7513. }
  7514. var out = [];
  7515. var left = n, divmod;
  7516. while (left.isNegative() || left.compareAbs(base) >= 0) {
  7517. divmod = left.divmod(base);
  7518. left = divmod.quotient;
  7519. var digit = divmod.remainder;
  7520. if (digit.isNegative()) {
  7521. digit = base.minus(digit).abs();
  7522. left = left.next();
  7523. }
  7524. out.push(digit.toJSNumber());
  7525. }
  7526. out.push(left.toJSNumber());
  7527. return { value: out.reverse(), isNegative: neg };
  7528. }
  7529. function toBaseString(n, base, alphabet) {
  7530. var arr = toBase(n, base);
  7531. return (arr.isNegative ? "-" : "") + arr.value.map(function (x) {
  7532. return stringify(x, alphabet);
  7533. }).join('');
  7534. }
  7535. BigInteger.prototype.toArray = function (radix) {
  7536. return toBase(this, radix);
  7537. };
  7538. SmallInteger.prototype.toArray = function (radix) {
  7539. return toBase(this, radix);
  7540. };
  7541. NativeBigInt.prototype.toArray = function (radix) {
  7542. return toBase(this, radix);
  7543. };
  7544. BigInteger.prototype.toString = function (radix, alphabet) {
  7545. if (radix === undefined) radix = 10;
  7546. if (radix !== 10) return toBaseString(this, radix, alphabet);
  7547. var v = this.value, l = v.length, str = String(v[--l]), zeros = "0000000", digit;
  7548. while (--l >= 0) {
  7549. digit = String(v[l]);
  7550. str += zeros.slice(digit.length) + digit;
  7551. }
  7552. var sign = this.sign ? "-" : "";
  7553. return sign + str;
  7554. };
  7555. SmallInteger.prototype.toString = function (radix, alphabet) {
  7556. if (radix === undefined) radix = 10;
  7557. if (radix != 10) return toBaseString(this, radix, alphabet);
  7558. return String(this.value);
  7559. };
  7560. NativeBigInt.prototype.toString = SmallInteger.prototype.toString;
  7561. NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); }
  7562. BigInteger.prototype.valueOf = function () {
  7563. return parseInt(this.toString(), 10);
  7564. };
  7565. BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;
  7566. SmallInteger.prototype.valueOf = function () {
  7567. return this.value;
  7568. };
  7569. SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;
  7570. NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () {
  7571. return parseInt(this.toString(), 10);
  7572. }
  7573. function parseStringValue(v) {
  7574. if (isPrecise(+v)) {
  7575. var x = +v;
  7576. if (x === truncate(x))
  7577. return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x);
  7578. throw new Error("Invalid integer: " + v);
  7579. }
  7580. var sign = v[0] === "-";
  7581. if (sign) v = v.slice(1);
  7582. var split = v.split(/e/i);
  7583. if (split.length > 2) throw new Error("Invalid integer: " + split.join("e"));
  7584. if (split.length === 2) {
  7585. var exp = split[1];
  7586. if (exp[0] === "+") exp = exp.slice(1);
  7587. exp = +exp;
  7588. if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error("Invalid integer: " + exp + " is not a valid exponent.");
  7589. var text = split[0];
  7590. var decimalPlace = text.indexOf(".");
  7591. if (decimalPlace >= 0) {
  7592. exp -= text.length - decimalPlace - 1;
  7593. text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);
  7594. }
  7595. if (exp < 0) throw new Error("Cannot include negative exponent part for integers");
  7596. text += (new Array(exp + 1)).join("0");
  7597. v = text;
  7598. }
  7599. var isValid = /^([0-9][0-9]*)$/.test(v);
  7600. if (!isValid) throw new Error("Invalid integer: " + v);
  7601. if (supportsNativeBigInt) {
  7602. return new NativeBigInt(BigInt(sign ? "-" + v : v));
  7603. }
  7604. var r = [], max = v.length, l = LOG_BASE, min = max - l;
  7605. while (max > 0) {
  7606. r.push(+v.slice(min, max));
  7607. min -= l;
  7608. if (min < 0) min = 0;
  7609. max -= l;
  7610. }
  7611. trim(r);
  7612. return new BigInteger(r, sign);
  7613. }
  7614. function parseNumberValue(v) {
  7615. if (supportsNativeBigInt) {
  7616. return new NativeBigInt(BigInt(v));
  7617. }
  7618. if (isPrecise(v)) {
  7619. if (v !== truncate(v)) throw new Error(v + " is not an integer.");
  7620. return new SmallInteger(v);
  7621. }
  7622. return parseStringValue(v.toString());
  7623. }
  7624. function parseValue(v) {
  7625. if (typeof v === "number") {
  7626. return parseNumberValue(v);
  7627. }
  7628. if (typeof v === "string") {
  7629. return parseStringValue(v);
  7630. }
  7631. if (typeof v === "bigint") {
  7632. return new NativeBigInt(v);
  7633. }
  7634. return v;
  7635. }
  7636. // Pre-define numbers in range [-999,999]
  7637. for (var i = 0; i < 1000; i++) {
  7638. Integer[i] = parseValue(i);
  7639. if (i > 0) Integer[-i] = parseValue(-i);
  7640. }
  7641. // Backwards compatibility
  7642. Integer.one = Integer[1];
  7643. Integer.zero = Integer[0];
  7644. Integer.minusOne = Integer[-1];
  7645. Integer.max = max;
  7646. Integer.min = min;
  7647. Integer.gcd = gcd;
  7648. Integer.lcm = lcm;
  7649. Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; };
  7650. Integer.randBetween = randBetween;
  7651. Integer.fromArray = function (digits, base, isNegative) {
  7652. return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);
  7653. };
  7654. return Integer;
  7655. })();
  7656. // Node.js check
  7657. if ( true && module.hasOwnProperty("exports")) {
  7658. module.exports = bigInt;
  7659. }
  7660. //amd check
  7661. if (true) {
  7662. !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {
  7663. return bigInt;
  7664. }).call(exports, __webpack_require__, exports, module),
  7665. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  7666. }
  7667. /***/ }),
  7668. /***/ 44431:
  7669. /***/ (function(module, exports, __webpack_require__) {
  7670. var __WEBPACK_AMD_DEFINE_RESULT__;;(function (globalObject) {
  7671. 'use strict';
  7672. /*
  7673. * bignumber.js v9.0.2
  7674. * A JavaScript library for arbitrary-precision arithmetic.
  7675. * https://github.com/MikeMcl/bignumber.js
  7676. * Copyright (c) 2021 Michael Mclaughlin <M8ch88l@gmail.com>
  7677. * MIT Licensed.
  7678. *
  7679. * BigNumber.prototype methods | BigNumber methods
  7680. * |
  7681. * absoluteValue abs | clone
  7682. * comparedTo | config set
  7683. * decimalPlaces dp | DECIMAL_PLACES
  7684. * dividedBy div | ROUNDING_MODE
  7685. * dividedToIntegerBy idiv | EXPONENTIAL_AT
  7686. * exponentiatedBy pow | RANGE
  7687. * integerValue | CRYPTO
  7688. * isEqualTo eq | MODULO_MODE
  7689. * isFinite | POW_PRECISION
  7690. * isGreaterThan gt | FORMAT
  7691. * isGreaterThanOrEqualTo gte | ALPHABET
  7692. * isInteger | isBigNumber
  7693. * isLessThan lt | maximum max
  7694. * isLessThanOrEqualTo lte | minimum min
  7695. * isNaN | random
  7696. * isNegative | sum
  7697. * isPositive |
  7698. * isZero |
  7699. * minus |
  7700. * modulo mod |
  7701. * multipliedBy times |
  7702. * negated |
  7703. * plus |
  7704. * precision sd |
  7705. * shiftedBy |
  7706. * squareRoot sqrt |
  7707. * toExponential |
  7708. * toFixed |
  7709. * toFormat |
  7710. * toFraction |
  7711. * toJSON |
  7712. * toNumber |
  7713. * toPrecision |
  7714. * toString |
  7715. * valueOf |
  7716. *
  7717. */
  7718. var BigNumber,
  7719. isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,
  7720. mathceil = Math.ceil,
  7721. mathfloor = Math.floor,
  7722. bignumberError = '[BigNumber Error] ',
  7723. tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',
  7724. BASE = 1e14,
  7725. LOG_BASE = 14,
  7726. MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1
  7727. // MAX_INT32 = 0x7fffffff, // 2^31 - 1
  7728. POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
  7729. SQRT_BASE = 1e7,
  7730. // EDITABLE
  7731. // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
  7732. // the arguments to toExponential, toFixed, toFormat, and toPrecision.
  7733. MAX = 1E9; // 0 to MAX_INT32
  7734. /*
  7735. * Create and return a BigNumber constructor.
  7736. */
  7737. function clone(configObject) {
  7738. var div, convertBase, parseNumeric,
  7739. P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },
  7740. ONE = new BigNumber(1),
  7741. //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------
  7742. // The default values below must be integers within the inclusive ranges stated.
  7743. // The values can also be changed at run-time using BigNumber.set.
  7744. // The maximum number of decimal places for operations involving division.
  7745. DECIMAL_PLACES = 20, // 0 to MAX
  7746. // The rounding mode used when rounding to the above decimal places, and when using
  7747. // toExponential, toFixed, toFormat and toPrecision, and round (default value).
  7748. // UP 0 Away from zero.
  7749. // DOWN 1 Towards zero.
  7750. // CEIL 2 Towards +Infinity.
  7751. // FLOOR 3 Towards -Infinity.
  7752. // HALF_UP 4 Towards nearest neighbour. If equidistant, up.
  7753. // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.
  7754. // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.
  7755. // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.
  7756. // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
  7757. ROUNDING_MODE = 4, // 0 to 8
  7758. // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]
  7759. // The exponent value at and beneath which toString returns exponential notation.
  7760. // Number type: -7
  7761. TO_EXP_NEG = -7, // 0 to -MAX
  7762. // The exponent value at and above which toString returns exponential notation.
  7763. // Number type: 21
  7764. TO_EXP_POS = 21, // 0 to MAX
  7765. // RANGE : [MIN_EXP, MAX_EXP]
  7766. // The minimum exponent value, beneath which underflow to zero occurs.
  7767. // Number type: -324 (5e-324)
  7768. MIN_EXP = -1e7, // -1 to -MAX
  7769. // The maximum exponent value, above which overflow to Infinity occurs.
  7770. // Number type: 308 (1.7976931348623157e+308)
  7771. // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
  7772. MAX_EXP = 1e7, // 1 to MAX
  7773. // Whether to use cryptographically-secure random number generation, if available.
  7774. CRYPTO = false, // true or false
  7775. // The modulo mode used when calculating the modulus: a mod n.
  7776. // The quotient (q = a / n) is calculated according to the corresponding rounding mode.
  7777. // The remainder (r) is calculated as: r = a - n * q.
  7778. //
  7779. // UP 0 The remainder is positive if the dividend is negative, else is negative.
  7780. // DOWN 1 The remainder has the same sign as the dividend.
  7781. // This modulo mode is commonly known as 'truncated division' and is
  7782. // equivalent to (a % n) in JavaScript.
  7783. // FLOOR 3 The remainder has the same sign as the divisor (Python %).
  7784. // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
  7785. // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).
  7786. // The remainder is always positive.
  7787. //
  7788. // The truncated division, floored division, Euclidian division and IEEE 754 remainder
  7789. // modes are commonly used for the modulus operation.
  7790. // Although the other rounding modes can also be used, they may not give useful results.
  7791. MODULO_MODE = 1, // 0 to 9
  7792. // The maximum number of significant digits of the result of the exponentiatedBy operation.
  7793. // If POW_PRECISION is 0, there will be unlimited significant digits.
  7794. POW_PRECISION = 0, // 0 to MAX
  7795. // The format specification used by the BigNumber.prototype.toFormat method.
  7796. FORMAT = {
  7797. prefix: '',
  7798. groupSize: 3,
  7799. secondaryGroupSize: 0,
  7800. groupSeparator: ',',
  7801. decimalSeparator: '.',
  7802. fractionGroupSize: 0,
  7803. fractionGroupSeparator: '\xA0', // non-breaking space
  7804. suffix: ''
  7805. },
  7806. // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',
  7807. // '-', '.', whitespace, or repeated character.
  7808. // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
  7809. ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',
  7810. alphabetHasNormalDecimalDigits = true;
  7811. //------------------------------------------------------------------------------------------
  7812. // CONSTRUCTOR
  7813. /*
  7814. * The BigNumber constructor and exported function.
  7815. * Create and return a new instance of a BigNumber object.
  7816. *
  7817. * v {number|string|BigNumber} A numeric value.
  7818. * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.
  7819. */
  7820. function BigNumber(v, b) {
  7821. var alphabet, c, caseChanged, e, i, isNum, len, str,
  7822. x = this;
  7823. // Enable constructor call without `new`.
  7824. if (!(x instanceof BigNumber)) return new BigNumber(v, b);
  7825. if (b == null) {
  7826. if (v && v._isBigNumber === true) {
  7827. x.s = v.s;
  7828. if (!v.c || v.e > MAX_EXP) {
  7829. x.c = x.e = null;
  7830. } else if (v.e < MIN_EXP) {
  7831. x.c = [x.e = 0];
  7832. } else {
  7833. x.e = v.e;
  7834. x.c = v.c.slice();
  7835. }
  7836. return;
  7837. }
  7838. if ((isNum = typeof v == 'number') && v * 0 == 0) {
  7839. // Use `1 / n` to handle minus zero also.
  7840. x.s = 1 / v < 0 ? (v = -v, -1) : 1;
  7841. // Fast path for integers, where n < 2147483648 (2**31).
  7842. if (v === ~~v) {
  7843. for (e = 0, i = v; i >= 10; i /= 10, e++);
  7844. if (e > MAX_EXP) {
  7845. x.c = x.e = null;
  7846. } else {
  7847. x.e = e;
  7848. x.c = [v];
  7849. }
  7850. return;
  7851. }
  7852. str = String(v);
  7853. } else {
  7854. if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);
  7855. x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;
  7856. }
  7857. // Decimal point?
  7858. if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
  7859. // Exponential form?
  7860. if ((i = str.search(/e/i)) > 0) {
  7861. // Determine exponent.
  7862. if (e < 0) e = i;
  7863. e += +str.slice(i + 1);
  7864. str = str.substring(0, i);
  7865. } else if (e < 0) {
  7866. // Integer.
  7867. e = str.length;
  7868. }
  7869. } else {
  7870. // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
  7871. intCheck(b, 2, ALPHABET.length, 'Base');
  7872. // Allow exponential notation to be used with base 10 argument, while
  7873. // also rounding to DECIMAL_PLACES as with other bases.
  7874. if (b == 10 && alphabetHasNormalDecimalDigits) {
  7875. x = new BigNumber(v);
  7876. return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);
  7877. }
  7878. str = String(v);
  7879. if (isNum = typeof v == 'number') {
  7880. // Avoid potential interpretation of Infinity and NaN as base 44+ values.
  7881. if (v * 0 != 0) return parseNumeric(x, str, isNum, b);
  7882. x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;
  7883. // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
  7884. if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) {
  7885. throw Error
  7886. (tooManyDigits + v);
  7887. }
  7888. } else {
  7889. x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;
  7890. }
  7891. alphabet = ALPHABET.slice(0, b);
  7892. e = i = 0;
  7893. // Check that str is a valid base b number.
  7894. // Don't use RegExp, so alphabet can contain special characters.
  7895. for (len = str.length; i < len; i++) {
  7896. if (alphabet.indexOf(c = str.charAt(i)) < 0) {
  7897. if (c == '.') {
  7898. // If '.' is not the first character and it has not be found before.
  7899. if (i > e) {
  7900. e = len;
  7901. continue;
  7902. }
  7903. } else if (!caseChanged) {
  7904. // Allow e.g. hexadecimal 'FF' as well as 'ff'.
  7905. if (str == str.toUpperCase() && (str = str.toLowerCase()) ||
  7906. str == str.toLowerCase() && (str = str.toUpperCase())) {
  7907. caseChanged = true;
  7908. i = -1;
  7909. e = 0;
  7910. continue;
  7911. }
  7912. }
  7913. return parseNumeric(x, String(v), isNum, b);
  7914. }
  7915. }
  7916. // Prevent later check for length on converted number.
  7917. isNum = false;
  7918. str = convertBase(str, b, 10, x.s);
  7919. // Decimal point?
  7920. if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
  7921. else e = str.length;
  7922. }
  7923. // Determine leading zeros.
  7924. for (i = 0; str.charCodeAt(i) === 48; i++);
  7925. // Determine trailing zeros.
  7926. for (len = str.length; str.charCodeAt(--len) === 48;);
  7927. if (str = str.slice(i, ++len)) {
  7928. len -= i;
  7929. // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
  7930. if (isNum && BigNumber.DEBUG &&
  7931. len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {
  7932. throw Error
  7933. (tooManyDigits + (x.s * v));
  7934. }
  7935. // Overflow?
  7936. if ((e = e - i - 1) > MAX_EXP) {
  7937. // Infinity.
  7938. x.c = x.e = null;
  7939. // Underflow?
  7940. } else if (e < MIN_EXP) {
  7941. // Zero.
  7942. x.c = [x.e = 0];
  7943. } else {
  7944. x.e = e;
  7945. x.c = [];
  7946. // Transform base
  7947. // e is the base 10 exponent.
  7948. // i is where to slice str to get the first element of the coefficient array.
  7949. i = (e + 1) % LOG_BASE;
  7950. if (e < 0) i += LOG_BASE; // i < 1
  7951. if (i < len) {
  7952. if (i) x.c.push(+str.slice(0, i));
  7953. for (len -= LOG_BASE; i < len;) {
  7954. x.c.push(+str.slice(i, i += LOG_BASE));
  7955. }
  7956. i = LOG_BASE - (str = str.slice(i)).length;
  7957. } else {
  7958. i -= len;
  7959. }
  7960. for (; i--; str += '0');
  7961. x.c.push(+str);
  7962. }
  7963. } else {
  7964. // Zero.
  7965. x.c = [x.e = 0];
  7966. }
  7967. }
  7968. // CONSTRUCTOR PROPERTIES
  7969. BigNumber.clone = clone;
  7970. BigNumber.ROUND_UP = 0;
  7971. BigNumber.ROUND_DOWN = 1;
  7972. BigNumber.ROUND_CEIL = 2;
  7973. BigNumber.ROUND_FLOOR = 3;
  7974. BigNumber.ROUND_HALF_UP = 4;
  7975. BigNumber.ROUND_HALF_DOWN = 5;
  7976. BigNumber.ROUND_HALF_EVEN = 6;
  7977. BigNumber.ROUND_HALF_CEIL = 7;
  7978. BigNumber.ROUND_HALF_FLOOR = 8;
  7979. BigNumber.EUCLID = 9;
  7980. /*
  7981. * Configure infrequently-changing library-wide settings.
  7982. *
  7983. * Accept an object with the following optional properties (if the value of a property is
  7984. * a number, it must be an integer within the inclusive range stated):
  7985. *
  7986. * DECIMAL_PLACES {number} 0 to MAX
  7987. * ROUNDING_MODE {number} 0 to 8
  7988. * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]
  7989. * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]
  7990. * CRYPTO {boolean} true or false
  7991. * MODULO_MODE {number} 0 to 9
  7992. * POW_PRECISION {number} 0 to MAX
  7993. * ALPHABET {string} A string of two or more unique characters which does
  7994. * not contain '.'.
  7995. * FORMAT {object} An object with some of the following properties:
  7996. * prefix {string}
  7997. * groupSize {number}
  7998. * secondaryGroupSize {number}
  7999. * groupSeparator {string}
  8000. * decimalSeparator {string}
  8001. * fractionGroupSize {number}
  8002. * fractionGroupSeparator {string}
  8003. * suffix {string}
  8004. *
  8005. * (The values assigned to the above FORMAT object properties are not checked for validity.)
  8006. *
  8007. * E.g.
  8008. * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
  8009. *
  8010. * Ignore properties/parameters set to null or undefined, except for ALPHABET.
  8011. *
  8012. * Return an object with the properties current values.
  8013. */
  8014. BigNumber.config = BigNumber.set = function (obj) {
  8015. var p, v;
  8016. if (obj != null) {
  8017. if (typeof obj == 'object') {
  8018. // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
  8019. // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'
  8020. if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {
  8021. v = obj[p];
  8022. intCheck(v, 0, MAX, p);
  8023. DECIMAL_PLACES = v;
  8024. }
  8025. // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
  8026. // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'
  8027. if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {
  8028. v = obj[p];
  8029. intCheck(v, 0, 8, p);
  8030. ROUNDING_MODE = v;
  8031. }
  8032. // EXPONENTIAL_AT {number|number[]}
  8033. // Integer, -MAX to MAX inclusive or
  8034. // [integer -MAX to 0 inclusive, 0 to MAX inclusive].
  8035. // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'
  8036. if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {
  8037. v = obj[p];
  8038. if (v && v.pop) {
  8039. intCheck(v[0], -MAX, 0, p);
  8040. intCheck(v[1], 0, MAX, p);
  8041. TO_EXP_NEG = v[0];
  8042. TO_EXP_POS = v[1];
  8043. } else {
  8044. intCheck(v, -MAX, MAX, p);
  8045. TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);
  8046. }
  8047. }
  8048. // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
  8049. // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
  8050. // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'
  8051. if (obj.hasOwnProperty(p = 'RANGE')) {
  8052. v = obj[p];
  8053. if (v && v.pop) {
  8054. intCheck(v[0], -MAX, -1, p);
  8055. intCheck(v[1], 1, MAX, p);
  8056. MIN_EXP = v[0];
  8057. MAX_EXP = v[1];
  8058. } else {
  8059. intCheck(v, -MAX, MAX, p);
  8060. if (v) {
  8061. MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);
  8062. } else {
  8063. throw Error
  8064. (bignumberError + p + ' cannot be zero: ' + v);
  8065. }
  8066. }
  8067. }
  8068. // CRYPTO {boolean} true or false.
  8069. // '[BigNumber Error] CRYPTO not true or false: {v}'
  8070. // '[BigNumber Error] crypto unavailable'
  8071. if (obj.hasOwnProperty(p = 'CRYPTO')) {
  8072. v = obj[p];
  8073. if (v === !!v) {
  8074. if (v) {
  8075. if (typeof crypto != 'undefined' && crypto &&
  8076. (crypto.getRandomValues || crypto.randomBytes)) {
  8077. CRYPTO = v;
  8078. } else {
  8079. CRYPTO = !v;
  8080. throw Error
  8081. (bignumberError + 'crypto unavailable');
  8082. }
  8083. } else {
  8084. CRYPTO = v;
  8085. }
  8086. } else {
  8087. throw Error
  8088. (bignumberError + p + ' not true or false: ' + v);
  8089. }
  8090. }
  8091. // MODULO_MODE {number} Integer, 0 to 9 inclusive.
  8092. // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'
  8093. if (obj.hasOwnProperty(p = 'MODULO_MODE')) {
  8094. v = obj[p];
  8095. intCheck(v, 0, 9, p);
  8096. MODULO_MODE = v;
  8097. }
  8098. // POW_PRECISION {number} Integer, 0 to MAX inclusive.
  8099. // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'
  8100. if (obj.hasOwnProperty(p = 'POW_PRECISION')) {
  8101. v = obj[p];
  8102. intCheck(v, 0, MAX, p);
  8103. POW_PRECISION = v;
  8104. }
  8105. // FORMAT {object}
  8106. // '[BigNumber Error] FORMAT not an object: {v}'
  8107. if (obj.hasOwnProperty(p = 'FORMAT')) {
  8108. v = obj[p];
  8109. if (typeof v == 'object') FORMAT = v;
  8110. else throw Error
  8111. (bignumberError + p + ' not an object: ' + v);
  8112. }
  8113. // ALPHABET {string}
  8114. // '[BigNumber Error] ALPHABET invalid: {v}'
  8115. if (obj.hasOwnProperty(p = 'ALPHABET')) {
  8116. v = obj[p];
  8117. // Disallow if less than two characters,
  8118. // or if it contains '+', '-', '.', whitespace, or a repeated character.
  8119. if (typeof v == 'string' && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) {
  8120. alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';
  8121. ALPHABET = v;
  8122. } else {
  8123. throw Error
  8124. (bignumberError + p + ' invalid: ' + v);
  8125. }
  8126. }
  8127. } else {
  8128. // '[BigNumber Error] Object expected: {v}'
  8129. throw Error
  8130. (bignumberError + 'Object expected: ' + obj);
  8131. }
  8132. }
  8133. return {
  8134. DECIMAL_PLACES: DECIMAL_PLACES,
  8135. ROUNDING_MODE: ROUNDING_MODE,
  8136. EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],
  8137. RANGE: [MIN_EXP, MAX_EXP],
  8138. CRYPTO: CRYPTO,
  8139. MODULO_MODE: MODULO_MODE,
  8140. POW_PRECISION: POW_PRECISION,
  8141. FORMAT: FORMAT,
  8142. ALPHABET: ALPHABET
  8143. };
  8144. };
  8145. /*
  8146. * Return true if v is a BigNumber instance, otherwise return false.
  8147. *
  8148. * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.
  8149. *
  8150. * v {any}
  8151. *
  8152. * '[BigNumber Error] Invalid BigNumber: {v}'
  8153. */
  8154. BigNumber.isBigNumber = function (v) {
  8155. if (!v || v._isBigNumber !== true) return false;
  8156. if (!BigNumber.DEBUG) return true;
  8157. var i, n,
  8158. c = v.c,
  8159. e = v.e,
  8160. s = v.s;
  8161. out: if ({}.toString.call(c) == '[object Array]') {
  8162. if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {
  8163. // If the first element is zero, the BigNumber value must be zero.
  8164. if (c[0] === 0) {
  8165. if (e === 0 && c.length === 1) return true;
  8166. break out;
  8167. }
  8168. // Calculate number of digits that c[0] should have, based on the exponent.
  8169. i = (e + 1) % LOG_BASE;
  8170. if (i < 1) i += LOG_BASE;
  8171. // Calculate number of digits of c[0].
  8172. //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {
  8173. if (String(c[0]).length == i) {
  8174. for (i = 0; i < c.length; i++) {
  8175. n = c[i];
  8176. if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;
  8177. }
  8178. // Last element cannot be zero, unless it is the only element.
  8179. if (n !== 0) return true;
  8180. }
  8181. }
  8182. // Infinity/NaN
  8183. } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {
  8184. return true;
  8185. }
  8186. throw Error
  8187. (bignumberError + 'Invalid BigNumber: ' + v);
  8188. };
  8189. /*
  8190. * Return a new BigNumber whose value is the maximum of the arguments.
  8191. *
  8192. * arguments {number|string|BigNumber}
  8193. */
  8194. BigNumber.maximum = BigNumber.max = function () {
  8195. return maxOrMin(arguments, P.lt);
  8196. };
  8197. /*
  8198. * Return a new BigNumber whose value is the minimum of the arguments.
  8199. *
  8200. * arguments {number|string|BigNumber}
  8201. */
  8202. BigNumber.minimum = BigNumber.min = function () {
  8203. return maxOrMin(arguments, P.gt);
  8204. };
  8205. /*
  8206. * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
  8207. * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
  8208. * zeros are produced).
  8209. *
  8210. * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
  8211. *
  8212. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'
  8213. * '[BigNumber Error] crypto unavailable'
  8214. */
  8215. BigNumber.random = (function () {
  8216. var pow2_53 = 0x20000000000000;
  8217. // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
  8218. // Check if Math.random() produces more than 32 bits of randomness.
  8219. // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
  8220. // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
  8221. var random53bitInt = (Math.random() * pow2_53) & 0x1fffff
  8222. ? function () { return mathfloor(Math.random() * pow2_53); }
  8223. : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +
  8224. (Math.random() * 0x800000 | 0); };
  8225. return function (dp) {
  8226. var a, b, e, k, v,
  8227. i = 0,
  8228. c = [],
  8229. rand = new BigNumber(ONE);
  8230. if (dp == null) dp = DECIMAL_PLACES;
  8231. else intCheck(dp, 0, MAX);
  8232. k = mathceil(dp / LOG_BASE);
  8233. if (CRYPTO) {
  8234. // Browsers supporting crypto.getRandomValues.
  8235. if (crypto.getRandomValues) {
  8236. a = crypto.getRandomValues(new Uint32Array(k *= 2));
  8237. for (; i < k;) {
  8238. // 53 bits:
  8239. // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
  8240. // 11111 11111111 11111111 11111111 11100000 00000000 00000000
  8241. // ((Math.pow(2, 32) - 1) >>> 11).toString(2)
  8242. // 11111 11111111 11111111
  8243. // 0x20000 is 2^21.
  8244. v = a[i] * 0x20000 + (a[i + 1] >>> 11);
  8245. // Rejection sampling:
  8246. // 0 <= v < 9007199254740992
  8247. // Probability that v >= 9e15, is
  8248. // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
  8249. if (v >= 9e15) {
  8250. b = crypto.getRandomValues(new Uint32Array(2));
  8251. a[i] = b[0];
  8252. a[i + 1] = b[1];
  8253. } else {
  8254. // 0 <= v <= 8999999999999999
  8255. // 0 <= (v % 1e14) <= 99999999999999
  8256. c.push(v % 1e14);
  8257. i += 2;
  8258. }
  8259. }
  8260. i = k / 2;
  8261. // Node.js supporting crypto.randomBytes.
  8262. } else if (crypto.randomBytes) {
  8263. // buffer
  8264. a = crypto.randomBytes(k *= 7);
  8265. for (; i < k;) {
  8266. // 0x1000000000000 is 2^48, 0x10000000000 is 2^40
  8267. // 0x100000000 is 2^32, 0x1000000 is 2^24
  8268. // 11111 11111111 11111111 11111111 11111111 11111111 11111111
  8269. // 0 <= v < 9007199254740992
  8270. v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +
  8271. (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +
  8272. (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];
  8273. if (v >= 9e15) {
  8274. crypto.randomBytes(7).copy(a, i);
  8275. } else {
  8276. // 0 <= (v % 1e14) <= 99999999999999
  8277. c.push(v % 1e14);
  8278. i += 7;
  8279. }
  8280. }
  8281. i = k / 7;
  8282. } else {
  8283. CRYPTO = false;
  8284. throw Error
  8285. (bignumberError + 'crypto unavailable');
  8286. }
  8287. }
  8288. // Use Math.random.
  8289. if (!CRYPTO) {
  8290. for (; i < k;) {
  8291. v = random53bitInt();
  8292. if (v < 9e15) c[i++] = v % 1e14;
  8293. }
  8294. }
  8295. k = c[--i];
  8296. dp %= LOG_BASE;
  8297. // Convert trailing digits to zeros according to dp.
  8298. if (k && dp) {
  8299. v = POWS_TEN[LOG_BASE - dp];
  8300. c[i] = mathfloor(k / v) * v;
  8301. }
  8302. // Remove trailing elements which are zero.
  8303. for (; c[i] === 0; c.pop(), i--);
  8304. // Zero?
  8305. if (i < 0) {
  8306. c = [e = 0];
  8307. } else {
  8308. // Remove leading elements which are zero and adjust exponent accordingly.
  8309. for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);
  8310. // Count the digits of the first element of c to determine leading zeros, and...
  8311. for (i = 1, v = c[0]; v >= 10; v /= 10, i++);
  8312. // adjust the exponent accordingly.
  8313. if (i < LOG_BASE) e -= LOG_BASE - i;
  8314. }
  8315. rand.e = e;
  8316. rand.c = c;
  8317. return rand;
  8318. };
  8319. })();
  8320. /*
  8321. * Return a BigNumber whose value is the sum of the arguments.
  8322. *
  8323. * arguments {number|string|BigNumber}
  8324. */
  8325. BigNumber.sum = function () {
  8326. var i = 1,
  8327. args = arguments,
  8328. sum = new BigNumber(args[0]);
  8329. for (; i < args.length;) sum = sum.plus(args[i++]);
  8330. return sum;
  8331. };
  8332. // PRIVATE FUNCTIONS
  8333. // Called by BigNumber and BigNumber.prototype.toString.
  8334. convertBase = (function () {
  8335. var decimal = '0123456789';
  8336. /*
  8337. * Convert string of baseIn to an array of numbers of baseOut.
  8338. * Eg. toBaseOut('255', 10, 16) returns [15, 15].
  8339. * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].
  8340. */
  8341. function toBaseOut(str, baseIn, baseOut, alphabet) {
  8342. var j,
  8343. arr = [0],
  8344. arrL,
  8345. i = 0,
  8346. len = str.length;
  8347. for (; i < len;) {
  8348. for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);
  8349. arr[0] += alphabet.indexOf(str.charAt(i++));
  8350. for (j = 0; j < arr.length; j++) {
  8351. if (arr[j] > baseOut - 1) {
  8352. if (arr[j + 1] == null) arr[j + 1] = 0;
  8353. arr[j + 1] += arr[j] / baseOut | 0;
  8354. arr[j] %= baseOut;
  8355. }
  8356. }
  8357. }
  8358. return arr.reverse();
  8359. }
  8360. // Convert a numeric string of baseIn to a numeric string of baseOut.
  8361. // If the caller is toString, we are converting from base 10 to baseOut.
  8362. // If the caller is BigNumber, we are converting from baseIn to base 10.
  8363. return function (str, baseIn, baseOut, sign, callerIsToString) {
  8364. var alphabet, d, e, k, r, x, xc, y,
  8365. i = str.indexOf('.'),
  8366. dp = DECIMAL_PLACES,
  8367. rm = ROUNDING_MODE;
  8368. // Non-integer.
  8369. if (i >= 0) {
  8370. k = POW_PRECISION;
  8371. // Unlimited precision.
  8372. POW_PRECISION = 0;
  8373. str = str.replace('.', '');
  8374. y = new BigNumber(baseIn);
  8375. x = y.pow(str.length - i);
  8376. POW_PRECISION = k;
  8377. // Convert str as if an integer, then restore the fraction part by dividing the
  8378. // result by its base raised to a power.
  8379. y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),
  8380. 10, baseOut, decimal);
  8381. y.e = y.c.length;
  8382. }
  8383. // Convert the number as integer.
  8384. xc = toBaseOut(str, baseIn, baseOut, callerIsToString
  8385. ? (alphabet = ALPHABET, decimal)
  8386. : (alphabet = decimal, ALPHABET));
  8387. // xc now represents str as an integer and converted to baseOut. e is the exponent.
  8388. e = k = xc.length;
  8389. // Remove trailing zeros.
  8390. for (; xc[--k] == 0; xc.pop());
  8391. // Zero?
  8392. if (!xc[0]) return alphabet.charAt(0);
  8393. // Does str represent an integer? If so, no need for the division.
  8394. if (i < 0) {
  8395. --e;
  8396. } else {
  8397. x.c = xc;
  8398. x.e = e;
  8399. // The sign is needed for correct rounding.
  8400. x.s = sign;
  8401. x = div(x, y, dp, rm, baseOut);
  8402. xc = x.c;
  8403. r = x.r;
  8404. e = x.e;
  8405. }
  8406. // xc now represents str converted to baseOut.
  8407. // THe index of the rounding digit.
  8408. d = e + dp + 1;
  8409. // The rounding digit: the digit to the right of the digit that may be rounded up.
  8410. i = xc[d];
  8411. // Look at the rounding digits and mode to determine whether to round up.
  8412. k = baseOut / 2;
  8413. r = r || d < 0 || xc[d + 1] != null;
  8414. r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
  8415. : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||
  8416. rm == (x.s < 0 ? 8 : 7));
  8417. // If the index of the rounding digit is not greater than zero, or xc represents
  8418. // zero, then the result of the base conversion is zero or, if rounding up, a value
  8419. // such as 0.00001.
  8420. if (d < 1 || !xc[0]) {
  8421. // 1^-dp or 0
  8422. str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);
  8423. } else {
  8424. // Truncate xc to the required number of decimal places.
  8425. xc.length = d;
  8426. // Round up?
  8427. if (r) {
  8428. // Rounding up may mean the previous digit has to be rounded up and so on.
  8429. for (--baseOut; ++xc[--d] > baseOut;) {
  8430. xc[d] = 0;
  8431. if (!d) {
  8432. ++e;
  8433. xc = [1].concat(xc);
  8434. }
  8435. }
  8436. }
  8437. // Determine trailing zeros.
  8438. for (k = xc.length; !xc[--k];);
  8439. // E.g. [4, 11, 15] becomes 4bf.
  8440. for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));
  8441. // Add leading zeros, decimal point and trailing zeros as required.
  8442. str = toFixedPoint(str, e, alphabet.charAt(0));
  8443. }
  8444. // The caller will add the sign.
  8445. return str;
  8446. };
  8447. })();
  8448. // Perform division in the specified base. Called by div and convertBase.
  8449. div = (function () {
  8450. // Assume non-zero x and k.
  8451. function multiply(x, k, base) {
  8452. var m, temp, xlo, xhi,
  8453. carry = 0,
  8454. i = x.length,
  8455. klo = k % SQRT_BASE,
  8456. khi = k / SQRT_BASE | 0;
  8457. for (x = x.slice(); i--;) {
  8458. xlo = x[i] % SQRT_BASE;
  8459. xhi = x[i] / SQRT_BASE | 0;
  8460. m = khi * xlo + xhi * klo;
  8461. temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;
  8462. carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;
  8463. x[i] = temp % base;
  8464. }
  8465. if (carry) x = [carry].concat(x);
  8466. return x;
  8467. }
  8468. function compare(a, b, aL, bL) {
  8469. var i, cmp;
  8470. if (aL != bL) {
  8471. cmp = aL > bL ? 1 : -1;
  8472. } else {
  8473. for (i = cmp = 0; i < aL; i++) {
  8474. if (a[i] != b[i]) {
  8475. cmp = a[i] > b[i] ? 1 : -1;
  8476. break;
  8477. }
  8478. }
  8479. }
  8480. return cmp;
  8481. }
  8482. function subtract(a, b, aL, base) {
  8483. var i = 0;
  8484. // Subtract b from a.
  8485. for (; aL--;) {
  8486. a[aL] -= i;
  8487. i = a[aL] < b[aL] ? 1 : 0;
  8488. a[aL] = i * base + a[aL] - b[aL];
  8489. }
  8490. // Remove leading zeros.
  8491. for (; !a[0] && a.length > 1; a.splice(0, 1));
  8492. }
  8493. // x: dividend, y: divisor.
  8494. return function (x, y, dp, rm, base) {
  8495. var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,
  8496. yL, yz,
  8497. s = x.s == y.s ? 1 : -1,
  8498. xc = x.c,
  8499. yc = y.c;
  8500. // Either NaN, Infinity or 0?
  8501. if (!xc || !xc[0] || !yc || !yc[0]) {
  8502. return new BigNumber(
  8503. // Return NaN if either NaN, or both Infinity or 0.
  8504. !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :
  8505. // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
  8506. xc && xc[0] == 0 || !yc ? s * 0 : s / 0
  8507. );
  8508. }
  8509. q = new BigNumber(s);
  8510. qc = q.c = [];
  8511. e = x.e - y.e;
  8512. s = dp + e + 1;
  8513. if (!base) {
  8514. base = BASE;
  8515. e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);
  8516. s = s / LOG_BASE | 0;
  8517. }
  8518. // Result exponent may be one less then the current value of e.
  8519. // The coefficients of the BigNumbers from convertBase may have trailing zeros.
  8520. for (i = 0; yc[i] == (xc[i] || 0); i++);
  8521. if (yc[i] > (xc[i] || 0)) e--;
  8522. if (s < 0) {
  8523. qc.push(1);
  8524. more = true;
  8525. } else {
  8526. xL = xc.length;
  8527. yL = yc.length;
  8528. i = 0;
  8529. s += 2;
  8530. // Normalise xc and yc so highest order digit of yc is >= base / 2.
  8531. n = mathfloor(base / (yc[0] + 1));
  8532. // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.
  8533. // if (n > 1 || n++ == 1 && yc[0] < base / 2) {
  8534. if (n > 1) {
  8535. yc = multiply(yc, n, base);
  8536. xc = multiply(xc, n, base);
  8537. yL = yc.length;
  8538. xL = xc.length;
  8539. }
  8540. xi = yL;
  8541. rem = xc.slice(0, yL);
  8542. remL = rem.length;
  8543. // Add zeros to make remainder as long as divisor.
  8544. for (; remL < yL; rem[remL++] = 0);
  8545. yz = yc.slice();
  8546. yz = [0].concat(yz);
  8547. yc0 = yc[0];
  8548. if (yc[1] >= base / 2) yc0++;
  8549. // Not necessary, but to prevent trial digit n > base, when using base 3.
  8550. // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;
  8551. do {
  8552. n = 0;
  8553. // Compare divisor and remainder.
  8554. cmp = compare(yc, rem, yL, remL);
  8555. // If divisor < remainder.
  8556. if (cmp < 0) {
  8557. // Calculate trial digit, n.
  8558. rem0 = rem[0];
  8559. if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);
  8560. // n is how many times the divisor goes into the current remainder.
  8561. n = mathfloor(rem0 / yc0);
  8562. // Algorithm:
  8563. // product = divisor multiplied by trial digit (n).
  8564. // Compare product and remainder.
  8565. // If product is greater than remainder:
  8566. // Subtract divisor from product, decrement trial digit.
  8567. // Subtract product from remainder.
  8568. // If product was less than remainder at the last compare:
  8569. // Compare new remainder and divisor.
  8570. // If remainder is greater than divisor:
  8571. // Subtract divisor from remainder, increment trial digit.
  8572. if (n > 1) {
  8573. // n may be > base only when base is 3.
  8574. if (n >= base) n = base - 1;
  8575. // product = divisor * trial digit.
  8576. prod = multiply(yc, n, base);
  8577. prodL = prod.length;
  8578. remL = rem.length;
  8579. // Compare product and remainder.
  8580. // If product > remainder then trial digit n too high.
  8581. // n is 1 too high about 5% of the time, and is not known to have
  8582. // ever been more than 1 too high.
  8583. while (compare(prod, rem, prodL, remL) == 1) {
  8584. n--;
  8585. // Subtract divisor from product.
  8586. subtract(prod, yL < prodL ? yz : yc, prodL, base);
  8587. prodL = prod.length;
  8588. cmp = 1;
  8589. }
  8590. } else {
  8591. // n is 0 or 1, cmp is -1.
  8592. // If n is 0, there is no need to compare yc and rem again below,
  8593. // so change cmp to 1 to avoid it.
  8594. // If n is 1, leave cmp as -1, so yc and rem are compared again.
  8595. if (n == 0) {
  8596. // divisor < remainder, so n must be at least 1.
  8597. cmp = n = 1;
  8598. }
  8599. // product = divisor
  8600. prod = yc.slice();
  8601. prodL = prod.length;
  8602. }
  8603. if (prodL < remL) prod = [0].concat(prod);
  8604. // Subtract product from remainder.
  8605. subtract(rem, prod, remL, base);
  8606. remL = rem.length;
  8607. // If product was < remainder.
  8608. if (cmp == -1) {
  8609. // Compare divisor and new remainder.
  8610. // If divisor < new remainder, subtract divisor from remainder.
  8611. // Trial digit n too low.
  8612. // n is 1 too low about 5% of the time, and very rarely 2 too low.
  8613. while (compare(yc, rem, yL, remL) < 1) {
  8614. n++;
  8615. // Subtract divisor from remainder.
  8616. subtract(rem, yL < remL ? yz : yc, remL, base);
  8617. remL = rem.length;
  8618. }
  8619. }
  8620. } else if (cmp === 0) {
  8621. n++;
  8622. rem = [0];
  8623. } // else cmp === 1 and n will be 0
  8624. // Add the next digit, n, to the result array.
  8625. qc[i++] = n;
  8626. // Update the remainder.
  8627. if (rem[0]) {
  8628. rem[remL++] = xc[xi] || 0;
  8629. } else {
  8630. rem = [xc[xi]];
  8631. remL = 1;
  8632. }
  8633. } while ((xi++ < xL || rem[0] != null) && s--);
  8634. more = rem[0] != null;
  8635. // Leading zero?
  8636. if (!qc[0]) qc.splice(0, 1);
  8637. }
  8638. if (base == BASE) {
  8639. // To calculate q.e, first get the number of digits of qc[0].
  8640. for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);
  8641. round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);
  8642. // Caller is convertBase.
  8643. } else {
  8644. q.e = e;
  8645. q.r = +more;
  8646. }
  8647. return q;
  8648. };
  8649. })();
  8650. /*
  8651. * Return a string representing the value of BigNumber n in fixed-point or exponential
  8652. * notation rounded to the specified decimal places or significant digits.
  8653. *
  8654. * n: a BigNumber.
  8655. * i: the index of the last digit required (i.e. the digit that may be rounded up).
  8656. * rm: the rounding mode.
  8657. * id: 1 (toExponential) or 2 (toPrecision).
  8658. */
  8659. function format(n, i, rm, id) {
  8660. var c0, e, ne, len, str;
  8661. if (rm == null) rm = ROUNDING_MODE;
  8662. else intCheck(rm, 0, 8);
  8663. if (!n.c) return n.toString();
  8664. c0 = n.c[0];
  8665. ne = n.e;
  8666. if (i == null) {
  8667. str = coeffToString(n.c);
  8668. str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)
  8669. ? toExponential(str, ne)
  8670. : toFixedPoint(str, ne, '0');
  8671. } else {
  8672. n = round(new BigNumber(n), i, rm);
  8673. // n.e may have changed if the value was rounded up.
  8674. e = n.e;
  8675. str = coeffToString(n.c);
  8676. len = str.length;
  8677. // toPrecision returns exponential notation if the number of significant digits
  8678. // specified is less than the number of digits necessary to represent the integer
  8679. // part of the value in fixed-point notation.
  8680. // Exponential notation.
  8681. if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {
  8682. // Append zeros?
  8683. for (; len < i; str += '0', len++);
  8684. str = toExponential(str, e);
  8685. // Fixed-point notation.
  8686. } else {
  8687. i -= ne;
  8688. str = toFixedPoint(str, e, '0');
  8689. // Append zeros?
  8690. if (e + 1 > len) {
  8691. if (--i > 0) for (str += '.'; i--; str += '0');
  8692. } else {
  8693. i += e - len;
  8694. if (i > 0) {
  8695. if (e + 1 == len) str += '.';
  8696. for (; i--; str += '0');
  8697. }
  8698. }
  8699. }
  8700. }
  8701. return n.s < 0 && c0 ? '-' + str : str;
  8702. }
  8703. // Handle BigNumber.max and BigNumber.min.
  8704. function maxOrMin(args, method) {
  8705. var n,
  8706. i = 1,
  8707. m = new BigNumber(args[0]);
  8708. for (; i < args.length; i++) {
  8709. n = new BigNumber(args[i]);
  8710. // If any number is NaN, return NaN.
  8711. if (!n.s) {
  8712. m = n;
  8713. break;
  8714. } else if (method.call(m, n)) {
  8715. m = n;
  8716. }
  8717. }
  8718. return m;
  8719. }
  8720. /*
  8721. * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
  8722. * Called by minus, plus and times.
  8723. */
  8724. function normalise(n, c, e) {
  8725. var i = 1,
  8726. j = c.length;
  8727. // Remove trailing zeros.
  8728. for (; !c[--j]; c.pop());
  8729. // Calculate the base 10 exponent. First get the number of digits of c[0].
  8730. for (j = c[0]; j >= 10; j /= 10, i++);
  8731. // Overflow?
  8732. if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {
  8733. // Infinity.
  8734. n.c = n.e = null;
  8735. // Underflow?
  8736. } else if (e < MIN_EXP) {
  8737. // Zero.
  8738. n.c = [n.e = 0];
  8739. } else {
  8740. n.e = e;
  8741. n.c = c;
  8742. }
  8743. return n;
  8744. }
  8745. // Handle values that fail the validity test in BigNumber.
  8746. parseNumeric = (function () {
  8747. var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i,
  8748. dotAfter = /^([^.]+)\.$/,
  8749. dotBefore = /^\.([^.]+)$/,
  8750. isInfinityOrNaN = /^-?(Infinity|NaN)$/,
  8751. whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;
  8752. return function (x, str, isNum, b) {
  8753. var base,
  8754. s = isNum ? str : str.replace(whitespaceOrPlus, '');
  8755. // No exception on ±Infinity or NaN.
  8756. if (isInfinityOrNaN.test(s)) {
  8757. x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
  8758. } else {
  8759. if (!isNum) {
  8760. // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
  8761. s = s.replace(basePrefix, function (m, p1, p2) {
  8762. base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
  8763. return !b || b == base ? p1 : m;
  8764. });
  8765. if (b) {
  8766. base = b;
  8767. // E.g. '1.' to '1', '.1' to '0.1'
  8768. s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');
  8769. }
  8770. if (str != s) return new BigNumber(s, base);
  8771. }
  8772. // '[BigNumber Error] Not a number: {n}'
  8773. // '[BigNumber Error] Not a base {b} number: {n}'
  8774. if (BigNumber.DEBUG) {
  8775. throw Error
  8776. (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);
  8777. }
  8778. // NaN
  8779. x.s = null;
  8780. }
  8781. x.c = x.e = null;
  8782. }
  8783. })();
  8784. /*
  8785. * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
  8786. * If r is truthy, it is known that there are more digits after the rounding digit.
  8787. */
  8788. function round(x, sd, rm, r) {
  8789. var d, i, j, k, n, ni, rd,
  8790. xc = x.c,
  8791. pows10 = POWS_TEN;
  8792. // if x is not Infinity or NaN...
  8793. if (xc) {
  8794. // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
  8795. // n is a base 1e14 number, the value of the element of array x.c containing rd.
  8796. // ni is the index of n within x.c.
  8797. // d is the number of digits of n.
  8798. // i is the index of rd within n including leading zeros.
  8799. // j is the actual index of rd within n (if < 0, rd is a leading zero).
  8800. out: {
  8801. // Get the number of digits of the first element of xc.
  8802. for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);
  8803. i = sd - d;
  8804. // If the rounding digit is in the first element of xc...
  8805. if (i < 0) {
  8806. i += LOG_BASE;
  8807. j = sd;
  8808. n = xc[ni = 0];
  8809. // Get the rounding digit at index j of n.
  8810. rd = n / pows10[d - j - 1] % 10 | 0;
  8811. } else {
  8812. ni = mathceil((i + 1) / LOG_BASE);
  8813. if (ni >= xc.length) {
  8814. if (r) {
  8815. // Needed by sqrt.
  8816. for (; xc.length <= ni; xc.push(0));
  8817. n = rd = 0;
  8818. d = 1;
  8819. i %= LOG_BASE;
  8820. j = i - LOG_BASE + 1;
  8821. } else {
  8822. break out;
  8823. }
  8824. } else {
  8825. n = k = xc[ni];
  8826. // Get the number of digits of n.
  8827. for (d = 1; k >= 10; k /= 10, d++);
  8828. // Get the index of rd within n.
  8829. i %= LOG_BASE;
  8830. // Get the index of rd within n, adjusted for leading zeros.
  8831. // The number of leading zeros of n is given by LOG_BASE - d.
  8832. j = i - LOG_BASE + d;
  8833. // Get the rounding digit at index j of n.
  8834. rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;
  8835. }
  8836. }
  8837. r = r || sd < 0 ||
  8838. // Are there any non-zero digits after the rounding digit?
  8839. // The expression n % pows10[d - j - 1] returns all digits of n to the right
  8840. // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
  8841. xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);
  8842. r = rm < 4
  8843. ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
  8844. : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&
  8845. // Check whether the digit to the left of the rounding digit is odd.
  8846. ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||
  8847. rm == (x.s < 0 ? 8 : 7));
  8848. if (sd < 1 || !xc[0]) {
  8849. xc.length = 0;
  8850. if (r) {
  8851. // Convert sd to decimal places.
  8852. sd -= x.e + 1;
  8853. // 1, 0.1, 0.01, 0.001, 0.0001 etc.
  8854. xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];
  8855. x.e = -sd || 0;
  8856. } else {
  8857. // Zero.
  8858. xc[0] = x.e = 0;
  8859. }
  8860. return x;
  8861. }
  8862. // Remove excess digits.
  8863. if (i == 0) {
  8864. xc.length = ni;
  8865. k = 1;
  8866. ni--;
  8867. } else {
  8868. xc.length = ni + 1;
  8869. k = pows10[LOG_BASE - i];
  8870. // E.g. 56700 becomes 56000 if 7 is the rounding digit.
  8871. // j > 0 means i > number of leading zeros of n.
  8872. xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;
  8873. }
  8874. // Round up?
  8875. if (r) {
  8876. for (; ;) {
  8877. // If the digit to be rounded up is in the first element of xc...
  8878. if (ni == 0) {
  8879. // i will be the length of xc[0] before k is added.
  8880. for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);
  8881. j = xc[0] += k;
  8882. for (k = 1; j >= 10; j /= 10, k++);
  8883. // if i != k the length has increased.
  8884. if (i != k) {
  8885. x.e++;
  8886. if (xc[0] == BASE) xc[0] = 1;
  8887. }
  8888. break;
  8889. } else {
  8890. xc[ni] += k;
  8891. if (xc[ni] != BASE) break;
  8892. xc[ni--] = 0;
  8893. k = 1;
  8894. }
  8895. }
  8896. }
  8897. // Remove trailing zeros.
  8898. for (i = xc.length; xc[--i] === 0; xc.pop());
  8899. }
  8900. // Overflow? Infinity.
  8901. if (x.e > MAX_EXP) {
  8902. x.c = x.e = null;
  8903. // Underflow? Zero.
  8904. } else if (x.e < MIN_EXP) {
  8905. x.c = [x.e = 0];
  8906. }
  8907. }
  8908. return x;
  8909. }
  8910. function valueOf(n) {
  8911. var str,
  8912. e = n.e;
  8913. if (e === null) return n.toString();
  8914. str = coeffToString(n.c);
  8915. str = e <= TO_EXP_NEG || e >= TO_EXP_POS
  8916. ? toExponential(str, e)
  8917. : toFixedPoint(str, e, '0');
  8918. return n.s < 0 ? '-' + str : str;
  8919. }
  8920. // PROTOTYPE/INSTANCE METHODS
  8921. /*
  8922. * Return a new BigNumber whose value is the absolute value of this BigNumber.
  8923. */
  8924. P.absoluteValue = P.abs = function () {
  8925. var x = new BigNumber(this);
  8926. if (x.s < 0) x.s = 1;
  8927. return x;
  8928. };
  8929. /*
  8930. * Return
  8931. * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
  8932. * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
  8933. * 0 if they have the same value,
  8934. * or null if the value of either is NaN.
  8935. */
  8936. P.comparedTo = function (y, b) {
  8937. return compare(this, new BigNumber(y, b));
  8938. };
  8939. /*
  8940. * If dp is undefined or null or true or false, return the number of decimal places of the
  8941. * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.
  8942. *
  8943. * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this
  8944. * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or
  8945. * ROUNDING_MODE if rm is omitted.
  8946. *
  8947. * [dp] {number} Decimal places: integer, 0 to MAX inclusive.
  8948. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  8949. *
  8950. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
  8951. */
  8952. P.decimalPlaces = P.dp = function (dp, rm) {
  8953. var c, n, v,
  8954. x = this;
  8955. if (dp != null) {
  8956. intCheck(dp, 0, MAX);
  8957. if (rm == null) rm = ROUNDING_MODE;
  8958. else intCheck(rm, 0, 8);
  8959. return round(new BigNumber(x), dp + x.e + 1, rm);
  8960. }
  8961. if (!(c = x.c)) return null;
  8962. n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;
  8963. // Subtract the number of trailing zeros of the last number.
  8964. if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);
  8965. if (n < 0) n = 0;
  8966. return n;
  8967. };
  8968. /*
  8969. * n / 0 = I
  8970. * n / N = N
  8971. * n / I = 0
  8972. * 0 / n = 0
  8973. * 0 / 0 = N
  8974. * 0 / N = N
  8975. * 0 / I = 0
  8976. * N / n = N
  8977. * N / 0 = N
  8978. * N / N = N
  8979. * N / I = N
  8980. * I / n = I
  8981. * I / 0 = I
  8982. * I / N = N
  8983. * I / I = N
  8984. *
  8985. * Return a new BigNumber whose value is the value of this BigNumber divided by the value of
  8986. * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
  8987. */
  8988. P.dividedBy = P.div = function (y, b) {
  8989. return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);
  8990. };
  8991. /*
  8992. * Return a new BigNumber whose value is the integer part of dividing the value of this
  8993. * BigNumber by the value of BigNumber(y, b).
  8994. */
  8995. P.dividedToIntegerBy = P.idiv = function (y, b) {
  8996. return div(this, new BigNumber(y, b), 0, 1);
  8997. };
  8998. /*
  8999. * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.
  9000. *
  9001. * If m is present, return the result modulo m.
  9002. * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
  9003. * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.
  9004. *
  9005. * The modular power operation works efficiently when x, n, and m are integers, otherwise it
  9006. * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.
  9007. *
  9008. * n {number|string|BigNumber} The exponent. An integer.
  9009. * [m] {number|string|BigNumber} The modulus.
  9010. *
  9011. * '[BigNumber Error] Exponent not an integer: {n}'
  9012. */
  9013. P.exponentiatedBy = P.pow = function (n, m) {
  9014. var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,
  9015. x = this;
  9016. n = new BigNumber(n);
  9017. // Allow NaN and ±Infinity, but not other non-integers.
  9018. if (n.c && !n.isInteger()) {
  9019. throw Error
  9020. (bignumberError + 'Exponent not an integer: ' + valueOf(n));
  9021. }
  9022. if (m != null) m = new BigNumber(m);
  9023. // Exponent of MAX_SAFE_INTEGER is 15.
  9024. nIsBig = n.e > 14;
  9025. // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.
  9026. if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {
  9027. // The sign of the result of pow when x is negative depends on the evenness of n.
  9028. // If +n overflows to ±Infinity, the evenness of n would be not be known.
  9029. y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));
  9030. return m ? y.mod(m) : y;
  9031. }
  9032. nIsNeg = n.s < 0;
  9033. if (m) {
  9034. // x % m returns NaN if abs(m) is zero, or m is NaN.
  9035. if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);
  9036. isModExp = !nIsNeg && x.isInteger() && m.isInteger();
  9037. if (isModExp) x = x.mod(m);
  9038. // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.
  9039. // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.
  9040. } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0
  9041. // [1, 240000000]
  9042. ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7
  9043. // [80000000000000] [99999750000000]
  9044. : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {
  9045. // If x is negative and n is odd, k = -0, else k = 0.
  9046. k = x.s < 0 && isOdd(n) ? -0 : 0;
  9047. // If x >= 1, k = ±Infinity.
  9048. if (x.e > -1) k = 1 / k;
  9049. // If n is negative return ±0, else return ±Infinity.
  9050. return new BigNumber(nIsNeg ? 1 / k : k);
  9051. } else if (POW_PRECISION) {
  9052. // Truncating each coefficient array to a length of k after each multiplication
  9053. // equates to truncating significant digits to POW_PRECISION + [28, 41],
  9054. // i.e. there will be a minimum of 28 guard digits retained.
  9055. k = mathceil(POW_PRECISION / LOG_BASE + 2);
  9056. }
  9057. if (nIsBig) {
  9058. half = new BigNumber(0.5);
  9059. if (nIsNeg) n.s = 1;
  9060. nIsOdd = isOdd(n);
  9061. } else {
  9062. i = Math.abs(+valueOf(n));
  9063. nIsOdd = i % 2;
  9064. }
  9065. y = new BigNumber(ONE);
  9066. // Performs 54 loop iterations for n of 9007199254740991.
  9067. for (; ;) {
  9068. if (nIsOdd) {
  9069. y = y.times(x);
  9070. if (!y.c) break;
  9071. if (k) {
  9072. if (y.c.length > k) y.c.length = k;
  9073. } else if (isModExp) {
  9074. y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));
  9075. }
  9076. }
  9077. if (i) {
  9078. i = mathfloor(i / 2);
  9079. if (i === 0) break;
  9080. nIsOdd = i % 2;
  9081. } else {
  9082. n = n.times(half);
  9083. round(n, n.e + 1, 1);
  9084. if (n.e > 14) {
  9085. nIsOdd = isOdd(n);
  9086. } else {
  9087. i = +valueOf(n);
  9088. if (i === 0) break;
  9089. nIsOdd = i % 2;
  9090. }
  9091. }
  9092. x = x.times(x);
  9093. if (k) {
  9094. if (x.c && x.c.length > k) x.c.length = k;
  9095. } else if (isModExp) {
  9096. x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));
  9097. }
  9098. }
  9099. if (isModExp) return y;
  9100. if (nIsNeg) y = ONE.div(y);
  9101. return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;
  9102. };
  9103. /*
  9104. * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer
  9105. * using rounding mode rm, or ROUNDING_MODE if rm is omitted.
  9106. *
  9107. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  9108. *
  9109. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'
  9110. */
  9111. P.integerValue = function (rm) {
  9112. var n = new BigNumber(this);
  9113. if (rm == null) rm = ROUNDING_MODE;
  9114. else intCheck(rm, 0, 8);
  9115. return round(n, n.e + 1, rm);
  9116. };
  9117. /*
  9118. * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
  9119. * otherwise return false.
  9120. */
  9121. P.isEqualTo = P.eq = function (y, b) {
  9122. return compare(this, new BigNumber(y, b)) === 0;
  9123. };
  9124. /*
  9125. * Return true if the value of this BigNumber is a finite number, otherwise return false.
  9126. */
  9127. P.isFinite = function () {
  9128. return !!this.c;
  9129. };
  9130. /*
  9131. * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
  9132. * otherwise return false.
  9133. */
  9134. P.isGreaterThan = P.gt = function (y, b) {
  9135. return compare(this, new BigNumber(y, b)) > 0;
  9136. };
  9137. /*
  9138. * Return true if the value of this BigNumber is greater than or equal to the value of
  9139. * BigNumber(y, b), otherwise return false.
  9140. */
  9141. P.isGreaterThanOrEqualTo = P.gte = function (y, b) {
  9142. return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;
  9143. };
  9144. /*
  9145. * Return true if the value of this BigNumber is an integer, otherwise return false.
  9146. */
  9147. P.isInteger = function () {
  9148. return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;
  9149. };
  9150. /*
  9151. * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
  9152. * otherwise return false.
  9153. */
  9154. P.isLessThan = P.lt = function (y, b) {
  9155. return compare(this, new BigNumber(y, b)) < 0;
  9156. };
  9157. /*
  9158. * Return true if the value of this BigNumber is less than or equal to the value of
  9159. * BigNumber(y, b), otherwise return false.
  9160. */
  9161. P.isLessThanOrEqualTo = P.lte = function (y, b) {
  9162. return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;
  9163. };
  9164. /*
  9165. * Return true if the value of this BigNumber is NaN, otherwise return false.
  9166. */
  9167. P.isNaN = function () {
  9168. return !this.s;
  9169. };
  9170. /*
  9171. * Return true if the value of this BigNumber is negative, otherwise return false.
  9172. */
  9173. P.isNegative = function () {
  9174. return this.s < 0;
  9175. };
  9176. /*
  9177. * Return true if the value of this BigNumber is positive, otherwise return false.
  9178. */
  9179. P.isPositive = function () {
  9180. return this.s > 0;
  9181. };
  9182. /*
  9183. * Return true if the value of this BigNumber is 0 or -0, otherwise return false.
  9184. */
  9185. P.isZero = function () {
  9186. return !!this.c && this.c[0] == 0;
  9187. };
  9188. /*
  9189. * n - 0 = n
  9190. * n - N = N
  9191. * n - I = -I
  9192. * 0 - n = -n
  9193. * 0 - 0 = 0
  9194. * 0 - N = N
  9195. * 0 - I = -I
  9196. * N - n = N
  9197. * N - 0 = N
  9198. * N - N = N
  9199. * N - I = N
  9200. * I - n = I
  9201. * I - 0 = I
  9202. * I - N = N
  9203. * I - I = N
  9204. *
  9205. * Return a new BigNumber whose value is the value of this BigNumber minus the value of
  9206. * BigNumber(y, b).
  9207. */
  9208. P.minus = function (y, b) {
  9209. var i, j, t, xLTy,
  9210. x = this,
  9211. a = x.s;
  9212. y = new BigNumber(y, b);
  9213. b = y.s;
  9214. // Either NaN?
  9215. if (!a || !b) return new BigNumber(NaN);
  9216. // Signs differ?
  9217. if (a != b) {
  9218. y.s = -b;
  9219. return x.plus(y);
  9220. }
  9221. var xe = x.e / LOG_BASE,
  9222. ye = y.e / LOG_BASE,
  9223. xc = x.c,
  9224. yc = y.c;
  9225. if (!xe || !ye) {
  9226. // Either Infinity?
  9227. if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);
  9228. // Either zero?
  9229. if (!xc[0] || !yc[0]) {
  9230. // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
  9231. return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :
  9232. // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
  9233. ROUNDING_MODE == 3 ? -0 : 0);
  9234. }
  9235. }
  9236. xe = bitFloor(xe);
  9237. ye = bitFloor(ye);
  9238. xc = xc.slice();
  9239. // Determine which is the bigger number.
  9240. if (a = xe - ye) {
  9241. if (xLTy = a < 0) {
  9242. a = -a;
  9243. t = xc;
  9244. } else {
  9245. ye = xe;
  9246. t = yc;
  9247. }
  9248. t.reverse();
  9249. // Prepend zeros to equalise exponents.
  9250. for (b = a; b--; t.push(0));
  9251. t.reverse();
  9252. } else {
  9253. // Exponents equal. Check digit by digit.
  9254. j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;
  9255. for (a = b = 0; b < j; b++) {
  9256. if (xc[b] != yc[b]) {
  9257. xLTy = xc[b] < yc[b];
  9258. break;
  9259. }
  9260. }
  9261. }
  9262. // x < y? Point xc to the array of the bigger number.
  9263. if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;
  9264. b = (j = yc.length) - (i = xc.length);
  9265. // Append zeros to xc if shorter.
  9266. // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
  9267. if (b > 0) for (; b--; xc[i++] = 0);
  9268. b = BASE - 1;
  9269. // Subtract yc from xc.
  9270. for (; j > a;) {
  9271. if (xc[--j] < yc[j]) {
  9272. for (i = j; i && !xc[--i]; xc[i] = b);
  9273. --xc[i];
  9274. xc[j] += BASE;
  9275. }
  9276. xc[j] -= yc[j];
  9277. }
  9278. // Remove leading zeros and adjust exponent accordingly.
  9279. for (; xc[0] == 0; xc.splice(0, 1), --ye);
  9280. // Zero?
  9281. if (!xc[0]) {
  9282. // Following IEEE 754 (2008) 6.3,
  9283. // n - n = +0 but n - n = -0 when rounding towards -Infinity.
  9284. y.s = ROUNDING_MODE == 3 ? -1 : 1;
  9285. y.c = [y.e = 0];
  9286. return y;
  9287. }
  9288. // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
  9289. // for finite x and y.
  9290. return normalise(y, xc, ye);
  9291. };
  9292. /*
  9293. * n % 0 = N
  9294. * n % N = N
  9295. * n % I = n
  9296. * 0 % n = 0
  9297. * -0 % n = -0
  9298. * 0 % 0 = N
  9299. * 0 % N = N
  9300. * 0 % I = 0
  9301. * N % n = N
  9302. * N % 0 = N
  9303. * N % N = N
  9304. * N % I = N
  9305. * I % n = N
  9306. * I % 0 = N
  9307. * I % N = N
  9308. * I % I = N
  9309. *
  9310. * Return a new BigNumber whose value is the value of this BigNumber modulo the value of
  9311. * BigNumber(y, b). The result depends on the value of MODULO_MODE.
  9312. */
  9313. P.modulo = P.mod = function (y, b) {
  9314. var q, s,
  9315. x = this;
  9316. y = new BigNumber(y, b);
  9317. // Return NaN if x is Infinity or NaN, or y is NaN or zero.
  9318. if (!x.c || !y.s || y.c && !y.c[0]) {
  9319. return new BigNumber(NaN);
  9320. // Return x if y is Infinity or x is zero.
  9321. } else if (!y.c || x.c && !x.c[0]) {
  9322. return new BigNumber(x);
  9323. }
  9324. if (MODULO_MODE == 9) {
  9325. // Euclidian division: q = sign(y) * floor(x / abs(y))
  9326. // r = x - qy where 0 <= r < abs(y)
  9327. s = y.s;
  9328. y.s = 1;
  9329. q = div(x, y, 0, 3);
  9330. y.s = s;
  9331. q.s *= s;
  9332. } else {
  9333. q = div(x, y, 0, MODULO_MODE);
  9334. }
  9335. y = x.minus(q.times(y));
  9336. // To match JavaScript %, ensure sign of zero is sign of dividend.
  9337. if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;
  9338. return y;
  9339. };
  9340. /*
  9341. * n * 0 = 0
  9342. * n * N = N
  9343. * n * I = I
  9344. * 0 * n = 0
  9345. * 0 * 0 = 0
  9346. * 0 * N = N
  9347. * 0 * I = N
  9348. * N * n = N
  9349. * N * 0 = N
  9350. * N * N = N
  9351. * N * I = N
  9352. * I * n = I
  9353. * I * 0 = N
  9354. * I * N = N
  9355. * I * I = I
  9356. *
  9357. * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value
  9358. * of BigNumber(y, b).
  9359. */
  9360. P.multipliedBy = P.times = function (y, b) {
  9361. var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,
  9362. base, sqrtBase,
  9363. x = this,
  9364. xc = x.c,
  9365. yc = (y = new BigNumber(y, b)).c;
  9366. // Either NaN, ±Infinity or ±0?
  9367. if (!xc || !yc || !xc[0] || !yc[0]) {
  9368. // Return NaN if either is NaN, or one is 0 and the other is Infinity.
  9369. if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {
  9370. y.c = y.e = y.s = null;
  9371. } else {
  9372. y.s *= x.s;
  9373. // Return ±Infinity if either is ±Infinity.
  9374. if (!xc || !yc) {
  9375. y.c = y.e = null;
  9376. // Return ±0 if either is ±0.
  9377. } else {
  9378. y.c = [0];
  9379. y.e = 0;
  9380. }
  9381. }
  9382. return y;
  9383. }
  9384. e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);
  9385. y.s *= x.s;
  9386. xcL = xc.length;
  9387. ycL = yc.length;
  9388. // Ensure xc points to longer array and xcL to its length.
  9389. if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;
  9390. // Initialise the result array with zeros.
  9391. for (i = xcL + ycL, zc = []; i--; zc.push(0));
  9392. base = BASE;
  9393. sqrtBase = SQRT_BASE;
  9394. for (i = ycL; --i >= 0;) {
  9395. c = 0;
  9396. ylo = yc[i] % sqrtBase;
  9397. yhi = yc[i] / sqrtBase | 0;
  9398. for (k = xcL, j = i + k; j > i;) {
  9399. xlo = xc[--k] % sqrtBase;
  9400. xhi = xc[k] / sqrtBase | 0;
  9401. m = yhi * xlo + xhi * ylo;
  9402. xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;
  9403. c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;
  9404. zc[j--] = xlo % base;
  9405. }
  9406. zc[j] = c;
  9407. }
  9408. if (c) {
  9409. ++e;
  9410. } else {
  9411. zc.splice(0, 1);
  9412. }
  9413. return normalise(y, zc, e);
  9414. };
  9415. /*
  9416. * Return a new BigNumber whose value is the value of this BigNumber negated,
  9417. * i.e. multiplied by -1.
  9418. */
  9419. P.negated = function () {
  9420. var x = new BigNumber(this);
  9421. x.s = -x.s || null;
  9422. return x;
  9423. };
  9424. /*
  9425. * n + 0 = n
  9426. * n + N = N
  9427. * n + I = I
  9428. * 0 + n = n
  9429. * 0 + 0 = 0
  9430. * 0 + N = N
  9431. * 0 + I = I
  9432. * N + n = N
  9433. * N + 0 = N
  9434. * N + N = N
  9435. * N + I = N
  9436. * I + n = I
  9437. * I + 0 = I
  9438. * I + N = N
  9439. * I + I = I
  9440. *
  9441. * Return a new BigNumber whose value is the value of this BigNumber plus the value of
  9442. * BigNumber(y, b).
  9443. */
  9444. P.plus = function (y, b) {
  9445. var t,
  9446. x = this,
  9447. a = x.s;
  9448. y = new BigNumber(y, b);
  9449. b = y.s;
  9450. // Either NaN?
  9451. if (!a || !b) return new BigNumber(NaN);
  9452. // Signs differ?
  9453. if (a != b) {
  9454. y.s = -b;
  9455. return x.minus(y);
  9456. }
  9457. var xe = x.e / LOG_BASE,
  9458. ye = y.e / LOG_BASE,
  9459. xc = x.c,
  9460. yc = y.c;
  9461. if (!xe || !ye) {
  9462. // Return ±Infinity if either ±Infinity.
  9463. if (!xc || !yc) return new BigNumber(a / 0);
  9464. // Either zero?
  9465. // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
  9466. if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);
  9467. }
  9468. xe = bitFloor(xe);
  9469. ye = bitFloor(ye);
  9470. xc = xc.slice();
  9471. // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
  9472. if (a = xe - ye) {
  9473. if (a > 0) {
  9474. ye = xe;
  9475. t = yc;
  9476. } else {
  9477. a = -a;
  9478. t = xc;
  9479. }
  9480. t.reverse();
  9481. for (; a--; t.push(0));
  9482. t.reverse();
  9483. }
  9484. a = xc.length;
  9485. b = yc.length;
  9486. // Point xc to the longer array, and b to the shorter length.
  9487. if (a - b < 0) t = yc, yc = xc, xc = t, b = a;
  9488. // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
  9489. for (a = 0; b;) {
  9490. a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;
  9491. xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;
  9492. }
  9493. if (a) {
  9494. xc = [a].concat(xc);
  9495. ++ye;
  9496. }
  9497. // No need to check for zero, as +x + +y != 0 && -x + -y != 0
  9498. // ye = MAX_EXP + 1 possible
  9499. return normalise(y, xc, ye);
  9500. };
  9501. /*
  9502. * If sd is undefined or null or true or false, return the number of significant digits of
  9503. * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.
  9504. * If sd is true include integer-part trailing zeros in the count.
  9505. *
  9506. * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this
  9507. * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or
  9508. * ROUNDING_MODE if rm is omitted.
  9509. *
  9510. * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.
  9511. * boolean: whether to count integer-part trailing zeros: true or false.
  9512. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  9513. *
  9514. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
  9515. */
  9516. P.precision = P.sd = function (sd, rm) {
  9517. var c, n, v,
  9518. x = this;
  9519. if (sd != null && sd !== !!sd) {
  9520. intCheck(sd, 1, MAX);
  9521. if (rm == null) rm = ROUNDING_MODE;
  9522. else intCheck(rm, 0, 8);
  9523. return round(new BigNumber(x), sd, rm);
  9524. }
  9525. if (!(c = x.c)) return null;
  9526. v = c.length - 1;
  9527. n = v * LOG_BASE + 1;
  9528. if (v = c[v]) {
  9529. // Subtract the number of trailing zeros of the last element.
  9530. for (; v % 10 == 0; v /= 10, n--);
  9531. // Add the number of digits of the first element.
  9532. for (v = c[0]; v >= 10; v /= 10, n++);
  9533. }
  9534. if (sd && x.e + 1 > n) n = x.e + 1;
  9535. return n;
  9536. };
  9537. /*
  9538. * Return a new BigNumber whose value is the value of this BigNumber shifted by k places
  9539. * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
  9540. *
  9541. * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
  9542. *
  9543. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'
  9544. */
  9545. P.shiftedBy = function (k) {
  9546. intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
  9547. return this.times('1e' + k);
  9548. };
  9549. /*
  9550. * sqrt(-n) = N
  9551. * sqrt(N) = N
  9552. * sqrt(-I) = N
  9553. * sqrt(I) = I
  9554. * sqrt(0) = 0
  9555. * sqrt(-0) = -0
  9556. *
  9557. * Return a new BigNumber whose value is the square root of the value of this BigNumber,
  9558. * rounded according to DECIMAL_PLACES and ROUNDING_MODE.
  9559. */
  9560. P.squareRoot = P.sqrt = function () {
  9561. var m, n, r, rep, t,
  9562. x = this,
  9563. c = x.c,
  9564. s = x.s,
  9565. e = x.e,
  9566. dp = DECIMAL_PLACES + 4,
  9567. half = new BigNumber('0.5');
  9568. // Negative/NaN/Infinity/zero?
  9569. if (s !== 1 || !c || !c[0]) {
  9570. return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);
  9571. }
  9572. // Initial estimate.
  9573. s = Math.sqrt(+valueOf(x));
  9574. // Math.sqrt underflow/overflow?
  9575. // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
  9576. if (s == 0 || s == 1 / 0) {
  9577. n = coeffToString(c);
  9578. if ((n.length + e) % 2 == 0) n += '0';
  9579. s = Math.sqrt(+n);
  9580. e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);
  9581. if (s == 1 / 0) {
  9582. n = '5e' + e;
  9583. } else {
  9584. n = s.toExponential();
  9585. n = n.slice(0, n.indexOf('e') + 1) + e;
  9586. }
  9587. r = new BigNumber(n);
  9588. } else {
  9589. r = new BigNumber(s + '');
  9590. }
  9591. // Check for zero.
  9592. // r could be zero if MIN_EXP is changed after the this value was created.
  9593. // This would cause a division by zero (x/t) and hence Infinity below, which would cause
  9594. // coeffToString to throw.
  9595. if (r.c[0]) {
  9596. e = r.e;
  9597. s = e + dp;
  9598. if (s < 3) s = 0;
  9599. // Newton-Raphson iteration.
  9600. for (; ;) {
  9601. t = r;
  9602. r = half.times(t.plus(div(x, t, dp, 1)));
  9603. if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {
  9604. // The exponent of r may here be one less than the final result exponent,
  9605. // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
  9606. // are indexed correctly.
  9607. if (r.e < e) --s;
  9608. n = n.slice(s - 3, s + 1);
  9609. // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
  9610. // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
  9611. // iteration.
  9612. if (n == '9999' || !rep && n == '4999') {
  9613. // On the first iteration only, check to see if rounding up gives the
  9614. // exact result as the nines may infinitely repeat.
  9615. if (!rep) {
  9616. round(t, t.e + DECIMAL_PLACES + 2, 0);
  9617. if (t.times(t).eq(x)) {
  9618. r = t;
  9619. break;
  9620. }
  9621. }
  9622. dp += 4;
  9623. s += 4;
  9624. rep = 1;
  9625. } else {
  9626. // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
  9627. // result. If not, then there are further digits and m will be truthy.
  9628. if (!+n || !+n.slice(1) && n.charAt(0) == '5') {
  9629. // Truncate to the first rounding digit.
  9630. round(r, r.e + DECIMAL_PLACES + 2, 1);
  9631. m = !r.times(r).eq(x);
  9632. }
  9633. break;
  9634. }
  9635. }
  9636. }
  9637. }
  9638. return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);
  9639. };
  9640. /*
  9641. * Return a string representing the value of this BigNumber in exponential notation and
  9642. * rounded using ROUNDING_MODE to dp fixed decimal places.
  9643. *
  9644. * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
  9645. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  9646. *
  9647. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
  9648. */
  9649. P.toExponential = function (dp, rm) {
  9650. if (dp != null) {
  9651. intCheck(dp, 0, MAX);
  9652. dp++;
  9653. }
  9654. return format(this, dp, rm, 1);
  9655. };
  9656. /*
  9657. * Return a string representing the value of this BigNumber in fixed-point notation rounding
  9658. * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
  9659. *
  9660. * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
  9661. * but e.g. (-0.00001).toFixed(0) is '-0'.
  9662. *
  9663. * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
  9664. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  9665. *
  9666. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
  9667. */
  9668. P.toFixed = function (dp, rm) {
  9669. if (dp != null) {
  9670. intCheck(dp, 0, MAX);
  9671. dp = dp + this.e + 1;
  9672. }
  9673. return format(this, dp, rm);
  9674. };
  9675. /*
  9676. * Return a string representing the value of this BigNumber in fixed-point notation rounded
  9677. * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
  9678. * of the format or FORMAT object (see BigNumber.set).
  9679. *
  9680. * The formatting object may contain some or all of the properties shown below.
  9681. *
  9682. * FORMAT = {
  9683. * prefix: '',
  9684. * groupSize: 3,
  9685. * secondaryGroupSize: 0,
  9686. * groupSeparator: ',',
  9687. * decimalSeparator: '.',
  9688. * fractionGroupSize: 0,
  9689. * fractionGroupSeparator: '\xA0', // non-breaking space
  9690. * suffix: ''
  9691. * };
  9692. *
  9693. * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
  9694. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  9695. * [format] {object} Formatting options. See FORMAT pbject above.
  9696. *
  9697. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
  9698. * '[BigNumber Error] Argument not an object: {format}'
  9699. */
  9700. P.toFormat = function (dp, rm, format) {
  9701. var str,
  9702. x = this;
  9703. if (format == null) {
  9704. if (dp != null && rm && typeof rm == 'object') {
  9705. format = rm;
  9706. rm = null;
  9707. } else if (dp && typeof dp == 'object') {
  9708. format = dp;
  9709. dp = rm = null;
  9710. } else {
  9711. format = FORMAT;
  9712. }
  9713. } else if (typeof format != 'object') {
  9714. throw Error
  9715. (bignumberError + 'Argument not an object: ' + format);
  9716. }
  9717. str = x.toFixed(dp, rm);
  9718. if (x.c) {
  9719. var i,
  9720. arr = str.split('.'),
  9721. g1 = +format.groupSize,
  9722. g2 = +format.secondaryGroupSize,
  9723. groupSeparator = format.groupSeparator || '',
  9724. intPart = arr[0],
  9725. fractionPart = arr[1],
  9726. isNeg = x.s < 0,
  9727. intDigits = isNeg ? intPart.slice(1) : intPart,
  9728. len = intDigits.length;
  9729. if (g2) i = g1, g1 = g2, g2 = i, len -= i;
  9730. if (g1 > 0 && len > 0) {
  9731. i = len % g1 || g1;
  9732. intPart = intDigits.substr(0, i);
  9733. for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);
  9734. if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);
  9735. if (isNeg) intPart = '-' + intPart;
  9736. }
  9737. str = fractionPart
  9738. ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)
  9739. ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'),
  9740. '$&' + (format.fractionGroupSeparator || ''))
  9741. : fractionPart)
  9742. : intPart;
  9743. }
  9744. return (format.prefix || '') + str + (format.suffix || '');
  9745. };
  9746. /*
  9747. * Return an array of two BigNumbers representing the value of this BigNumber as a simple
  9748. * fraction with an integer numerator and an integer denominator.
  9749. * The denominator will be a positive non-zero value less than or equal to the specified
  9750. * maximum denominator. If a maximum denominator is not specified, the denominator will be
  9751. * the lowest value necessary to represent the number exactly.
  9752. *
  9753. * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.
  9754. *
  9755. * '[BigNumber Error] Argument {not an integer|out of range} : {md}'
  9756. */
  9757. P.toFraction = function (md) {
  9758. var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,
  9759. x = this,
  9760. xc = x.c;
  9761. if (md != null) {
  9762. n = new BigNumber(md);
  9763. // Throw if md is less than one or is not an integer, unless it is Infinity.
  9764. if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {
  9765. throw Error
  9766. (bignumberError + 'Argument ' +
  9767. (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));
  9768. }
  9769. }
  9770. if (!xc) return new BigNumber(x);
  9771. d = new BigNumber(ONE);
  9772. n1 = d0 = new BigNumber(ONE);
  9773. d1 = n0 = new BigNumber(ONE);
  9774. s = coeffToString(xc);
  9775. // Determine initial denominator.
  9776. // d is a power of 10 and the minimum max denominator that specifies the value exactly.
  9777. e = d.e = s.length - x.e - 1;
  9778. d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];
  9779. md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;
  9780. exp = MAX_EXP;
  9781. MAX_EXP = 1 / 0;
  9782. n = new BigNumber(s);
  9783. // n0 = d1 = 0
  9784. n0.c[0] = 0;
  9785. for (; ;) {
  9786. q = div(n, d, 0, 1);
  9787. d2 = d0.plus(q.times(d1));
  9788. if (d2.comparedTo(md) == 1) break;
  9789. d0 = d1;
  9790. d1 = d2;
  9791. n1 = n0.plus(q.times(d2 = n1));
  9792. n0 = d2;
  9793. d = n.minus(q.times(d2 = d));
  9794. n = d2;
  9795. }
  9796. d2 = div(md.minus(d0), d1, 0, 1);
  9797. n0 = n0.plus(d2.times(n1));
  9798. d0 = d0.plus(d2.times(d1));
  9799. n0.s = n1.s = x.s;
  9800. e = e * 2;
  9801. // Determine which fraction is closer to x, n0/d0 or n1/d1
  9802. r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(
  9803. div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];
  9804. MAX_EXP = exp;
  9805. return r;
  9806. };
  9807. /*
  9808. * Return the value of this BigNumber converted to a number primitive.
  9809. */
  9810. P.toNumber = function () {
  9811. return +valueOf(this);
  9812. };
  9813. /*
  9814. * Return a string representing the value of this BigNumber rounded to sd significant digits
  9815. * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
  9816. * necessary to represent the integer part of the value in fixed-point notation, then use
  9817. * exponential notation.
  9818. *
  9819. * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
  9820. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  9821. *
  9822. * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
  9823. */
  9824. P.toPrecision = function (sd, rm) {
  9825. if (sd != null) intCheck(sd, 1, MAX);
  9826. return format(this, sd, rm, 2);
  9827. };
  9828. /*
  9829. * Return a string representing the value of this BigNumber in base b, or base 10 if b is
  9830. * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
  9831. * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
  9832. * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
  9833. * TO_EXP_NEG, return exponential notation.
  9834. *
  9835. * [b] {number} Integer, 2 to ALPHABET.length inclusive.
  9836. *
  9837. * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
  9838. */
  9839. P.toString = function (b) {
  9840. var str,
  9841. n = this,
  9842. s = n.s,
  9843. e = n.e;
  9844. // Infinity or NaN?
  9845. if (e === null) {
  9846. if (s) {
  9847. str = 'Infinity';
  9848. if (s < 0) str = '-' + str;
  9849. } else {
  9850. str = 'NaN';
  9851. }
  9852. } else {
  9853. if (b == null) {
  9854. str = e <= TO_EXP_NEG || e >= TO_EXP_POS
  9855. ? toExponential(coeffToString(n.c), e)
  9856. : toFixedPoint(coeffToString(n.c), e, '0');
  9857. } else if (b === 10 && alphabetHasNormalDecimalDigits) {
  9858. n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);
  9859. str = toFixedPoint(coeffToString(n.c), n.e, '0');
  9860. } else {
  9861. intCheck(b, 2, ALPHABET.length, 'Base');
  9862. str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);
  9863. }
  9864. if (s < 0 && n.c[0]) str = '-' + str;
  9865. }
  9866. return str;
  9867. };
  9868. /*
  9869. * Return as toString, but do not accept a base argument, and include the minus sign for
  9870. * negative zero.
  9871. */
  9872. P.valueOf = P.toJSON = function () {
  9873. return valueOf(this);
  9874. };
  9875. P._isBigNumber = true;
  9876. if (configObject != null) BigNumber.set(configObject);
  9877. return BigNumber;
  9878. }
  9879. // PRIVATE HELPER FUNCTIONS
  9880. // These functions don't need access to variables,
  9881. // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.
  9882. function bitFloor(n) {
  9883. var i = n | 0;
  9884. return n > 0 || n === i ? i : i - 1;
  9885. }
  9886. // Return a coefficient array as a string of base 10 digits.
  9887. function coeffToString(a) {
  9888. var s, z,
  9889. i = 1,
  9890. j = a.length,
  9891. r = a[0] + '';
  9892. for (; i < j;) {
  9893. s = a[i++] + '';
  9894. z = LOG_BASE - s.length;
  9895. for (; z--; s = '0' + s);
  9896. r += s;
  9897. }
  9898. // Determine trailing zeros.
  9899. for (j = r.length; r.charCodeAt(--j) === 48;);
  9900. return r.slice(0, j + 1 || 1);
  9901. }
  9902. // Compare the value of BigNumbers x and y.
  9903. function compare(x, y) {
  9904. var a, b,
  9905. xc = x.c,
  9906. yc = y.c,
  9907. i = x.s,
  9908. j = y.s,
  9909. k = x.e,
  9910. l = y.e;
  9911. // Either NaN?
  9912. if (!i || !j) return null;
  9913. a = xc && !xc[0];
  9914. b = yc && !yc[0];
  9915. // Either zero?
  9916. if (a || b) return a ? b ? 0 : -j : i;
  9917. // Signs differ?
  9918. if (i != j) return i;
  9919. a = i < 0;
  9920. b = k == l;
  9921. // Either Infinity?
  9922. if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;
  9923. // Compare exponents.
  9924. if (!b) return k > l ^ a ? 1 : -1;
  9925. j = (k = xc.length) < (l = yc.length) ? k : l;
  9926. // Compare digit by digit.
  9927. for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;
  9928. // Compare lengths.
  9929. return k == l ? 0 : k > l ^ a ? 1 : -1;
  9930. }
  9931. /*
  9932. * Check that n is a primitive number, an integer, and in range, otherwise throw.
  9933. */
  9934. function intCheck(n, min, max, name) {
  9935. if (n < min || n > max || n !== mathfloor(n)) {
  9936. throw Error
  9937. (bignumberError + (name || 'Argument') + (typeof n == 'number'
  9938. ? n < min || n > max ? ' out of range: ' : ' not an integer: '
  9939. : ' not a primitive number: ') + String(n));
  9940. }
  9941. }
  9942. // Assumes finite n.
  9943. function isOdd(n) {
  9944. var k = n.c.length - 1;
  9945. return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;
  9946. }
  9947. function toExponential(str, e) {
  9948. return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +
  9949. (e < 0 ? 'e' : 'e+') + e;
  9950. }
  9951. function toFixedPoint(str, e, z) {
  9952. var len, zs;
  9953. // Negative exponent?
  9954. if (e < 0) {
  9955. // Prepend zeros.
  9956. for (zs = z + '.'; ++e; zs += z);
  9957. str = zs + str;
  9958. // Positive exponent
  9959. } else {
  9960. len = str.length;
  9961. // Append zeros.
  9962. if (++e > len) {
  9963. for (zs = z, e -= len; --e; zs += z);
  9964. str += zs;
  9965. } else if (e < len) {
  9966. str = str.slice(0, e) + '.' + str.slice(e);
  9967. }
  9968. }
  9969. return str;
  9970. }
  9971. // EXPORT
  9972. BigNumber = clone();
  9973. BigNumber['default'] = BigNumber.BigNumber = BigNumber;
  9974. // AMD.
  9975. if (true) {
  9976. !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { return BigNumber; }).call(exports, __webpack_require__, exports, module),
  9977. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  9978. // Node.js and other environments that support module.exports.
  9979. } else {}
  9980. })(this);
  9981. /***/ }),
  9982. /***/ 84090:
  9983. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  9984. "use strict";
  9985. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  9986. Object.defineProperty(exports, "__esModule", ({ value: true }));
  9987. const crypto = __webpack_require__(56903);
  9988. const bs58check = __webpack_require__(58334);
  9989. const ecc = __webpack_require__(95892);
  9990. const typeforce = __webpack_require__(2401);
  9991. const wif = __webpack_require__(37174);
  9992. const UINT256_TYPE = typeforce.BufferN(32);
  9993. const NETWORK_TYPE = typeforce.compile({
  9994. wif: typeforce.UInt8,
  9995. bip32: {
  9996. public: typeforce.UInt32,
  9997. private: typeforce.UInt32,
  9998. },
  9999. });
  10000. const BITCOIN = {
  10001. messagePrefix: '\x18Bitcoin Signed Message:\n',
  10002. bech32: 'bc',
  10003. bip32: {
  10004. public: 0x0488b21e,
  10005. private: 0x0488ade4,
  10006. },
  10007. pubKeyHash: 0x00,
  10008. scriptHash: 0x05,
  10009. wif: 0x80,
  10010. };
  10011. const HIGHEST_BIT = 0x80000000;
  10012. const UINT31_MAX = Math.pow(2, 31) - 1;
  10013. function BIP32Path(value) {
  10014. return (typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/) !== null);
  10015. }
  10016. function UInt31(value) {
  10017. return typeforce.UInt32(value) && value <= UINT31_MAX;
  10018. }
  10019. class BIP32 {
  10020. constructor(__D, __Q, chainCode, network, __DEPTH = 0, __INDEX = 0, __PARENT_FINGERPRINT = 0x00000000) {
  10021. this.__D = __D;
  10022. this.__Q = __Q;
  10023. this.chainCode = chainCode;
  10024. this.network = network;
  10025. this.__DEPTH = __DEPTH;
  10026. this.__INDEX = __INDEX;
  10027. this.__PARENT_FINGERPRINT = __PARENT_FINGERPRINT;
  10028. typeforce(NETWORK_TYPE, network);
  10029. this.lowR = false;
  10030. }
  10031. get depth() {
  10032. return this.__DEPTH;
  10033. }
  10034. get index() {
  10035. return this.__INDEX;
  10036. }
  10037. get parentFingerprint() {
  10038. return this.__PARENT_FINGERPRINT;
  10039. }
  10040. get publicKey() {
  10041. if (this.__Q === undefined)
  10042. this.__Q = ecc.pointFromScalar(this.__D, true);
  10043. return this.__Q;
  10044. }
  10045. get privateKey() {
  10046. return this.__D;
  10047. }
  10048. get identifier() {
  10049. return crypto.hash160(this.publicKey);
  10050. }
  10051. get fingerprint() {
  10052. return this.identifier.slice(0, 4);
  10053. }
  10054. get compressed() {
  10055. return true;
  10056. }
  10057. // Private === not neutered
  10058. // Public === neutered
  10059. isNeutered() {
  10060. return this.__D === undefined;
  10061. }
  10062. neutered() {
  10063. return fromPublicKeyLocal(this.publicKey, this.chainCode, this.network, this.depth, this.index, this.parentFingerprint);
  10064. }
  10065. toBase58() {
  10066. const network = this.network;
  10067. const version = !this.isNeutered()
  10068. ? network.bip32.private
  10069. : network.bip32.public;
  10070. const buffer = Buffer.allocUnsafe(78);
  10071. // 4 bytes: version bytes
  10072. buffer.writeUInt32BE(version, 0);
  10073. // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
  10074. buffer.writeUInt8(this.depth, 4);
  10075. // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
  10076. buffer.writeUInt32BE(this.parentFingerprint, 5);
  10077. // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
  10078. // This is encoded in big endian. (0x00000000 if master key)
  10079. buffer.writeUInt32BE(this.index, 9);
  10080. // 32 bytes: the chain code
  10081. this.chainCode.copy(buffer, 13);
  10082. // 33 bytes: the public key or private key data
  10083. if (!this.isNeutered()) {
  10084. // 0x00 + k for private keys
  10085. buffer.writeUInt8(0, 45);
  10086. this.privateKey.copy(buffer, 46);
  10087. // 33 bytes: the public key
  10088. }
  10089. else {
  10090. // X9.62 encoding for public keys
  10091. this.publicKey.copy(buffer, 45);
  10092. }
  10093. return bs58check.encode(buffer);
  10094. }
  10095. toWIF() {
  10096. if (!this.privateKey)
  10097. throw new TypeError('Missing private key');
  10098. return wif.encode(this.network.wif, this.privateKey, true);
  10099. }
  10100. // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
  10101. derive(index) {
  10102. typeforce(typeforce.UInt32, index);
  10103. const isHardened = index >= HIGHEST_BIT;
  10104. const data = Buffer.allocUnsafe(37);
  10105. // Hardened child
  10106. if (isHardened) {
  10107. if (this.isNeutered())
  10108. throw new TypeError('Missing private key for hardened child key');
  10109. // data = 0x00 || ser256(kpar) || ser32(index)
  10110. data[0] = 0x00;
  10111. this.privateKey.copy(data, 1);
  10112. data.writeUInt32BE(index, 33);
  10113. // Normal child
  10114. }
  10115. else {
  10116. // data = serP(point(kpar)) || ser32(index)
  10117. // = serP(Kpar) || ser32(index)
  10118. this.publicKey.copy(data, 0);
  10119. data.writeUInt32BE(index, 33);
  10120. }
  10121. const I = crypto.hmacSHA512(this.chainCode, data);
  10122. const IL = I.slice(0, 32);
  10123. const IR = I.slice(32);
  10124. // if parse256(IL) >= n, proceed with the next value for i
  10125. if (!ecc.isPrivate(IL))
  10126. return this.derive(index + 1);
  10127. // Private parent key -> private child key
  10128. let hd;
  10129. if (!this.isNeutered()) {
  10130. // ki = parse256(IL) + kpar (mod n)
  10131. const ki = ecc.privateAdd(this.privateKey, IL);
  10132. // In case ki == 0, proceed with the next value for i
  10133. if (ki == null)
  10134. return this.derive(index + 1);
  10135. hd = fromPrivateKeyLocal(ki, IR, this.network, this.depth + 1, index, this.fingerprint.readUInt32BE(0));
  10136. // Public parent key -> public child key
  10137. }
  10138. else {
  10139. // Ki = point(parse256(IL)) + Kpar
  10140. // = G*IL + Kpar
  10141. const Ki = ecc.pointAddScalar(this.publicKey, IL, true);
  10142. // In case Ki is the point at infinity, proceed with the next value for i
  10143. if (Ki === null)
  10144. return this.derive(index + 1);
  10145. hd = fromPublicKeyLocal(Ki, IR, this.network, this.depth + 1, index, this.fingerprint.readUInt32BE(0));
  10146. }
  10147. return hd;
  10148. }
  10149. deriveHardened(index) {
  10150. typeforce(UInt31, index);
  10151. // Only derives hardened private keys by default
  10152. return this.derive(index + HIGHEST_BIT);
  10153. }
  10154. derivePath(path) {
  10155. typeforce(BIP32Path, path);
  10156. let splitPath = path.split('/');
  10157. if (splitPath[0] === 'm') {
  10158. if (this.parentFingerprint)
  10159. throw new TypeError('Expected master, got child');
  10160. splitPath = splitPath.slice(1);
  10161. }
  10162. return splitPath.reduce((prevHd, indexStr) => {
  10163. let index;
  10164. if (indexStr.slice(-1) === `'`) {
  10165. index = parseInt(indexStr.slice(0, -1), 10);
  10166. return prevHd.deriveHardened(index);
  10167. }
  10168. else {
  10169. index = parseInt(indexStr, 10);
  10170. return prevHd.derive(index);
  10171. }
  10172. }, this);
  10173. }
  10174. sign(hash, lowR) {
  10175. if (!this.privateKey)
  10176. throw new Error('Missing private key');
  10177. if (lowR === undefined)
  10178. lowR = this.lowR;
  10179. if (lowR === false) {
  10180. return ecc.sign(hash, this.privateKey);
  10181. }
  10182. else {
  10183. let sig = ecc.sign(hash, this.privateKey);
  10184. const extraData = Buffer.alloc(32, 0);
  10185. let counter = 0;
  10186. // if first try is lowR, skip the loop
  10187. // for second try and on, add extra entropy counting up
  10188. while (sig[0] > 0x7f) {
  10189. counter++;
  10190. extraData.writeUIntLE(counter, 0, 6);
  10191. sig = ecc.signWithEntropy(hash, this.privateKey, extraData);
  10192. }
  10193. return sig;
  10194. }
  10195. }
  10196. verify(hash, signature) {
  10197. return ecc.verify(hash, this.publicKey, signature);
  10198. }
  10199. }
  10200. function fromBase58(inString, network) {
  10201. const buffer = bs58check.decode(inString);
  10202. if (buffer.length !== 78)
  10203. throw new TypeError('Invalid buffer length');
  10204. network = network || BITCOIN;
  10205. // 4 bytes: version bytes
  10206. const version = buffer.readUInt32BE(0);
  10207. if (version !== network.bip32.private && version !== network.bip32.public)
  10208. throw new TypeError('Invalid network version');
  10209. // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
  10210. const depth = buffer[4];
  10211. // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
  10212. const parentFingerprint = buffer.readUInt32BE(5);
  10213. if (depth === 0) {
  10214. if (parentFingerprint !== 0x00000000)
  10215. throw new TypeError('Invalid parent fingerprint');
  10216. }
  10217. // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
  10218. // This is encoded in MSB order. (0x00000000 if master key)
  10219. const index = buffer.readUInt32BE(9);
  10220. if (depth === 0 && index !== 0)
  10221. throw new TypeError('Invalid index');
  10222. // 32 bytes: the chain code
  10223. const chainCode = buffer.slice(13, 45);
  10224. let hd;
  10225. // 33 bytes: private key data (0x00 + k)
  10226. if (version === network.bip32.private) {
  10227. if (buffer.readUInt8(45) !== 0x00)
  10228. throw new TypeError('Invalid private key');
  10229. const k = buffer.slice(46, 78);
  10230. hd = fromPrivateKeyLocal(k, chainCode, network, depth, index, parentFingerprint);
  10231. // 33 bytes: public key data (0x02 + X or 0x03 + X)
  10232. }
  10233. else {
  10234. const X = buffer.slice(45, 78);
  10235. hd = fromPublicKeyLocal(X, chainCode, network, depth, index, parentFingerprint);
  10236. }
  10237. return hd;
  10238. }
  10239. exports.fromBase58 = fromBase58;
  10240. function fromPrivateKey(privateKey, chainCode, network) {
  10241. return fromPrivateKeyLocal(privateKey, chainCode, network);
  10242. }
  10243. exports.fromPrivateKey = fromPrivateKey;
  10244. function fromPrivateKeyLocal(privateKey, chainCode, network, depth, index, parentFingerprint) {
  10245. typeforce({
  10246. privateKey: UINT256_TYPE,
  10247. chainCode: UINT256_TYPE,
  10248. }, { privateKey, chainCode });
  10249. network = network || BITCOIN;
  10250. if (!ecc.isPrivate(privateKey))
  10251. throw new TypeError('Private key not in range [1, n)');
  10252. return new BIP32(privateKey, undefined, chainCode, network, depth, index, parentFingerprint);
  10253. }
  10254. function fromPublicKey(publicKey, chainCode, network) {
  10255. return fromPublicKeyLocal(publicKey, chainCode, network);
  10256. }
  10257. exports.fromPublicKey = fromPublicKey;
  10258. function fromPublicKeyLocal(publicKey, chainCode, network, depth, index, parentFingerprint) {
  10259. typeforce({
  10260. publicKey: typeforce.BufferN(33),
  10261. chainCode: UINT256_TYPE,
  10262. }, { publicKey, chainCode });
  10263. network = network || BITCOIN;
  10264. // verify the X coordinate is a point on the curve
  10265. if (!ecc.isPoint(publicKey))
  10266. throw new TypeError('Point is not on the curve');
  10267. return new BIP32(undefined, publicKey, chainCode, network, depth, index, parentFingerprint);
  10268. }
  10269. function fromSeed(seed, network) {
  10270. typeforce(typeforce.Buffer, seed);
  10271. if (seed.length < 16)
  10272. throw new TypeError('Seed should be at least 128 bits');
  10273. if (seed.length > 64)
  10274. throw new TypeError('Seed should be at most 512 bits');
  10275. network = network || BITCOIN;
  10276. const I = crypto.hmacSHA512(Buffer.from('Bitcoin seed', 'utf8'), seed);
  10277. const IL = I.slice(0, 32);
  10278. const IR = I.slice(32);
  10279. return fromPrivateKey(IL, IR, network);
  10280. }
  10281. exports.fromSeed = fromSeed;
  10282. /***/ }),
  10283. /***/ 56903:
  10284. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  10285. "use strict";
  10286. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10287. const createHash = __webpack_require__(23482);
  10288. const createHmac = __webpack_require__(58355);
  10289. function hash160(buffer) {
  10290. const sha256Hash = createHash('sha256')
  10291. .update(buffer)
  10292. .digest();
  10293. try {
  10294. return createHash('rmd160')
  10295. .update(sha256Hash)
  10296. .digest();
  10297. }
  10298. catch (err) {
  10299. return createHash('ripemd160')
  10300. .update(sha256Hash)
  10301. .digest();
  10302. }
  10303. }
  10304. exports.hash160 = hash160;
  10305. function hmacSHA512(key, data) {
  10306. return createHmac('sha512', key)
  10307. .update(data)
  10308. .digest();
  10309. }
  10310. exports.hmacSHA512 = hmacSHA512;
  10311. /***/ }),
  10312. /***/ 37786:
  10313. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  10314. "use strict";
  10315. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10316. var bip32_1 = __webpack_require__(84090);
  10317. exports.fromSeed = bip32_1.fromSeed;
  10318. exports.fromBase58 = bip32_1.fromBase58;
  10319. exports.fromPublicKey = bip32_1.fromPublicKey;
  10320. exports.fromPrivateKey = bip32_1.fromPrivateKey;
  10321. /***/ }),
  10322. /***/ 42314:
  10323. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  10324. "use strict";
  10325. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10326. // browserify by default only pulls in files that are hard coded in requires
  10327. // In order of last to first in this file, the default wordlist will be chosen
  10328. // based on what is present. (Bundles may remove wordlists they don't need)
  10329. const wordlists = {};
  10330. exports.wordlists = wordlists;
  10331. let _default;
  10332. exports._default = _default;
  10333. try {
  10334. exports._default = _default = __webpack_require__(40032);
  10335. wordlists.czech = _default;
  10336. }
  10337. catch (err) { }
  10338. try {
  10339. exports._default = _default = __webpack_require__(46996);
  10340. wordlists.chinese_simplified = _default;
  10341. }
  10342. catch (err) { }
  10343. try {
  10344. exports._default = _default = __webpack_require__(4262);
  10345. wordlists.chinese_traditional = _default;
  10346. }
  10347. catch (err) { }
  10348. try {
  10349. exports._default = _default = __webpack_require__(8013);
  10350. wordlists.korean = _default;
  10351. }
  10352. catch (err) { }
  10353. try {
  10354. exports._default = _default = __webpack_require__(11848);
  10355. wordlists.french = _default;
  10356. }
  10357. catch (err) { }
  10358. try {
  10359. exports._default = _default = __webpack_require__(72841);
  10360. wordlists.italian = _default;
  10361. }
  10362. catch (err) { }
  10363. try {
  10364. exports._default = _default = __webpack_require__(80659);
  10365. wordlists.spanish = _default;
  10366. }
  10367. catch (err) { }
  10368. try {
  10369. exports._default = _default = __webpack_require__(94472);
  10370. wordlists.japanese = _default;
  10371. wordlists.JA = _default;
  10372. }
  10373. catch (err) { }
  10374. try {
  10375. exports._default = _default = __webpack_require__(71945);
  10376. wordlists.portuguese = _default;
  10377. }
  10378. catch (err) { }
  10379. try {
  10380. exports._default = _default = __webpack_require__(24573);
  10381. wordlists.english = _default;
  10382. wordlists.EN = _default;
  10383. }
  10384. catch (err) { }
  10385. /***/ }),
  10386. /***/ 2153:
  10387. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  10388. "use strict";
  10389. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  10390. Object.defineProperty(exports, "__esModule", ({ value: true }));
  10391. const createHash = __webpack_require__(23482);
  10392. const pbkdf2_1 = __webpack_require__(25632);
  10393. const randomBytes = __webpack_require__(61798);
  10394. const _wordlists_1 = __webpack_require__(42314);
  10395. let DEFAULT_WORDLIST = _wordlists_1._default;
  10396. const INVALID_MNEMONIC = 'Invalid mnemonic';
  10397. const INVALID_ENTROPY = 'Invalid entropy';
  10398. const INVALID_CHECKSUM = 'Invalid mnemonic checksum';
  10399. const WORDLIST_REQUIRED = 'A wordlist is required but a default could not be found.\n' +
  10400. 'Please pass a 2048 word array explicitly.';
  10401. function pbkdf2Promise(password, saltMixin, iterations, keylen, digest) {
  10402. return Promise.resolve().then(() => new Promise((resolve, reject) => {
  10403. const callback = (err, derivedKey) => {
  10404. if (err) {
  10405. return reject(err);
  10406. }
  10407. else {
  10408. return resolve(derivedKey);
  10409. }
  10410. };
  10411. pbkdf2_1.pbkdf2(password, saltMixin, iterations, keylen, digest, callback);
  10412. }));
  10413. }
  10414. function normalize(str) {
  10415. return (str || '').normalize('NFKD');
  10416. }
  10417. function lpad(str, padString, length) {
  10418. while (str.length < length) {
  10419. str = padString + str;
  10420. }
  10421. return str;
  10422. }
  10423. function binaryToByte(bin) {
  10424. return parseInt(bin, 2);
  10425. }
  10426. function bytesToBinary(bytes) {
  10427. return bytes.map((x) => lpad(x.toString(2), '0', 8)).join('');
  10428. }
  10429. function deriveChecksumBits(entropyBuffer) {
  10430. const ENT = entropyBuffer.length * 8;
  10431. const CS = ENT / 32;
  10432. const hash = createHash('sha256')
  10433. .update(entropyBuffer)
  10434. .digest();
  10435. return bytesToBinary(Array.from(hash)).slice(0, CS);
  10436. }
  10437. function salt(password) {
  10438. return 'mnemonic' + (password || '');
  10439. }
  10440. function mnemonicToSeedSync(mnemonic, password) {
  10441. const mnemonicBuffer = Buffer.from(normalize(mnemonic), 'utf8');
  10442. const saltBuffer = Buffer.from(salt(normalize(password)), 'utf8');
  10443. return pbkdf2_1.pbkdf2Sync(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512');
  10444. }
  10445. exports.mnemonicToSeedSync = mnemonicToSeedSync;
  10446. function mnemonicToSeed(mnemonic, password) {
  10447. return Promise.resolve().then(() => {
  10448. const mnemonicBuffer = Buffer.from(normalize(mnemonic), 'utf8');
  10449. const saltBuffer = Buffer.from(salt(normalize(password)), 'utf8');
  10450. return pbkdf2Promise(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512');
  10451. });
  10452. }
  10453. exports.mnemonicToSeed = mnemonicToSeed;
  10454. function mnemonicToEntropy(mnemonic, wordlist) {
  10455. wordlist = wordlist || DEFAULT_WORDLIST;
  10456. if (!wordlist) {
  10457. throw new Error(WORDLIST_REQUIRED);
  10458. }
  10459. const words = normalize(mnemonic).split(' ');
  10460. if (words.length % 3 !== 0) {
  10461. throw new Error(INVALID_MNEMONIC);
  10462. }
  10463. // convert word indices to 11 bit binary strings
  10464. const bits = words
  10465. .map((word) => {
  10466. const index = wordlist.indexOf(word);
  10467. if (index === -1) {
  10468. throw new Error(INVALID_MNEMONIC);
  10469. }
  10470. return lpad(index.toString(2), '0', 11);
  10471. })
  10472. .join('');
  10473. // split the binary string into ENT/CS
  10474. const dividerIndex = Math.floor(bits.length / 33) * 32;
  10475. const entropyBits = bits.slice(0, dividerIndex);
  10476. const checksumBits = bits.slice(dividerIndex);
  10477. // calculate the checksum and compare
  10478. const entropyBytes = entropyBits.match(/(.{1,8})/g).map(binaryToByte);
  10479. if (entropyBytes.length < 16) {
  10480. throw new Error(INVALID_ENTROPY);
  10481. }
  10482. if (entropyBytes.length > 32) {
  10483. throw new Error(INVALID_ENTROPY);
  10484. }
  10485. if (entropyBytes.length % 4 !== 0) {
  10486. throw new Error(INVALID_ENTROPY);
  10487. }
  10488. const entropy = Buffer.from(entropyBytes);
  10489. const newChecksum = deriveChecksumBits(entropy);
  10490. if (newChecksum !== checksumBits) {
  10491. throw new Error(INVALID_CHECKSUM);
  10492. }
  10493. return entropy.toString('hex');
  10494. }
  10495. exports.mnemonicToEntropy = mnemonicToEntropy;
  10496. function entropyToMnemonic(entropy, wordlist) {
  10497. if (!Buffer.isBuffer(entropy)) {
  10498. entropy = Buffer.from(entropy, 'hex');
  10499. }
  10500. wordlist = wordlist || DEFAULT_WORDLIST;
  10501. if (!wordlist) {
  10502. throw new Error(WORDLIST_REQUIRED);
  10503. }
  10504. // 128 <= ENT <= 256
  10505. if (entropy.length < 16) {
  10506. throw new TypeError(INVALID_ENTROPY);
  10507. }
  10508. if (entropy.length > 32) {
  10509. throw new TypeError(INVALID_ENTROPY);
  10510. }
  10511. if (entropy.length % 4 !== 0) {
  10512. throw new TypeError(INVALID_ENTROPY);
  10513. }
  10514. const entropyBits = bytesToBinary(Array.from(entropy));
  10515. const checksumBits = deriveChecksumBits(entropy);
  10516. const bits = entropyBits + checksumBits;
  10517. const chunks = bits.match(/(.{1,11})/g);
  10518. const words = chunks.map((binary) => {
  10519. const index = binaryToByte(binary);
  10520. return wordlist[index];
  10521. });
  10522. return wordlist[0] === '\u3042\u3044\u3053\u304f\u3057\u3093' // Japanese wordlist
  10523. ? words.join('\u3000')
  10524. : words.join(' ');
  10525. }
  10526. exports.entropyToMnemonic = entropyToMnemonic;
  10527. function generateMnemonic(strength, rng, wordlist) {
  10528. strength = strength || 128;
  10529. if (strength % 32 !== 0) {
  10530. throw new TypeError(INVALID_ENTROPY);
  10531. }
  10532. rng = rng || randomBytes;
  10533. return entropyToMnemonic(rng(strength / 8), wordlist);
  10534. }
  10535. exports.generateMnemonic = generateMnemonic;
  10536. function validateMnemonic(mnemonic, wordlist) {
  10537. try {
  10538. mnemonicToEntropy(mnemonic, wordlist);
  10539. }
  10540. catch (e) {
  10541. return false;
  10542. }
  10543. return true;
  10544. }
  10545. exports.validateMnemonic = validateMnemonic;
  10546. function setDefaultWordlist(language) {
  10547. const result = _wordlists_1.wordlists[language];
  10548. if (result) {
  10549. DEFAULT_WORDLIST = result;
  10550. }
  10551. else {
  10552. throw new Error('Could not find wordlist for language "' + language + '"');
  10553. }
  10554. }
  10555. exports.setDefaultWordlist = setDefaultWordlist;
  10556. function getDefaultWordlist() {
  10557. if (!DEFAULT_WORDLIST) {
  10558. throw new Error('No Default Wordlist set');
  10559. }
  10560. return Object.keys(_wordlists_1.wordlists).filter((lang) => {
  10561. if (lang === 'JA' || lang === 'EN') {
  10562. return false;
  10563. }
  10564. return _wordlists_1.wordlists[lang].every((word, index) => word === DEFAULT_WORDLIST[index]);
  10565. })[0];
  10566. }
  10567. exports.getDefaultWordlist = getDefaultWordlist;
  10568. var _wordlists_2 = __webpack_require__(42314);
  10569. exports.wordlists = _wordlists_2.wordlists;
  10570. /***/ }),
  10571. /***/ 13550:
  10572. /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
  10573. /* module decorator */ module = __webpack_require__.nmd(module);
  10574. (function (module, exports) {
  10575. 'use strict';
  10576. // Utils
  10577. function assert (val, msg) {
  10578. if (!val) throw new Error(msg || 'Assertion failed');
  10579. }
  10580. // Could use `inherits` module, but don't want to move from single file
  10581. // architecture yet.
  10582. function inherits (ctor, superCtor) {
  10583. ctor.super_ = superCtor;
  10584. var TempCtor = function () {};
  10585. TempCtor.prototype = superCtor.prototype;
  10586. ctor.prototype = new TempCtor();
  10587. ctor.prototype.constructor = ctor;
  10588. }
  10589. // BN
  10590. function BN (number, base, endian) {
  10591. if (BN.isBN(number)) {
  10592. return number;
  10593. }
  10594. this.negative = 0;
  10595. this.words = null;
  10596. this.length = 0;
  10597. // Reduction context
  10598. this.red = null;
  10599. if (number !== null) {
  10600. if (base === 'le' || base === 'be') {
  10601. endian = base;
  10602. base = 10;
  10603. }
  10604. this._init(number || 0, base || 10, endian || 'be');
  10605. }
  10606. }
  10607. if (typeof module === 'object') {
  10608. module.exports = BN;
  10609. } else {
  10610. exports.BN = BN;
  10611. }
  10612. BN.BN = BN;
  10613. BN.wordSize = 26;
  10614. var Buffer;
  10615. try {
  10616. if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {
  10617. Buffer = window.Buffer;
  10618. } else {
  10619. Buffer = (__webpack_require__(46601).Buffer);
  10620. }
  10621. } catch (e) {
  10622. }
  10623. BN.isBN = function isBN (num) {
  10624. if (num instanceof BN) {
  10625. return true;
  10626. }
  10627. return num !== null && typeof num === 'object' &&
  10628. num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
  10629. };
  10630. BN.max = function max (left, right) {
  10631. if (left.cmp(right) > 0) return left;
  10632. return right;
  10633. };
  10634. BN.min = function min (left, right) {
  10635. if (left.cmp(right) < 0) return left;
  10636. return right;
  10637. };
  10638. BN.prototype._init = function init (number, base, endian) {
  10639. if (typeof number === 'number') {
  10640. return this._initNumber(number, base, endian);
  10641. }
  10642. if (typeof number === 'object') {
  10643. return this._initArray(number, base, endian);
  10644. }
  10645. if (base === 'hex') {
  10646. base = 16;
  10647. }
  10648. assert(base === (base | 0) && base >= 2 && base <= 36);
  10649. number = number.toString().replace(/\s+/g, '');
  10650. var start = 0;
  10651. if (number[0] === '-') {
  10652. start++;
  10653. this.negative = 1;
  10654. }
  10655. if (start < number.length) {
  10656. if (base === 16) {
  10657. this._parseHex(number, start, endian);
  10658. } else {
  10659. this._parseBase(number, base, start);
  10660. if (endian === 'le') {
  10661. this._initArray(this.toArray(), base, endian);
  10662. }
  10663. }
  10664. }
  10665. };
  10666. BN.prototype._initNumber = function _initNumber (number, base, endian) {
  10667. if (number < 0) {
  10668. this.negative = 1;
  10669. number = -number;
  10670. }
  10671. if (number < 0x4000000) {
  10672. this.words = [number & 0x3ffffff];
  10673. this.length = 1;
  10674. } else if (number < 0x10000000000000) {
  10675. this.words = [
  10676. number & 0x3ffffff,
  10677. (number / 0x4000000) & 0x3ffffff
  10678. ];
  10679. this.length = 2;
  10680. } else {
  10681. assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
  10682. this.words = [
  10683. number & 0x3ffffff,
  10684. (number / 0x4000000) & 0x3ffffff,
  10685. 1
  10686. ];
  10687. this.length = 3;
  10688. }
  10689. if (endian !== 'le') return;
  10690. // Reverse the bytes
  10691. this._initArray(this.toArray(), base, endian);
  10692. };
  10693. BN.prototype._initArray = function _initArray (number, base, endian) {
  10694. // Perhaps a Uint8Array
  10695. assert(typeof number.length === 'number');
  10696. if (number.length <= 0) {
  10697. this.words = [0];
  10698. this.length = 1;
  10699. return this;
  10700. }
  10701. this.length = Math.ceil(number.length / 3);
  10702. this.words = new Array(this.length);
  10703. for (var i = 0; i < this.length; i++) {
  10704. this.words[i] = 0;
  10705. }
  10706. var j, w;
  10707. var off = 0;
  10708. if (endian === 'be') {
  10709. for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
  10710. w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
  10711. this.words[j] |= (w << off) & 0x3ffffff;
  10712. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  10713. off += 24;
  10714. if (off >= 26) {
  10715. off -= 26;
  10716. j++;
  10717. }
  10718. }
  10719. } else if (endian === 'le') {
  10720. for (i = 0, j = 0; i < number.length; i += 3) {
  10721. w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
  10722. this.words[j] |= (w << off) & 0x3ffffff;
  10723. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  10724. off += 24;
  10725. if (off >= 26) {
  10726. off -= 26;
  10727. j++;
  10728. }
  10729. }
  10730. }
  10731. return this._strip();
  10732. };
  10733. function parseHex4Bits (string, index) {
  10734. var c = string.charCodeAt(index);
  10735. // '0' - '9'
  10736. if (c >= 48 && c <= 57) {
  10737. return c - 48;
  10738. // 'A' - 'F'
  10739. } else if (c >= 65 && c <= 70) {
  10740. return c - 55;
  10741. // 'a' - 'f'
  10742. } else if (c >= 97 && c <= 102) {
  10743. return c - 87;
  10744. } else {
  10745. assert(false, 'Invalid character in ' + string);
  10746. }
  10747. }
  10748. function parseHexByte (string, lowerBound, index) {
  10749. var r = parseHex4Bits(string, index);
  10750. if (index - 1 >= lowerBound) {
  10751. r |= parseHex4Bits(string, index - 1) << 4;
  10752. }
  10753. return r;
  10754. }
  10755. BN.prototype._parseHex = function _parseHex (number, start, endian) {
  10756. // Create possibly bigger array to ensure that it fits the number
  10757. this.length = Math.ceil((number.length - start) / 6);
  10758. this.words = new Array(this.length);
  10759. for (var i = 0; i < this.length; i++) {
  10760. this.words[i] = 0;
  10761. }
  10762. // 24-bits chunks
  10763. var off = 0;
  10764. var j = 0;
  10765. var w;
  10766. if (endian === 'be') {
  10767. for (i = number.length - 1; i >= start; i -= 2) {
  10768. w = parseHexByte(number, start, i) << off;
  10769. this.words[j] |= w & 0x3ffffff;
  10770. if (off >= 18) {
  10771. off -= 18;
  10772. j += 1;
  10773. this.words[j] |= w >>> 26;
  10774. } else {
  10775. off += 8;
  10776. }
  10777. }
  10778. } else {
  10779. var parseLength = number.length - start;
  10780. for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {
  10781. w = parseHexByte(number, start, i) << off;
  10782. this.words[j] |= w & 0x3ffffff;
  10783. if (off >= 18) {
  10784. off -= 18;
  10785. j += 1;
  10786. this.words[j] |= w >>> 26;
  10787. } else {
  10788. off += 8;
  10789. }
  10790. }
  10791. }
  10792. this._strip();
  10793. };
  10794. function parseBase (str, start, end, mul) {
  10795. var r = 0;
  10796. var b = 0;
  10797. var len = Math.min(str.length, end);
  10798. for (var i = start; i < len; i++) {
  10799. var c = str.charCodeAt(i) - 48;
  10800. r *= mul;
  10801. // 'a'
  10802. if (c >= 49) {
  10803. b = c - 49 + 0xa;
  10804. // 'A'
  10805. } else if (c >= 17) {
  10806. b = c - 17 + 0xa;
  10807. // '0' - '9'
  10808. } else {
  10809. b = c;
  10810. }
  10811. assert(c >= 0 && b < mul, 'Invalid character');
  10812. r += b;
  10813. }
  10814. return r;
  10815. }
  10816. BN.prototype._parseBase = function _parseBase (number, base, start) {
  10817. // Initialize as zero
  10818. this.words = [0];
  10819. this.length = 1;
  10820. // Find length of limb in base
  10821. for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
  10822. limbLen++;
  10823. }
  10824. limbLen--;
  10825. limbPow = (limbPow / base) | 0;
  10826. var total = number.length - start;
  10827. var mod = total % limbLen;
  10828. var end = Math.min(total, total - mod) + start;
  10829. var word = 0;
  10830. for (var i = start; i < end; i += limbLen) {
  10831. word = parseBase(number, i, i + limbLen, base);
  10832. this.imuln(limbPow);
  10833. if (this.words[0] + word < 0x4000000) {
  10834. this.words[0] += word;
  10835. } else {
  10836. this._iaddn(word);
  10837. }
  10838. }
  10839. if (mod !== 0) {
  10840. var pow = 1;
  10841. word = parseBase(number, i, number.length, base);
  10842. for (i = 0; i < mod; i++) {
  10843. pow *= base;
  10844. }
  10845. this.imuln(pow);
  10846. if (this.words[0] + word < 0x4000000) {
  10847. this.words[0] += word;
  10848. } else {
  10849. this._iaddn(word);
  10850. }
  10851. }
  10852. this._strip();
  10853. };
  10854. BN.prototype.copy = function copy (dest) {
  10855. dest.words = new Array(this.length);
  10856. for (var i = 0; i < this.length; i++) {
  10857. dest.words[i] = this.words[i];
  10858. }
  10859. dest.length = this.length;
  10860. dest.negative = this.negative;
  10861. dest.red = this.red;
  10862. };
  10863. function move (dest, src) {
  10864. dest.words = src.words;
  10865. dest.length = src.length;
  10866. dest.negative = src.negative;
  10867. dest.red = src.red;
  10868. }
  10869. BN.prototype._move = function _move (dest) {
  10870. move(dest, this);
  10871. };
  10872. BN.prototype.clone = function clone () {
  10873. var r = new BN(null);
  10874. this.copy(r);
  10875. return r;
  10876. };
  10877. BN.prototype._expand = function _expand (size) {
  10878. while (this.length < size) {
  10879. this.words[this.length++] = 0;
  10880. }
  10881. return this;
  10882. };
  10883. // Remove leading `0` from `this`
  10884. BN.prototype._strip = function strip () {
  10885. while (this.length > 1 && this.words[this.length - 1] === 0) {
  10886. this.length--;
  10887. }
  10888. return this._normSign();
  10889. };
  10890. BN.prototype._normSign = function _normSign () {
  10891. // -0 = 0
  10892. if (this.length === 1 && this.words[0] === 0) {
  10893. this.negative = 0;
  10894. }
  10895. return this;
  10896. };
  10897. // Check Symbol.for because not everywhere where Symbol defined
  10898. // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility
  10899. if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {
  10900. try {
  10901. BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;
  10902. } catch (e) {
  10903. BN.prototype.inspect = inspect;
  10904. }
  10905. } else {
  10906. BN.prototype.inspect = inspect;
  10907. }
  10908. function inspect () {
  10909. return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  10910. }
  10911. /*
  10912. var zeros = [];
  10913. var groupSizes = [];
  10914. var groupBases = [];
  10915. var s = '';
  10916. var i = -1;
  10917. while (++i < BN.wordSize) {
  10918. zeros[i] = s;
  10919. s += '0';
  10920. }
  10921. groupSizes[0] = 0;
  10922. groupSizes[1] = 0;
  10923. groupBases[0] = 0;
  10924. groupBases[1] = 0;
  10925. var base = 2 - 1;
  10926. while (++base < 36 + 1) {
  10927. var groupSize = 0;
  10928. var groupBase = 1;
  10929. while (groupBase < (1 << BN.wordSize) / base) {
  10930. groupBase *= base;
  10931. groupSize += 1;
  10932. }
  10933. groupSizes[base] = groupSize;
  10934. groupBases[base] = groupBase;
  10935. }
  10936. */
  10937. var zeros = [
  10938. '',
  10939. '0',
  10940. '00',
  10941. '000',
  10942. '0000',
  10943. '00000',
  10944. '000000',
  10945. '0000000',
  10946. '00000000',
  10947. '000000000',
  10948. '0000000000',
  10949. '00000000000',
  10950. '000000000000',
  10951. '0000000000000',
  10952. '00000000000000',
  10953. '000000000000000',
  10954. '0000000000000000',
  10955. '00000000000000000',
  10956. '000000000000000000',
  10957. '0000000000000000000',
  10958. '00000000000000000000',
  10959. '000000000000000000000',
  10960. '0000000000000000000000',
  10961. '00000000000000000000000',
  10962. '000000000000000000000000',
  10963. '0000000000000000000000000'
  10964. ];
  10965. var groupSizes = [
  10966. 0, 0,
  10967. 25, 16, 12, 11, 10, 9, 8,
  10968. 8, 7, 7, 7, 7, 6, 6,
  10969. 6, 6, 6, 6, 6, 5, 5,
  10970. 5, 5, 5, 5, 5, 5, 5,
  10971. 5, 5, 5, 5, 5, 5, 5
  10972. ];
  10973. var groupBases = [
  10974. 0, 0,
  10975. 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
  10976. 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
  10977. 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
  10978. 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
  10979. 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
  10980. ];
  10981. BN.prototype.toString = function toString (base, padding) {
  10982. base = base || 10;
  10983. padding = padding | 0 || 1;
  10984. var out;
  10985. if (base === 16 || base === 'hex') {
  10986. out = '';
  10987. var off = 0;
  10988. var carry = 0;
  10989. for (var i = 0; i < this.length; i++) {
  10990. var w = this.words[i];
  10991. var word = (((w << off) | carry) & 0xffffff).toString(16);
  10992. carry = (w >>> (24 - off)) & 0xffffff;
  10993. if (carry !== 0 || i !== this.length - 1) {
  10994. out = zeros[6 - word.length] + word + out;
  10995. } else {
  10996. out = word + out;
  10997. }
  10998. off += 2;
  10999. if (off >= 26) {
  11000. off -= 26;
  11001. i--;
  11002. }
  11003. }
  11004. if (carry !== 0) {
  11005. out = carry.toString(16) + out;
  11006. }
  11007. while (out.length % padding !== 0) {
  11008. out = '0' + out;
  11009. }
  11010. if (this.negative !== 0) {
  11011. out = '-' + out;
  11012. }
  11013. return out;
  11014. }
  11015. if (base === (base | 0) && base >= 2 && base <= 36) {
  11016. // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
  11017. var groupSize = groupSizes[base];
  11018. // var groupBase = Math.pow(base, groupSize);
  11019. var groupBase = groupBases[base];
  11020. out = '';
  11021. var c = this.clone();
  11022. c.negative = 0;
  11023. while (!c.isZero()) {
  11024. var r = c.modrn(groupBase).toString(base);
  11025. c = c.idivn(groupBase);
  11026. if (!c.isZero()) {
  11027. out = zeros[groupSize - r.length] + r + out;
  11028. } else {
  11029. out = r + out;
  11030. }
  11031. }
  11032. if (this.isZero()) {
  11033. out = '0' + out;
  11034. }
  11035. while (out.length % padding !== 0) {
  11036. out = '0' + out;
  11037. }
  11038. if (this.negative !== 0) {
  11039. out = '-' + out;
  11040. }
  11041. return out;
  11042. }
  11043. assert(false, 'Base should be between 2 and 36');
  11044. };
  11045. BN.prototype.toNumber = function toNumber () {
  11046. var ret = this.words[0];
  11047. if (this.length === 2) {
  11048. ret += this.words[1] * 0x4000000;
  11049. } else if (this.length === 3 && this.words[2] === 0x01) {
  11050. // NOTE: at this stage it is known that the top bit is set
  11051. ret += 0x10000000000000 + (this.words[1] * 0x4000000);
  11052. } else if (this.length > 2) {
  11053. assert(false, 'Number can only safely store up to 53 bits');
  11054. }
  11055. return (this.negative !== 0) ? -ret : ret;
  11056. };
  11057. BN.prototype.toJSON = function toJSON () {
  11058. return this.toString(16, 2);
  11059. };
  11060. if (Buffer) {
  11061. BN.prototype.toBuffer = function toBuffer (endian, length) {
  11062. return this.toArrayLike(Buffer, endian, length);
  11063. };
  11064. }
  11065. BN.prototype.toArray = function toArray (endian, length) {
  11066. return this.toArrayLike(Array, endian, length);
  11067. };
  11068. var allocate = function allocate (ArrayType, size) {
  11069. if (ArrayType.allocUnsafe) {
  11070. return ArrayType.allocUnsafe(size);
  11071. }
  11072. return new ArrayType(size);
  11073. };
  11074. BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
  11075. this._strip();
  11076. var byteLength = this.byteLength();
  11077. var reqLength = length || Math.max(1, byteLength);
  11078. assert(byteLength <= reqLength, 'byte array longer than desired length');
  11079. assert(reqLength > 0, 'Requested array length <= 0');
  11080. var res = allocate(ArrayType, reqLength);
  11081. var postfix = endian === 'le' ? 'LE' : 'BE';
  11082. this['_toArrayLike' + postfix](res, byteLength);
  11083. return res;
  11084. };
  11085. BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {
  11086. var position = 0;
  11087. var carry = 0;
  11088. for (var i = 0, shift = 0; i < this.length; i++) {
  11089. var word = (this.words[i] << shift) | carry;
  11090. res[position++] = word & 0xff;
  11091. if (position < res.length) {
  11092. res[position++] = (word >> 8) & 0xff;
  11093. }
  11094. if (position < res.length) {
  11095. res[position++] = (word >> 16) & 0xff;
  11096. }
  11097. if (shift === 6) {
  11098. if (position < res.length) {
  11099. res[position++] = (word >> 24) & 0xff;
  11100. }
  11101. carry = 0;
  11102. shift = 0;
  11103. } else {
  11104. carry = word >>> 24;
  11105. shift += 2;
  11106. }
  11107. }
  11108. if (position < res.length) {
  11109. res[position++] = carry;
  11110. while (position < res.length) {
  11111. res[position++] = 0;
  11112. }
  11113. }
  11114. };
  11115. BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {
  11116. var position = res.length - 1;
  11117. var carry = 0;
  11118. for (var i = 0, shift = 0; i < this.length; i++) {
  11119. var word = (this.words[i] << shift) | carry;
  11120. res[position--] = word & 0xff;
  11121. if (position >= 0) {
  11122. res[position--] = (word >> 8) & 0xff;
  11123. }
  11124. if (position >= 0) {
  11125. res[position--] = (word >> 16) & 0xff;
  11126. }
  11127. if (shift === 6) {
  11128. if (position >= 0) {
  11129. res[position--] = (word >> 24) & 0xff;
  11130. }
  11131. carry = 0;
  11132. shift = 0;
  11133. } else {
  11134. carry = word >>> 24;
  11135. shift += 2;
  11136. }
  11137. }
  11138. if (position >= 0) {
  11139. res[position--] = carry;
  11140. while (position >= 0) {
  11141. res[position--] = 0;
  11142. }
  11143. }
  11144. };
  11145. if (Math.clz32) {
  11146. BN.prototype._countBits = function _countBits (w) {
  11147. return 32 - Math.clz32(w);
  11148. };
  11149. } else {
  11150. BN.prototype._countBits = function _countBits (w) {
  11151. var t = w;
  11152. var r = 0;
  11153. if (t >= 0x1000) {
  11154. r += 13;
  11155. t >>>= 13;
  11156. }
  11157. if (t >= 0x40) {
  11158. r += 7;
  11159. t >>>= 7;
  11160. }
  11161. if (t >= 0x8) {
  11162. r += 4;
  11163. t >>>= 4;
  11164. }
  11165. if (t >= 0x02) {
  11166. r += 2;
  11167. t >>>= 2;
  11168. }
  11169. return r + t;
  11170. };
  11171. }
  11172. BN.prototype._zeroBits = function _zeroBits (w) {
  11173. // Short-cut
  11174. if (w === 0) return 26;
  11175. var t = w;
  11176. var r = 0;
  11177. if ((t & 0x1fff) === 0) {
  11178. r += 13;
  11179. t >>>= 13;
  11180. }
  11181. if ((t & 0x7f) === 0) {
  11182. r += 7;
  11183. t >>>= 7;
  11184. }
  11185. if ((t & 0xf) === 0) {
  11186. r += 4;
  11187. t >>>= 4;
  11188. }
  11189. if ((t & 0x3) === 0) {
  11190. r += 2;
  11191. t >>>= 2;
  11192. }
  11193. if ((t & 0x1) === 0) {
  11194. r++;
  11195. }
  11196. return r;
  11197. };
  11198. // Return number of used bits in a BN
  11199. BN.prototype.bitLength = function bitLength () {
  11200. var w = this.words[this.length - 1];
  11201. var hi = this._countBits(w);
  11202. return (this.length - 1) * 26 + hi;
  11203. };
  11204. function toBitArray (num) {
  11205. var w = new Array(num.bitLength());
  11206. for (var bit = 0; bit < w.length; bit++) {
  11207. var off = (bit / 26) | 0;
  11208. var wbit = bit % 26;
  11209. w[bit] = (num.words[off] >>> wbit) & 0x01;
  11210. }
  11211. return w;
  11212. }
  11213. // Number of trailing zero bits
  11214. BN.prototype.zeroBits = function zeroBits () {
  11215. if (this.isZero()) return 0;
  11216. var r = 0;
  11217. for (var i = 0; i < this.length; i++) {
  11218. var b = this._zeroBits(this.words[i]);
  11219. r += b;
  11220. if (b !== 26) break;
  11221. }
  11222. return r;
  11223. };
  11224. BN.prototype.byteLength = function byteLength () {
  11225. return Math.ceil(this.bitLength() / 8);
  11226. };
  11227. BN.prototype.toTwos = function toTwos (width) {
  11228. if (this.negative !== 0) {
  11229. return this.abs().inotn(width).iaddn(1);
  11230. }
  11231. return this.clone();
  11232. };
  11233. BN.prototype.fromTwos = function fromTwos (width) {
  11234. if (this.testn(width - 1)) {
  11235. return this.notn(width).iaddn(1).ineg();
  11236. }
  11237. return this.clone();
  11238. };
  11239. BN.prototype.isNeg = function isNeg () {
  11240. return this.negative !== 0;
  11241. };
  11242. // Return negative clone of `this`
  11243. BN.prototype.neg = function neg () {
  11244. return this.clone().ineg();
  11245. };
  11246. BN.prototype.ineg = function ineg () {
  11247. if (!this.isZero()) {
  11248. this.negative ^= 1;
  11249. }
  11250. return this;
  11251. };
  11252. // Or `num` with `this` in-place
  11253. BN.prototype.iuor = function iuor (num) {
  11254. while (this.length < num.length) {
  11255. this.words[this.length++] = 0;
  11256. }
  11257. for (var i = 0; i < num.length; i++) {
  11258. this.words[i] = this.words[i] | num.words[i];
  11259. }
  11260. return this._strip();
  11261. };
  11262. BN.prototype.ior = function ior (num) {
  11263. assert((this.negative | num.negative) === 0);
  11264. return this.iuor(num);
  11265. };
  11266. // Or `num` with `this`
  11267. BN.prototype.or = function or (num) {
  11268. if (this.length > num.length) return this.clone().ior(num);
  11269. return num.clone().ior(this);
  11270. };
  11271. BN.prototype.uor = function uor (num) {
  11272. if (this.length > num.length) return this.clone().iuor(num);
  11273. return num.clone().iuor(this);
  11274. };
  11275. // And `num` with `this` in-place
  11276. BN.prototype.iuand = function iuand (num) {
  11277. // b = min-length(num, this)
  11278. var b;
  11279. if (this.length > num.length) {
  11280. b = num;
  11281. } else {
  11282. b = this;
  11283. }
  11284. for (var i = 0; i < b.length; i++) {
  11285. this.words[i] = this.words[i] & num.words[i];
  11286. }
  11287. this.length = b.length;
  11288. return this._strip();
  11289. };
  11290. BN.prototype.iand = function iand (num) {
  11291. assert((this.negative | num.negative) === 0);
  11292. return this.iuand(num);
  11293. };
  11294. // And `num` with `this`
  11295. BN.prototype.and = function and (num) {
  11296. if (this.length > num.length) return this.clone().iand(num);
  11297. return num.clone().iand(this);
  11298. };
  11299. BN.prototype.uand = function uand (num) {
  11300. if (this.length > num.length) return this.clone().iuand(num);
  11301. return num.clone().iuand(this);
  11302. };
  11303. // Xor `num` with `this` in-place
  11304. BN.prototype.iuxor = function iuxor (num) {
  11305. // a.length > b.length
  11306. var a;
  11307. var b;
  11308. if (this.length > num.length) {
  11309. a = this;
  11310. b = num;
  11311. } else {
  11312. a = num;
  11313. b = this;
  11314. }
  11315. for (var i = 0; i < b.length; i++) {
  11316. this.words[i] = a.words[i] ^ b.words[i];
  11317. }
  11318. if (this !== a) {
  11319. for (; i < a.length; i++) {
  11320. this.words[i] = a.words[i];
  11321. }
  11322. }
  11323. this.length = a.length;
  11324. return this._strip();
  11325. };
  11326. BN.prototype.ixor = function ixor (num) {
  11327. assert((this.negative | num.negative) === 0);
  11328. return this.iuxor(num);
  11329. };
  11330. // Xor `num` with `this`
  11331. BN.prototype.xor = function xor (num) {
  11332. if (this.length > num.length) return this.clone().ixor(num);
  11333. return num.clone().ixor(this);
  11334. };
  11335. BN.prototype.uxor = function uxor (num) {
  11336. if (this.length > num.length) return this.clone().iuxor(num);
  11337. return num.clone().iuxor(this);
  11338. };
  11339. // Not ``this`` with ``width`` bitwidth
  11340. BN.prototype.inotn = function inotn (width) {
  11341. assert(typeof width === 'number' && width >= 0);
  11342. var bytesNeeded = Math.ceil(width / 26) | 0;
  11343. var bitsLeft = width % 26;
  11344. // Extend the buffer with leading zeroes
  11345. this._expand(bytesNeeded);
  11346. if (bitsLeft > 0) {
  11347. bytesNeeded--;
  11348. }
  11349. // Handle complete words
  11350. for (var i = 0; i < bytesNeeded; i++) {
  11351. this.words[i] = ~this.words[i] & 0x3ffffff;
  11352. }
  11353. // Handle the residue
  11354. if (bitsLeft > 0) {
  11355. this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
  11356. }
  11357. // And remove leading zeroes
  11358. return this._strip();
  11359. };
  11360. BN.prototype.notn = function notn (width) {
  11361. return this.clone().inotn(width);
  11362. };
  11363. // Set `bit` of `this`
  11364. BN.prototype.setn = function setn (bit, val) {
  11365. assert(typeof bit === 'number' && bit >= 0);
  11366. var off = (bit / 26) | 0;
  11367. var wbit = bit % 26;
  11368. this._expand(off + 1);
  11369. if (val) {
  11370. this.words[off] = this.words[off] | (1 << wbit);
  11371. } else {
  11372. this.words[off] = this.words[off] & ~(1 << wbit);
  11373. }
  11374. return this._strip();
  11375. };
  11376. // Add `num` to `this` in-place
  11377. BN.prototype.iadd = function iadd (num) {
  11378. var r;
  11379. // negative + positive
  11380. if (this.negative !== 0 && num.negative === 0) {
  11381. this.negative = 0;
  11382. r = this.isub(num);
  11383. this.negative ^= 1;
  11384. return this._normSign();
  11385. // positive + negative
  11386. } else if (this.negative === 0 && num.negative !== 0) {
  11387. num.negative = 0;
  11388. r = this.isub(num);
  11389. num.negative = 1;
  11390. return r._normSign();
  11391. }
  11392. // a.length > b.length
  11393. var a, b;
  11394. if (this.length > num.length) {
  11395. a = this;
  11396. b = num;
  11397. } else {
  11398. a = num;
  11399. b = this;
  11400. }
  11401. var carry = 0;
  11402. for (var i = 0; i < b.length; i++) {
  11403. r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
  11404. this.words[i] = r & 0x3ffffff;
  11405. carry = r >>> 26;
  11406. }
  11407. for (; carry !== 0 && i < a.length; i++) {
  11408. r = (a.words[i] | 0) + carry;
  11409. this.words[i] = r & 0x3ffffff;
  11410. carry = r >>> 26;
  11411. }
  11412. this.length = a.length;
  11413. if (carry !== 0) {
  11414. this.words[this.length] = carry;
  11415. this.length++;
  11416. // Copy the rest of the words
  11417. } else if (a !== this) {
  11418. for (; i < a.length; i++) {
  11419. this.words[i] = a.words[i];
  11420. }
  11421. }
  11422. return this;
  11423. };
  11424. // Add `num` to `this`
  11425. BN.prototype.add = function add (num) {
  11426. var res;
  11427. if (num.negative !== 0 && this.negative === 0) {
  11428. num.negative = 0;
  11429. res = this.sub(num);
  11430. num.negative ^= 1;
  11431. return res;
  11432. } else if (num.negative === 0 && this.negative !== 0) {
  11433. this.negative = 0;
  11434. res = num.sub(this);
  11435. this.negative = 1;
  11436. return res;
  11437. }
  11438. if (this.length > num.length) return this.clone().iadd(num);
  11439. return num.clone().iadd(this);
  11440. };
  11441. // Subtract `num` from `this` in-place
  11442. BN.prototype.isub = function isub (num) {
  11443. // this - (-num) = this + num
  11444. if (num.negative !== 0) {
  11445. num.negative = 0;
  11446. var r = this.iadd(num);
  11447. num.negative = 1;
  11448. return r._normSign();
  11449. // -this - num = -(this + num)
  11450. } else if (this.negative !== 0) {
  11451. this.negative = 0;
  11452. this.iadd(num);
  11453. this.negative = 1;
  11454. return this._normSign();
  11455. }
  11456. // At this point both numbers are positive
  11457. var cmp = this.cmp(num);
  11458. // Optimization - zeroify
  11459. if (cmp === 0) {
  11460. this.negative = 0;
  11461. this.length = 1;
  11462. this.words[0] = 0;
  11463. return this;
  11464. }
  11465. // a > b
  11466. var a, b;
  11467. if (cmp > 0) {
  11468. a = this;
  11469. b = num;
  11470. } else {
  11471. a = num;
  11472. b = this;
  11473. }
  11474. var carry = 0;
  11475. for (var i = 0; i < b.length; i++) {
  11476. r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
  11477. carry = r >> 26;
  11478. this.words[i] = r & 0x3ffffff;
  11479. }
  11480. for (; carry !== 0 && i < a.length; i++) {
  11481. r = (a.words[i] | 0) + carry;
  11482. carry = r >> 26;
  11483. this.words[i] = r & 0x3ffffff;
  11484. }
  11485. // Copy rest of the words
  11486. if (carry === 0 && i < a.length && a !== this) {
  11487. for (; i < a.length; i++) {
  11488. this.words[i] = a.words[i];
  11489. }
  11490. }
  11491. this.length = Math.max(this.length, i);
  11492. if (a !== this) {
  11493. this.negative = 1;
  11494. }
  11495. return this._strip();
  11496. };
  11497. // Subtract `num` from `this`
  11498. BN.prototype.sub = function sub (num) {
  11499. return this.clone().isub(num);
  11500. };
  11501. function smallMulTo (self, num, out) {
  11502. out.negative = num.negative ^ self.negative;
  11503. var len = (self.length + num.length) | 0;
  11504. out.length = len;
  11505. len = (len - 1) | 0;
  11506. // Peel one iteration (compiler can't do it, because of code complexity)
  11507. var a = self.words[0] | 0;
  11508. var b = num.words[0] | 0;
  11509. var r = a * b;
  11510. var lo = r & 0x3ffffff;
  11511. var carry = (r / 0x4000000) | 0;
  11512. out.words[0] = lo;
  11513. for (var k = 1; k < len; k++) {
  11514. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  11515. // note that ncarry could be >= 0x3ffffff
  11516. var ncarry = carry >>> 26;
  11517. var rword = carry & 0x3ffffff;
  11518. var maxJ = Math.min(k, num.length - 1);
  11519. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  11520. var i = (k - j) | 0;
  11521. a = self.words[i] | 0;
  11522. b = num.words[j] | 0;
  11523. r = a * b + rword;
  11524. ncarry += (r / 0x4000000) | 0;
  11525. rword = r & 0x3ffffff;
  11526. }
  11527. out.words[k] = rword | 0;
  11528. carry = ncarry | 0;
  11529. }
  11530. if (carry !== 0) {
  11531. out.words[k] = carry | 0;
  11532. } else {
  11533. out.length--;
  11534. }
  11535. return out._strip();
  11536. }
  11537. // TODO(indutny): it may be reasonable to omit it for users who don't need
  11538. // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
  11539. // multiplication (like elliptic secp256k1).
  11540. var comb10MulTo = function comb10MulTo (self, num, out) {
  11541. var a = self.words;
  11542. var b = num.words;
  11543. var o = out.words;
  11544. var c = 0;
  11545. var lo;
  11546. var mid;
  11547. var hi;
  11548. var a0 = a[0] | 0;
  11549. var al0 = a0 & 0x1fff;
  11550. var ah0 = a0 >>> 13;
  11551. var a1 = a[1] | 0;
  11552. var al1 = a1 & 0x1fff;
  11553. var ah1 = a1 >>> 13;
  11554. var a2 = a[2] | 0;
  11555. var al2 = a2 & 0x1fff;
  11556. var ah2 = a2 >>> 13;
  11557. var a3 = a[3] | 0;
  11558. var al3 = a3 & 0x1fff;
  11559. var ah3 = a3 >>> 13;
  11560. var a4 = a[4] | 0;
  11561. var al4 = a4 & 0x1fff;
  11562. var ah4 = a4 >>> 13;
  11563. var a5 = a[5] | 0;
  11564. var al5 = a5 & 0x1fff;
  11565. var ah5 = a5 >>> 13;
  11566. var a6 = a[6] | 0;
  11567. var al6 = a6 & 0x1fff;
  11568. var ah6 = a6 >>> 13;
  11569. var a7 = a[7] | 0;
  11570. var al7 = a7 & 0x1fff;
  11571. var ah7 = a7 >>> 13;
  11572. var a8 = a[8] | 0;
  11573. var al8 = a8 & 0x1fff;
  11574. var ah8 = a8 >>> 13;
  11575. var a9 = a[9] | 0;
  11576. var al9 = a9 & 0x1fff;
  11577. var ah9 = a9 >>> 13;
  11578. var b0 = b[0] | 0;
  11579. var bl0 = b0 & 0x1fff;
  11580. var bh0 = b0 >>> 13;
  11581. var b1 = b[1] | 0;
  11582. var bl1 = b1 & 0x1fff;
  11583. var bh1 = b1 >>> 13;
  11584. var b2 = b[2] | 0;
  11585. var bl2 = b2 & 0x1fff;
  11586. var bh2 = b2 >>> 13;
  11587. var b3 = b[3] | 0;
  11588. var bl3 = b3 & 0x1fff;
  11589. var bh3 = b3 >>> 13;
  11590. var b4 = b[4] | 0;
  11591. var bl4 = b4 & 0x1fff;
  11592. var bh4 = b4 >>> 13;
  11593. var b5 = b[5] | 0;
  11594. var bl5 = b5 & 0x1fff;
  11595. var bh5 = b5 >>> 13;
  11596. var b6 = b[6] | 0;
  11597. var bl6 = b6 & 0x1fff;
  11598. var bh6 = b6 >>> 13;
  11599. var b7 = b[7] | 0;
  11600. var bl7 = b7 & 0x1fff;
  11601. var bh7 = b7 >>> 13;
  11602. var b8 = b[8] | 0;
  11603. var bl8 = b8 & 0x1fff;
  11604. var bh8 = b8 >>> 13;
  11605. var b9 = b[9] | 0;
  11606. var bl9 = b9 & 0x1fff;
  11607. var bh9 = b9 >>> 13;
  11608. out.negative = self.negative ^ num.negative;
  11609. out.length = 19;
  11610. /* k = 0 */
  11611. lo = Math.imul(al0, bl0);
  11612. mid = Math.imul(al0, bh0);
  11613. mid = (mid + Math.imul(ah0, bl0)) | 0;
  11614. hi = Math.imul(ah0, bh0);
  11615. var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11616. c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
  11617. w0 &= 0x3ffffff;
  11618. /* k = 1 */
  11619. lo = Math.imul(al1, bl0);
  11620. mid = Math.imul(al1, bh0);
  11621. mid = (mid + Math.imul(ah1, bl0)) | 0;
  11622. hi = Math.imul(ah1, bh0);
  11623. lo = (lo + Math.imul(al0, bl1)) | 0;
  11624. mid = (mid + Math.imul(al0, bh1)) | 0;
  11625. mid = (mid + Math.imul(ah0, bl1)) | 0;
  11626. hi = (hi + Math.imul(ah0, bh1)) | 0;
  11627. var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11628. c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
  11629. w1 &= 0x3ffffff;
  11630. /* k = 2 */
  11631. lo = Math.imul(al2, bl0);
  11632. mid = Math.imul(al2, bh0);
  11633. mid = (mid + Math.imul(ah2, bl0)) | 0;
  11634. hi = Math.imul(ah2, bh0);
  11635. lo = (lo + Math.imul(al1, bl1)) | 0;
  11636. mid = (mid + Math.imul(al1, bh1)) | 0;
  11637. mid = (mid + Math.imul(ah1, bl1)) | 0;
  11638. hi = (hi + Math.imul(ah1, bh1)) | 0;
  11639. lo = (lo + Math.imul(al0, bl2)) | 0;
  11640. mid = (mid + Math.imul(al0, bh2)) | 0;
  11641. mid = (mid + Math.imul(ah0, bl2)) | 0;
  11642. hi = (hi + Math.imul(ah0, bh2)) | 0;
  11643. var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11644. c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
  11645. w2 &= 0x3ffffff;
  11646. /* k = 3 */
  11647. lo = Math.imul(al3, bl0);
  11648. mid = Math.imul(al3, bh0);
  11649. mid = (mid + Math.imul(ah3, bl0)) | 0;
  11650. hi = Math.imul(ah3, bh0);
  11651. lo = (lo + Math.imul(al2, bl1)) | 0;
  11652. mid = (mid + Math.imul(al2, bh1)) | 0;
  11653. mid = (mid + Math.imul(ah2, bl1)) | 0;
  11654. hi = (hi + Math.imul(ah2, bh1)) | 0;
  11655. lo = (lo + Math.imul(al1, bl2)) | 0;
  11656. mid = (mid + Math.imul(al1, bh2)) | 0;
  11657. mid = (mid + Math.imul(ah1, bl2)) | 0;
  11658. hi = (hi + Math.imul(ah1, bh2)) | 0;
  11659. lo = (lo + Math.imul(al0, bl3)) | 0;
  11660. mid = (mid + Math.imul(al0, bh3)) | 0;
  11661. mid = (mid + Math.imul(ah0, bl3)) | 0;
  11662. hi = (hi + Math.imul(ah0, bh3)) | 0;
  11663. var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11664. c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
  11665. w3 &= 0x3ffffff;
  11666. /* k = 4 */
  11667. lo = Math.imul(al4, bl0);
  11668. mid = Math.imul(al4, bh0);
  11669. mid = (mid + Math.imul(ah4, bl0)) | 0;
  11670. hi = Math.imul(ah4, bh0);
  11671. lo = (lo + Math.imul(al3, bl1)) | 0;
  11672. mid = (mid + Math.imul(al3, bh1)) | 0;
  11673. mid = (mid + Math.imul(ah3, bl1)) | 0;
  11674. hi = (hi + Math.imul(ah3, bh1)) | 0;
  11675. lo = (lo + Math.imul(al2, bl2)) | 0;
  11676. mid = (mid + Math.imul(al2, bh2)) | 0;
  11677. mid = (mid + Math.imul(ah2, bl2)) | 0;
  11678. hi = (hi + Math.imul(ah2, bh2)) | 0;
  11679. lo = (lo + Math.imul(al1, bl3)) | 0;
  11680. mid = (mid + Math.imul(al1, bh3)) | 0;
  11681. mid = (mid + Math.imul(ah1, bl3)) | 0;
  11682. hi = (hi + Math.imul(ah1, bh3)) | 0;
  11683. lo = (lo + Math.imul(al0, bl4)) | 0;
  11684. mid = (mid + Math.imul(al0, bh4)) | 0;
  11685. mid = (mid + Math.imul(ah0, bl4)) | 0;
  11686. hi = (hi + Math.imul(ah0, bh4)) | 0;
  11687. var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11688. c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
  11689. w4 &= 0x3ffffff;
  11690. /* k = 5 */
  11691. lo = Math.imul(al5, bl0);
  11692. mid = Math.imul(al5, bh0);
  11693. mid = (mid + Math.imul(ah5, bl0)) | 0;
  11694. hi = Math.imul(ah5, bh0);
  11695. lo = (lo + Math.imul(al4, bl1)) | 0;
  11696. mid = (mid + Math.imul(al4, bh1)) | 0;
  11697. mid = (mid + Math.imul(ah4, bl1)) | 0;
  11698. hi = (hi + Math.imul(ah4, bh1)) | 0;
  11699. lo = (lo + Math.imul(al3, bl2)) | 0;
  11700. mid = (mid + Math.imul(al3, bh2)) | 0;
  11701. mid = (mid + Math.imul(ah3, bl2)) | 0;
  11702. hi = (hi + Math.imul(ah3, bh2)) | 0;
  11703. lo = (lo + Math.imul(al2, bl3)) | 0;
  11704. mid = (mid + Math.imul(al2, bh3)) | 0;
  11705. mid = (mid + Math.imul(ah2, bl3)) | 0;
  11706. hi = (hi + Math.imul(ah2, bh3)) | 0;
  11707. lo = (lo + Math.imul(al1, bl4)) | 0;
  11708. mid = (mid + Math.imul(al1, bh4)) | 0;
  11709. mid = (mid + Math.imul(ah1, bl4)) | 0;
  11710. hi = (hi + Math.imul(ah1, bh4)) | 0;
  11711. lo = (lo + Math.imul(al0, bl5)) | 0;
  11712. mid = (mid + Math.imul(al0, bh5)) | 0;
  11713. mid = (mid + Math.imul(ah0, bl5)) | 0;
  11714. hi = (hi + Math.imul(ah0, bh5)) | 0;
  11715. var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11716. c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
  11717. w5 &= 0x3ffffff;
  11718. /* k = 6 */
  11719. lo = Math.imul(al6, bl0);
  11720. mid = Math.imul(al6, bh0);
  11721. mid = (mid + Math.imul(ah6, bl0)) | 0;
  11722. hi = Math.imul(ah6, bh0);
  11723. lo = (lo + Math.imul(al5, bl1)) | 0;
  11724. mid = (mid + Math.imul(al5, bh1)) | 0;
  11725. mid = (mid + Math.imul(ah5, bl1)) | 0;
  11726. hi = (hi + Math.imul(ah5, bh1)) | 0;
  11727. lo = (lo + Math.imul(al4, bl2)) | 0;
  11728. mid = (mid + Math.imul(al4, bh2)) | 0;
  11729. mid = (mid + Math.imul(ah4, bl2)) | 0;
  11730. hi = (hi + Math.imul(ah4, bh2)) | 0;
  11731. lo = (lo + Math.imul(al3, bl3)) | 0;
  11732. mid = (mid + Math.imul(al3, bh3)) | 0;
  11733. mid = (mid + Math.imul(ah3, bl3)) | 0;
  11734. hi = (hi + Math.imul(ah3, bh3)) | 0;
  11735. lo = (lo + Math.imul(al2, bl4)) | 0;
  11736. mid = (mid + Math.imul(al2, bh4)) | 0;
  11737. mid = (mid + Math.imul(ah2, bl4)) | 0;
  11738. hi = (hi + Math.imul(ah2, bh4)) | 0;
  11739. lo = (lo + Math.imul(al1, bl5)) | 0;
  11740. mid = (mid + Math.imul(al1, bh5)) | 0;
  11741. mid = (mid + Math.imul(ah1, bl5)) | 0;
  11742. hi = (hi + Math.imul(ah1, bh5)) | 0;
  11743. lo = (lo + Math.imul(al0, bl6)) | 0;
  11744. mid = (mid + Math.imul(al0, bh6)) | 0;
  11745. mid = (mid + Math.imul(ah0, bl6)) | 0;
  11746. hi = (hi + Math.imul(ah0, bh6)) | 0;
  11747. var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11748. c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
  11749. w6 &= 0x3ffffff;
  11750. /* k = 7 */
  11751. lo = Math.imul(al7, bl0);
  11752. mid = Math.imul(al7, bh0);
  11753. mid = (mid + Math.imul(ah7, bl0)) | 0;
  11754. hi = Math.imul(ah7, bh0);
  11755. lo = (lo + Math.imul(al6, bl1)) | 0;
  11756. mid = (mid + Math.imul(al6, bh1)) | 0;
  11757. mid = (mid + Math.imul(ah6, bl1)) | 0;
  11758. hi = (hi + Math.imul(ah6, bh1)) | 0;
  11759. lo = (lo + Math.imul(al5, bl2)) | 0;
  11760. mid = (mid + Math.imul(al5, bh2)) | 0;
  11761. mid = (mid + Math.imul(ah5, bl2)) | 0;
  11762. hi = (hi + Math.imul(ah5, bh2)) | 0;
  11763. lo = (lo + Math.imul(al4, bl3)) | 0;
  11764. mid = (mid + Math.imul(al4, bh3)) | 0;
  11765. mid = (mid + Math.imul(ah4, bl3)) | 0;
  11766. hi = (hi + Math.imul(ah4, bh3)) | 0;
  11767. lo = (lo + Math.imul(al3, bl4)) | 0;
  11768. mid = (mid + Math.imul(al3, bh4)) | 0;
  11769. mid = (mid + Math.imul(ah3, bl4)) | 0;
  11770. hi = (hi + Math.imul(ah3, bh4)) | 0;
  11771. lo = (lo + Math.imul(al2, bl5)) | 0;
  11772. mid = (mid + Math.imul(al2, bh5)) | 0;
  11773. mid = (mid + Math.imul(ah2, bl5)) | 0;
  11774. hi = (hi + Math.imul(ah2, bh5)) | 0;
  11775. lo = (lo + Math.imul(al1, bl6)) | 0;
  11776. mid = (mid + Math.imul(al1, bh6)) | 0;
  11777. mid = (mid + Math.imul(ah1, bl6)) | 0;
  11778. hi = (hi + Math.imul(ah1, bh6)) | 0;
  11779. lo = (lo + Math.imul(al0, bl7)) | 0;
  11780. mid = (mid + Math.imul(al0, bh7)) | 0;
  11781. mid = (mid + Math.imul(ah0, bl7)) | 0;
  11782. hi = (hi + Math.imul(ah0, bh7)) | 0;
  11783. var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11784. c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
  11785. w7 &= 0x3ffffff;
  11786. /* k = 8 */
  11787. lo = Math.imul(al8, bl0);
  11788. mid = Math.imul(al8, bh0);
  11789. mid = (mid + Math.imul(ah8, bl0)) | 0;
  11790. hi = Math.imul(ah8, bh0);
  11791. lo = (lo + Math.imul(al7, bl1)) | 0;
  11792. mid = (mid + Math.imul(al7, bh1)) | 0;
  11793. mid = (mid + Math.imul(ah7, bl1)) | 0;
  11794. hi = (hi + Math.imul(ah7, bh1)) | 0;
  11795. lo = (lo + Math.imul(al6, bl2)) | 0;
  11796. mid = (mid + Math.imul(al6, bh2)) | 0;
  11797. mid = (mid + Math.imul(ah6, bl2)) | 0;
  11798. hi = (hi + Math.imul(ah6, bh2)) | 0;
  11799. lo = (lo + Math.imul(al5, bl3)) | 0;
  11800. mid = (mid + Math.imul(al5, bh3)) | 0;
  11801. mid = (mid + Math.imul(ah5, bl3)) | 0;
  11802. hi = (hi + Math.imul(ah5, bh3)) | 0;
  11803. lo = (lo + Math.imul(al4, bl4)) | 0;
  11804. mid = (mid + Math.imul(al4, bh4)) | 0;
  11805. mid = (mid + Math.imul(ah4, bl4)) | 0;
  11806. hi = (hi + Math.imul(ah4, bh4)) | 0;
  11807. lo = (lo + Math.imul(al3, bl5)) | 0;
  11808. mid = (mid + Math.imul(al3, bh5)) | 0;
  11809. mid = (mid + Math.imul(ah3, bl5)) | 0;
  11810. hi = (hi + Math.imul(ah3, bh5)) | 0;
  11811. lo = (lo + Math.imul(al2, bl6)) | 0;
  11812. mid = (mid + Math.imul(al2, bh6)) | 0;
  11813. mid = (mid + Math.imul(ah2, bl6)) | 0;
  11814. hi = (hi + Math.imul(ah2, bh6)) | 0;
  11815. lo = (lo + Math.imul(al1, bl7)) | 0;
  11816. mid = (mid + Math.imul(al1, bh7)) | 0;
  11817. mid = (mid + Math.imul(ah1, bl7)) | 0;
  11818. hi = (hi + Math.imul(ah1, bh7)) | 0;
  11819. lo = (lo + Math.imul(al0, bl8)) | 0;
  11820. mid = (mid + Math.imul(al0, bh8)) | 0;
  11821. mid = (mid + Math.imul(ah0, bl8)) | 0;
  11822. hi = (hi + Math.imul(ah0, bh8)) | 0;
  11823. var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11824. c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
  11825. w8 &= 0x3ffffff;
  11826. /* k = 9 */
  11827. lo = Math.imul(al9, bl0);
  11828. mid = Math.imul(al9, bh0);
  11829. mid = (mid + Math.imul(ah9, bl0)) | 0;
  11830. hi = Math.imul(ah9, bh0);
  11831. lo = (lo + Math.imul(al8, bl1)) | 0;
  11832. mid = (mid + Math.imul(al8, bh1)) | 0;
  11833. mid = (mid + Math.imul(ah8, bl1)) | 0;
  11834. hi = (hi + Math.imul(ah8, bh1)) | 0;
  11835. lo = (lo + Math.imul(al7, bl2)) | 0;
  11836. mid = (mid + Math.imul(al7, bh2)) | 0;
  11837. mid = (mid + Math.imul(ah7, bl2)) | 0;
  11838. hi = (hi + Math.imul(ah7, bh2)) | 0;
  11839. lo = (lo + Math.imul(al6, bl3)) | 0;
  11840. mid = (mid + Math.imul(al6, bh3)) | 0;
  11841. mid = (mid + Math.imul(ah6, bl3)) | 0;
  11842. hi = (hi + Math.imul(ah6, bh3)) | 0;
  11843. lo = (lo + Math.imul(al5, bl4)) | 0;
  11844. mid = (mid + Math.imul(al5, bh4)) | 0;
  11845. mid = (mid + Math.imul(ah5, bl4)) | 0;
  11846. hi = (hi + Math.imul(ah5, bh4)) | 0;
  11847. lo = (lo + Math.imul(al4, bl5)) | 0;
  11848. mid = (mid + Math.imul(al4, bh5)) | 0;
  11849. mid = (mid + Math.imul(ah4, bl5)) | 0;
  11850. hi = (hi + Math.imul(ah4, bh5)) | 0;
  11851. lo = (lo + Math.imul(al3, bl6)) | 0;
  11852. mid = (mid + Math.imul(al3, bh6)) | 0;
  11853. mid = (mid + Math.imul(ah3, bl6)) | 0;
  11854. hi = (hi + Math.imul(ah3, bh6)) | 0;
  11855. lo = (lo + Math.imul(al2, bl7)) | 0;
  11856. mid = (mid + Math.imul(al2, bh7)) | 0;
  11857. mid = (mid + Math.imul(ah2, bl7)) | 0;
  11858. hi = (hi + Math.imul(ah2, bh7)) | 0;
  11859. lo = (lo + Math.imul(al1, bl8)) | 0;
  11860. mid = (mid + Math.imul(al1, bh8)) | 0;
  11861. mid = (mid + Math.imul(ah1, bl8)) | 0;
  11862. hi = (hi + Math.imul(ah1, bh8)) | 0;
  11863. lo = (lo + Math.imul(al0, bl9)) | 0;
  11864. mid = (mid + Math.imul(al0, bh9)) | 0;
  11865. mid = (mid + Math.imul(ah0, bl9)) | 0;
  11866. hi = (hi + Math.imul(ah0, bh9)) | 0;
  11867. var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11868. c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
  11869. w9 &= 0x3ffffff;
  11870. /* k = 10 */
  11871. lo = Math.imul(al9, bl1);
  11872. mid = Math.imul(al9, bh1);
  11873. mid = (mid + Math.imul(ah9, bl1)) | 0;
  11874. hi = Math.imul(ah9, bh1);
  11875. lo = (lo + Math.imul(al8, bl2)) | 0;
  11876. mid = (mid + Math.imul(al8, bh2)) | 0;
  11877. mid = (mid + Math.imul(ah8, bl2)) | 0;
  11878. hi = (hi + Math.imul(ah8, bh2)) | 0;
  11879. lo = (lo + Math.imul(al7, bl3)) | 0;
  11880. mid = (mid + Math.imul(al7, bh3)) | 0;
  11881. mid = (mid + Math.imul(ah7, bl3)) | 0;
  11882. hi = (hi + Math.imul(ah7, bh3)) | 0;
  11883. lo = (lo + Math.imul(al6, bl4)) | 0;
  11884. mid = (mid + Math.imul(al6, bh4)) | 0;
  11885. mid = (mid + Math.imul(ah6, bl4)) | 0;
  11886. hi = (hi + Math.imul(ah6, bh4)) | 0;
  11887. lo = (lo + Math.imul(al5, bl5)) | 0;
  11888. mid = (mid + Math.imul(al5, bh5)) | 0;
  11889. mid = (mid + Math.imul(ah5, bl5)) | 0;
  11890. hi = (hi + Math.imul(ah5, bh5)) | 0;
  11891. lo = (lo + Math.imul(al4, bl6)) | 0;
  11892. mid = (mid + Math.imul(al4, bh6)) | 0;
  11893. mid = (mid + Math.imul(ah4, bl6)) | 0;
  11894. hi = (hi + Math.imul(ah4, bh6)) | 0;
  11895. lo = (lo + Math.imul(al3, bl7)) | 0;
  11896. mid = (mid + Math.imul(al3, bh7)) | 0;
  11897. mid = (mid + Math.imul(ah3, bl7)) | 0;
  11898. hi = (hi + Math.imul(ah3, bh7)) | 0;
  11899. lo = (lo + Math.imul(al2, bl8)) | 0;
  11900. mid = (mid + Math.imul(al2, bh8)) | 0;
  11901. mid = (mid + Math.imul(ah2, bl8)) | 0;
  11902. hi = (hi + Math.imul(ah2, bh8)) | 0;
  11903. lo = (lo + Math.imul(al1, bl9)) | 0;
  11904. mid = (mid + Math.imul(al1, bh9)) | 0;
  11905. mid = (mid + Math.imul(ah1, bl9)) | 0;
  11906. hi = (hi + Math.imul(ah1, bh9)) | 0;
  11907. var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11908. c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
  11909. w10 &= 0x3ffffff;
  11910. /* k = 11 */
  11911. lo = Math.imul(al9, bl2);
  11912. mid = Math.imul(al9, bh2);
  11913. mid = (mid + Math.imul(ah9, bl2)) | 0;
  11914. hi = Math.imul(ah9, bh2);
  11915. lo = (lo + Math.imul(al8, bl3)) | 0;
  11916. mid = (mid + Math.imul(al8, bh3)) | 0;
  11917. mid = (mid + Math.imul(ah8, bl3)) | 0;
  11918. hi = (hi + Math.imul(ah8, bh3)) | 0;
  11919. lo = (lo + Math.imul(al7, bl4)) | 0;
  11920. mid = (mid + Math.imul(al7, bh4)) | 0;
  11921. mid = (mid + Math.imul(ah7, bl4)) | 0;
  11922. hi = (hi + Math.imul(ah7, bh4)) | 0;
  11923. lo = (lo + Math.imul(al6, bl5)) | 0;
  11924. mid = (mid + Math.imul(al6, bh5)) | 0;
  11925. mid = (mid + Math.imul(ah6, bl5)) | 0;
  11926. hi = (hi + Math.imul(ah6, bh5)) | 0;
  11927. lo = (lo + Math.imul(al5, bl6)) | 0;
  11928. mid = (mid + Math.imul(al5, bh6)) | 0;
  11929. mid = (mid + Math.imul(ah5, bl6)) | 0;
  11930. hi = (hi + Math.imul(ah5, bh6)) | 0;
  11931. lo = (lo + Math.imul(al4, bl7)) | 0;
  11932. mid = (mid + Math.imul(al4, bh7)) | 0;
  11933. mid = (mid + Math.imul(ah4, bl7)) | 0;
  11934. hi = (hi + Math.imul(ah4, bh7)) | 0;
  11935. lo = (lo + Math.imul(al3, bl8)) | 0;
  11936. mid = (mid + Math.imul(al3, bh8)) | 0;
  11937. mid = (mid + Math.imul(ah3, bl8)) | 0;
  11938. hi = (hi + Math.imul(ah3, bh8)) | 0;
  11939. lo = (lo + Math.imul(al2, bl9)) | 0;
  11940. mid = (mid + Math.imul(al2, bh9)) | 0;
  11941. mid = (mid + Math.imul(ah2, bl9)) | 0;
  11942. hi = (hi + Math.imul(ah2, bh9)) | 0;
  11943. var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11944. c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
  11945. w11 &= 0x3ffffff;
  11946. /* k = 12 */
  11947. lo = Math.imul(al9, bl3);
  11948. mid = Math.imul(al9, bh3);
  11949. mid = (mid + Math.imul(ah9, bl3)) | 0;
  11950. hi = Math.imul(ah9, bh3);
  11951. lo = (lo + Math.imul(al8, bl4)) | 0;
  11952. mid = (mid + Math.imul(al8, bh4)) | 0;
  11953. mid = (mid + Math.imul(ah8, bl4)) | 0;
  11954. hi = (hi + Math.imul(ah8, bh4)) | 0;
  11955. lo = (lo + Math.imul(al7, bl5)) | 0;
  11956. mid = (mid + Math.imul(al7, bh5)) | 0;
  11957. mid = (mid + Math.imul(ah7, bl5)) | 0;
  11958. hi = (hi + Math.imul(ah7, bh5)) | 0;
  11959. lo = (lo + Math.imul(al6, bl6)) | 0;
  11960. mid = (mid + Math.imul(al6, bh6)) | 0;
  11961. mid = (mid + Math.imul(ah6, bl6)) | 0;
  11962. hi = (hi + Math.imul(ah6, bh6)) | 0;
  11963. lo = (lo + Math.imul(al5, bl7)) | 0;
  11964. mid = (mid + Math.imul(al5, bh7)) | 0;
  11965. mid = (mid + Math.imul(ah5, bl7)) | 0;
  11966. hi = (hi + Math.imul(ah5, bh7)) | 0;
  11967. lo = (lo + Math.imul(al4, bl8)) | 0;
  11968. mid = (mid + Math.imul(al4, bh8)) | 0;
  11969. mid = (mid + Math.imul(ah4, bl8)) | 0;
  11970. hi = (hi + Math.imul(ah4, bh8)) | 0;
  11971. lo = (lo + Math.imul(al3, bl9)) | 0;
  11972. mid = (mid + Math.imul(al3, bh9)) | 0;
  11973. mid = (mid + Math.imul(ah3, bl9)) | 0;
  11974. hi = (hi + Math.imul(ah3, bh9)) | 0;
  11975. var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  11976. c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
  11977. w12 &= 0x3ffffff;
  11978. /* k = 13 */
  11979. lo = Math.imul(al9, bl4);
  11980. mid = Math.imul(al9, bh4);
  11981. mid = (mid + Math.imul(ah9, bl4)) | 0;
  11982. hi = Math.imul(ah9, bh4);
  11983. lo = (lo + Math.imul(al8, bl5)) | 0;
  11984. mid = (mid + Math.imul(al8, bh5)) | 0;
  11985. mid = (mid + Math.imul(ah8, bl5)) | 0;
  11986. hi = (hi + Math.imul(ah8, bh5)) | 0;
  11987. lo = (lo + Math.imul(al7, bl6)) | 0;
  11988. mid = (mid + Math.imul(al7, bh6)) | 0;
  11989. mid = (mid + Math.imul(ah7, bl6)) | 0;
  11990. hi = (hi + Math.imul(ah7, bh6)) | 0;
  11991. lo = (lo + Math.imul(al6, bl7)) | 0;
  11992. mid = (mid + Math.imul(al6, bh7)) | 0;
  11993. mid = (mid + Math.imul(ah6, bl7)) | 0;
  11994. hi = (hi + Math.imul(ah6, bh7)) | 0;
  11995. lo = (lo + Math.imul(al5, bl8)) | 0;
  11996. mid = (mid + Math.imul(al5, bh8)) | 0;
  11997. mid = (mid + Math.imul(ah5, bl8)) | 0;
  11998. hi = (hi + Math.imul(ah5, bh8)) | 0;
  11999. lo = (lo + Math.imul(al4, bl9)) | 0;
  12000. mid = (mid + Math.imul(al4, bh9)) | 0;
  12001. mid = (mid + Math.imul(ah4, bl9)) | 0;
  12002. hi = (hi + Math.imul(ah4, bh9)) | 0;
  12003. var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  12004. c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
  12005. w13 &= 0x3ffffff;
  12006. /* k = 14 */
  12007. lo = Math.imul(al9, bl5);
  12008. mid = Math.imul(al9, bh5);
  12009. mid = (mid + Math.imul(ah9, bl5)) | 0;
  12010. hi = Math.imul(ah9, bh5);
  12011. lo = (lo + Math.imul(al8, bl6)) | 0;
  12012. mid = (mid + Math.imul(al8, bh6)) | 0;
  12013. mid = (mid + Math.imul(ah8, bl6)) | 0;
  12014. hi = (hi + Math.imul(ah8, bh6)) | 0;
  12015. lo = (lo + Math.imul(al7, bl7)) | 0;
  12016. mid = (mid + Math.imul(al7, bh7)) | 0;
  12017. mid = (mid + Math.imul(ah7, bl7)) | 0;
  12018. hi = (hi + Math.imul(ah7, bh7)) | 0;
  12019. lo = (lo + Math.imul(al6, bl8)) | 0;
  12020. mid = (mid + Math.imul(al6, bh8)) | 0;
  12021. mid = (mid + Math.imul(ah6, bl8)) | 0;
  12022. hi = (hi + Math.imul(ah6, bh8)) | 0;
  12023. lo = (lo + Math.imul(al5, bl9)) | 0;
  12024. mid = (mid + Math.imul(al5, bh9)) | 0;
  12025. mid = (mid + Math.imul(ah5, bl9)) | 0;
  12026. hi = (hi + Math.imul(ah5, bh9)) | 0;
  12027. var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  12028. c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
  12029. w14 &= 0x3ffffff;
  12030. /* k = 15 */
  12031. lo = Math.imul(al9, bl6);
  12032. mid = Math.imul(al9, bh6);
  12033. mid = (mid + Math.imul(ah9, bl6)) | 0;
  12034. hi = Math.imul(ah9, bh6);
  12035. lo = (lo + Math.imul(al8, bl7)) | 0;
  12036. mid = (mid + Math.imul(al8, bh7)) | 0;
  12037. mid = (mid + Math.imul(ah8, bl7)) | 0;
  12038. hi = (hi + Math.imul(ah8, bh7)) | 0;
  12039. lo = (lo + Math.imul(al7, bl8)) | 0;
  12040. mid = (mid + Math.imul(al7, bh8)) | 0;
  12041. mid = (mid + Math.imul(ah7, bl8)) | 0;
  12042. hi = (hi + Math.imul(ah7, bh8)) | 0;
  12043. lo = (lo + Math.imul(al6, bl9)) | 0;
  12044. mid = (mid + Math.imul(al6, bh9)) | 0;
  12045. mid = (mid + Math.imul(ah6, bl9)) | 0;
  12046. hi = (hi + Math.imul(ah6, bh9)) | 0;
  12047. var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  12048. c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
  12049. w15 &= 0x3ffffff;
  12050. /* k = 16 */
  12051. lo = Math.imul(al9, bl7);
  12052. mid = Math.imul(al9, bh7);
  12053. mid = (mid + Math.imul(ah9, bl7)) | 0;
  12054. hi = Math.imul(ah9, bh7);
  12055. lo = (lo + Math.imul(al8, bl8)) | 0;
  12056. mid = (mid + Math.imul(al8, bh8)) | 0;
  12057. mid = (mid + Math.imul(ah8, bl8)) | 0;
  12058. hi = (hi + Math.imul(ah8, bh8)) | 0;
  12059. lo = (lo + Math.imul(al7, bl9)) | 0;
  12060. mid = (mid + Math.imul(al7, bh9)) | 0;
  12061. mid = (mid + Math.imul(ah7, bl9)) | 0;
  12062. hi = (hi + Math.imul(ah7, bh9)) | 0;
  12063. var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  12064. c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
  12065. w16 &= 0x3ffffff;
  12066. /* k = 17 */
  12067. lo = Math.imul(al9, bl8);
  12068. mid = Math.imul(al9, bh8);
  12069. mid = (mid + Math.imul(ah9, bl8)) | 0;
  12070. hi = Math.imul(ah9, bh8);
  12071. lo = (lo + Math.imul(al8, bl9)) | 0;
  12072. mid = (mid + Math.imul(al8, bh9)) | 0;
  12073. mid = (mid + Math.imul(ah8, bl9)) | 0;
  12074. hi = (hi + Math.imul(ah8, bh9)) | 0;
  12075. var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  12076. c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
  12077. w17 &= 0x3ffffff;
  12078. /* k = 18 */
  12079. lo = Math.imul(al9, bl9);
  12080. mid = Math.imul(al9, bh9);
  12081. mid = (mid + Math.imul(ah9, bl9)) | 0;
  12082. hi = Math.imul(ah9, bh9);
  12083. var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  12084. c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
  12085. w18 &= 0x3ffffff;
  12086. o[0] = w0;
  12087. o[1] = w1;
  12088. o[2] = w2;
  12089. o[3] = w3;
  12090. o[4] = w4;
  12091. o[5] = w5;
  12092. o[6] = w6;
  12093. o[7] = w7;
  12094. o[8] = w8;
  12095. o[9] = w9;
  12096. o[10] = w10;
  12097. o[11] = w11;
  12098. o[12] = w12;
  12099. o[13] = w13;
  12100. o[14] = w14;
  12101. o[15] = w15;
  12102. o[16] = w16;
  12103. o[17] = w17;
  12104. o[18] = w18;
  12105. if (c !== 0) {
  12106. o[19] = c;
  12107. out.length++;
  12108. }
  12109. return out;
  12110. };
  12111. // Polyfill comb
  12112. if (!Math.imul) {
  12113. comb10MulTo = smallMulTo;
  12114. }
  12115. function bigMulTo (self, num, out) {
  12116. out.negative = num.negative ^ self.negative;
  12117. out.length = self.length + num.length;
  12118. var carry = 0;
  12119. var hncarry = 0;
  12120. for (var k = 0; k < out.length - 1; k++) {
  12121. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  12122. // note that ncarry could be >= 0x3ffffff
  12123. var ncarry = hncarry;
  12124. hncarry = 0;
  12125. var rword = carry & 0x3ffffff;
  12126. var maxJ = Math.min(k, num.length - 1);
  12127. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  12128. var i = k - j;
  12129. var a = self.words[i] | 0;
  12130. var b = num.words[j] | 0;
  12131. var r = a * b;
  12132. var lo = r & 0x3ffffff;
  12133. ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
  12134. lo = (lo + rword) | 0;
  12135. rword = lo & 0x3ffffff;
  12136. ncarry = (ncarry + (lo >>> 26)) | 0;
  12137. hncarry += ncarry >>> 26;
  12138. ncarry &= 0x3ffffff;
  12139. }
  12140. out.words[k] = rword;
  12141. carry = ncarry;
  12142. ncarry = hncarry;
  12143. }
  12144. if (carry !== 0) {
  12145. out.words[k] = carry;
  12146. } else {
  12147. out.length--;
  12148. }
  12149. return out._strip();
  12150. }
  12151. function jumboMulTo (self, num, out) {
  12152. // Temporary disable, see https://github.com/indutny/bn.js/issues/211
  12153. // var fftm = new FFTM();
  12154. // return fftm.mulp(self, num, out);
  12155. return bigMulTo(self, num, out);
  12156. }
  12157. BN.prototype.mulTo = function mulTo (num, out) {
  12158. var res;
  12159. var len = this.length + num.length;
  12160. if (this.length === 10 && num.length === 10) {
  12161. res = comb10MulTo(this, num, out);
  12162. } else if (len < 63) {
  12163. res = smallMulTo(this, num, out);
  12164. } else if (len < 1024) {
  12165. res = bigMulTo(this, num, out);
  12166. } else {
  12167. res = jumboMulTo(this, num, out);
  12168. }
  12169. return res;
  12170. };
  12171. // Cooley-Tukey algorithm for FFT
  12172. // slightly revisited to rely on looping instead of recursion
  12173. function FFTM (x, y) {
  12174. this.x = x;
  12175. this.y = y;
  12176. }
  12177. FFTM.prototype.makeRBT = function makeRBT (N) {
  12178. var t = new Array(N);
  12179. var l = BN.prototype._countBits(N) - 1;
  12180. for (var i = 0; i < N; i++) {
  12181. t[i] = this.revBin(i, l, N);
  12182. }
  12183. return t;
  12184. };
  12185. // Returns binary-reversed representation of `x`
  12186. FFTM.prototype.revBin = function revBin (x, l, N) {
  12187. if (x === 0 || x === N - 1) return x;
  12188. var rb = 0;
  12189. for (var i = 0; i < l; i++) {
  12190. rb |= (x & 1) << (l - i - 1);
  12191. x >>= 1;
  12192. }
  12193. return rb;
  12194. };
  12195. // Performs "tweedling" phase, therefore 'emulating'
  12196. // behaviour of the recursive algorithm
  12197. FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
  12198. for (var i = 0; i < N; i++) {
  12199. rtws[i] = rws[rbt[i]];
  12200. itws[i] = iws[rbt[i]];
  12201. }
  12202. };
  12203. FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
  12204. this.permute(rbt, rws, iws, rtws, itws, N);
  12205. for (var s = 1; s < N; s <<= 1) {
  12206. var l = s << 1;
  12207. var rtwdf = Math.cos(2 * Math.PI / l);
  12208. var itwdf = Math.sin(2 * Math.PI / l);
  12209. for (var p = 0; p < N; p += l) {
  12210. var rtwdf_ = rtwdf;
  12211. var itwdf_ = itwdf;
  12212. for (var j = 0; j < s; j++) {
  12213. var re = rtws[p + j];
  12214. var ie = itws[p + j];
  12215. var ro = rtws[p + j + s];
  12216. var io = itws[p + j + s];
  12217. var rx = rtwdf_ * ro - itwdf_ * io;
  12218. io = rtwdf_ * io + itwdf_ * ro;
  12219. ro = rx;
  12220. rtws[p + j] = re + ro;
  12221. itws[p + j] = ie + io;
  12222. rtws[p + j + s] = re - ro;
  12223. itws[p + j + s] = ie - io;
  12224. /* jshint maxdepth : false */
  12225. if (j !== l) {
  12226. rx = rtwdf * rtwdf_ - itwdf * itwdf_;
  12227. itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
  12228. rtwdf_ = rx;
  12229. }
  12230. }
  12231. }
  12232. }
  12233. };
  12234. FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
  12235. var N = Math.max(m, n) | 1;
  12236. var odd = N & 1;
  12237. var i = 0;
  12238. for (N = N / 2 | 0; N; N = N >>> 1) {
  12239. i++;
  12240. }
  12241. return 1 << i + 1 + odd;
  12242. };
  12243. FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
  12244. if (N <= 1) return;
  12245. for (var i = 0; i < N / 2; i++) {
  12246. var t = rws[i];
  12247. rws[i] = rws[N - i - 1];
  12248. rws[N - i - 1] = t;
  12249. t = iws[i];
  12250. iws[i] = -iws[N - i - 1];
  12251. iws[N - i - 1] = -t;
  12252. }
  12253. };
  12254. FFTM.prototype.normalize13b = function normalize13b (ws, N) {
  12255. var carry = 0;
  12256. for (var i = 0; i < N / 2; i++) {
  12257. var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
  12258. Math.round(ws[2 * i] / N) +
  12259. carry;
  12260. ws[i] = w & 0x3ffffff;
  12261. if (w < 0x4000000) {
  12262. carry = 0;
  12263. } else {
  12264. carry = w / 0x4000000 | 0;
  12265. }
  12266. }
  12267. return ws;
  12268. };
  12269. FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
  12270. var carry = 0;
  12271. for (var i = 0; i < len; i++) {
  12272. carry = carry + (ws[i] | 0);
  12273. rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
  12274. rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
  12275. }
  12276. // Pad with zeroes
  12277. for (i = 2 * len; i < N; ++i) {
  12278. rws[i] = 0;
  12279. }
  12280. assert(carry === 0);
  12281. assert((carry & ~0x1fff) === 0);
  12282. };
  12283. FFTM.prototype.stub = function stub (N) {
  12284. var ph = new Array(N);
  12285. for (var i = 0; i < N; i++) {
  12286. ph[i] = 0;
  12287. }
  12288. return ph;
  12289. };
  12290. FFTM.prototype.mulp = function mulp (x, y, out) {
  12291. var N = 2 * this.guessLen13b(x.length, y.length);
  12292. var rbt = this.makeRBT(N);
  12293. var _ = this.stub(N);
  12294. var rws = new Array(N);
  12295. var rwst = new Array(N);
  12296. var iwst = new Array(N);
  12297. var nrws = new Array(N);
  12298. var nrwst = new Array(N);
  12299. var niwst = new Array(N);
  12300. var rmws = out.words;
  12301. rmws.length = N;
  12302. this.convert13b(x.words, x.length, rws, N);
  12303. this.convert13b(y.words, y.length, nrws, N);
  12304. this.transform(rws, _, rwst, iwst, N, rbt);
  12305. this.transform(nrws, _, nrwst, niwst, N, rbt);
  12306. for (var i = 0; i < N; i++) {
  12307. var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
  12308. iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
  12309. rwst[i] = rx;
  12310. }
  12311. this.conjugate(rwst, iwst, N);
  12312. this.transform(rwst, iwst, rmws, _, N, rbt);
  12313. this.conjugate(rmws, _, N);
  12314. this.normalize13b(rmws, N);
  12315. out.negative = x.negative ^ y.negative;
  12316. out.length = x.length + y.length;
  12317. return out._strip();
  12318. };
  12319. // Multiply `this` by `num`
  12320. BN.prototype.mul = function mul (num) {
  12321. var out = new BN(null);
  12322. out.words = new Array(this.length + num.length);
  12323. return this.mulTo(num, out);
  12324. };
  12325. // Multiply employing FFT
  12326. BN.prototype.mulf = function mulf (num) {
  12327. var out = new BN(null);
  12328. out.words = new Array(this.length + num.length);
  12329. return jumboMulTo(this, num, out);
  12330. };
  12331. // In-place Multiplication
  12332. BN.prototype.imul = function imul (num) {
  12333. return this.clone().mulTo(num, this);
  12334. };
  12335. BN.prototype.imuln = function imuln (num) {
  12336. var isNegNum = num < 0;
  12337. if (isNegNum) num = -num;
  12338. assert(typeof num === 'number');
  12339. assert(num < 0x4000000);
  12340. // Carry
  12341. var carry = 0;
  12342. for (var i = 0; i < this.length; i++) {
  12343. var w = (this.words[i] | 0) * num;
  12344. var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
  12345. carry >>= 26;
  12346. carry += (w / 0x4000000) | 0;
  12347. // NOTE: lo is 27bit maximum
  12348. carry += lo >>> 26;
  12349. this.words[i] = lo & 0x3ffffff;
  12350. }
  12351. if (carry !== 0) {
  12352. this.words[i] = carry;
  12353. this.length++;
  12354. }
  12355. return isNegNum ? this.ineg() : this;
  12356. };
  12357. BN.prototype.muln = function muln (num) {
  12358. return this.clone().imuln(num);
  12359. };
  12360. // `this` * `this`
  12361. BN.prototype.sqr = function sqr () {
  12362. return this.mul(this);
  12363. };
  12364. // `this` * `this` in-place
  12365. BN.prototype.isqr = function isqr () {
  12366. return this.imul(this.clone());
  12367. };
  12368. // Math.pow(`this`, `num`)
  12369. BN.prototype.pow = function pow (num) {
  12370. var w = toBitArray(num);
  12371. if (w.length === 0) return new BN(1);
  12372. // Skip leading zeroes
  12373. var res = this;
  12374. for (var i = 0; i < w.length; i++, res = res.sqr()) {
  12375. if (w[i] !== 0) break;
  12376. }
  12377. if (++i < w.length) {
  12378. for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
  12379. if (w[i] === 0) continue;
  12380. res = res.mul(q);
  12381. }
  12382. }
  12383. return res;
  12384. };
  12385. // Shift-left in-place
  12386. BN.prototype.iushln = function iushln (bits) {
  12387. assert(typeof bits === 'number' && bits >= 0);
  12388. var r = bits % 26;
  12389. var s = (bits - r) / 26;
  12390. var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
  12391. var i;
  12392. if (r !== 0) {
  12393. var carry = 0;
  12394. for (i = 0; i < this.length; i++) {
  12395. var newCarry = this.words[i] & carryMask;
  12396. var c = ((this.words[i] | 0) - newCarry) << r;
  12397. this.words[i] = c | carry;
  12398. carry = newCarry >>> (26 - r);
  12399. }
  12400. if (carry) {
  12401. this.words[i] = carry;
  12402. this.length++;
  12403. }
  12404. }
  12405. if (s !== 0) {
  12406. for (i = this.length - 1; i >= 0; i--) {
  12407. this.words[i + s] = this.words[i];
  12408. }
  12409. for (i = 0; i < s; i++) {
  12410. this.words[i] = 0;
  12411. }
  12412. this.length += s;
  12413. }
  12414. return this._strip();
  12415. };
  12416. BN.prototype.ishln = function ishln (bits) {
  12417. // TODO(indutny): implement me
  12418. assert(this.negative === 0);
  12419. return this.iushln(bits);
  12420. };
  12421. // Shift-right in-place
  12422. // NOTE: `hint` is a lowest bit before trailing zeroes
  12423. // NOTE: if `extended` is present - it will be filled with destroyed bits
  12424. BN.prototype.iushrn = function iushrn (bits, hint, extended) {
  12425. assert(typeof bits === 'number' && bits >= 0);
  12426. var h;
  12427. if (hint) {
  12428. h = (hint - (hint % 26)) / 26;
  12429. } else {
  12430. h = 0;
  12431. }
  12432. var r = bits % 26;
  12433. var s = Math.min((bits - r) / 26, this.length);
  12434. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  12435. var maskedWords = extended;
  12436. h -= s;
  12437. h = Math.max(0, h);
  12438. // Extended mode, copy masked part
  12439. if (maskedWords) {
  12440. for (var i = 0; i < s; i++) {
  12441. maskedWords.words[i] = this.words[i];
  12442. }
  12443. maskedWords.length = s;
  12444. }
  12445. if (s === 0) {
  12446. // No-op, we should not move anything at all
  12447. } else if (this.length > s) {
  12448. this.length -= s;
  12449. for (i = 0; i < this.length; i++) {
  12450. this.words[i] = this.words[i + s];
  12451. }
  12452. } else {
  12453. this.words[0] = 0;
  12454. this.length = 1;
  12455. }
  12456. var carry = 0;
  12457. for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
  12458. var word = this.words[i] | 0;
  12459. this.words[i] = (carry << (26 - r)) | (word >>> r);
  12460. carry = word & mask;
  12461. }
  12462. // Push carried bits as a mask
  12463. if (maskedWords && carry !== 0) {
  12464. maskedWords.words[maskedWords.length++] = carry;
  12465. }
  12466. if (this.length === 0) {
  12467. this.words[0] = 0;
  12468. this.length = 1;
  12469. }
  12470. return this._strip();
  12471. };
  12472. BN.prototype.ishrn = function ishrn (bits, hint, extended) {
  12473. // TODO(indutny): implement me
  12474. assert(this.negative === 0);
  12475. return this.iushrn(bits, hint, extended);
  12476. };
  12477. // Shift-left
  12478. BN.prototype.shln = function shln (bits) {
  12479. return this.clone().ishln(bits);
  12480. };
  12481. BN.prototype.ushln = function ushln (bits) {
  12482. return this.clone().iushln(bits);
  12483. };
  12484. // Shift-right
  12485. BN.prototype.shrn = function shrn (bits) {
  12486. return this.clone().ishrn(bits);
  12487. };
  12488. BN.prototype.ushrn = function ushrn (bits) {
  12489. return this.clone().iushrn(bits);
  12490. };
  12491. // Test if n bit is set
  12492. BN.prototype.testn = function testn (bit) {
  12493. assert(typeof bit === 'number' && bit >= 0);
  12494. var r = bit % 26;
  12495. var s = (bit - r) / 26;
  12496. var q = 1 << r;
  12497. // Fast case: bit is much higher than all existing words
  12498. if (this.length <= s) return false;
  12499. // Check bit and return
  12500. var w = this.words[s];
  12501. return !!(w & q);
  12502. };
  12503. // Return only lowers bits of number (in-place)
  12504. BN.prototype.imaskn = function imaskn (bits) {
  12505. assert(typeof bits === 'number' && bits >= 0);
  12506. var r = bits % 26;
  12507. var s = (bits - r) / 26;
  12508. assert(this.negative === 0, 'imaskn works only with positive numbers');
  12509. if (this.length <= s) {
  12510. return this;
  12511. }
  12512. if (r !== 0) {
  12513. s++;
  12514. }
  12515. this.length = Math.min(s, this.length);
  12516. if (r !== 0) {
  12517. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  12518. this.words[this.length - 1] &= mask;
  12519. }
  12520. return this._strip();
  12521. };
  12522. // Return only lowers bits of number
  12523. BN.prototype.maskn = function maskn (bits) {
  12524. return this.clone().imaskn(bits);
  12525. };
  12526. // Add plain number `num` to `this`
  12527. BN.prototype.iaddn = function iaddn (num) {
  12528. assert(typeof num === 'number');
  12529. assert(num < 0x4000000);
  12530. if (num < 0) return this.isubn(-num);
  12531. // Possible sign change
  12532. if (this.negative !== 0) {
  12533. if (this.length === 1 && (this.words[0] | 0) <= num) {
  12534. this.words[0] = num - (this.words[0] | 0);
  12535. this.negative = 0;
  12536. return this;
  12537. }
  12538. this.negative = 0;
  12539. this.isubn(num);
  12540. this.negative = 1;
  12541. return this;
  12542. }
  12543. // Add without checks
  12544. return this._iaddn(num);
  12545. };
  12546. BN.prototype._iaddn = function _iaddn (num) {
  12547. this.words[0] += num;
  12548. // Carry
  12549. for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
  12550. this.words[i] -= 0x4000000;
  12551. if (i === this.length - 1) {
  12552. this.words[i + 1] = 1;
  12553. } else {
  12554. this.words[i + 1]++;
  12555. }
  12556. }
  12557. this.length = Math.max(this.length, i + 1);
  12558. return this;
  12559. };
  12560. // Subtract plain number `num` from `this`
  12561. BN.prototype.isubn = function isubn (num) {
  12562. assert(typeof num === 'number');
  12563. assert(num < 0x4000000);
  12564. if (num < 0) return this.iaddn(-num);
  12565. if (this.negative !== 0) {
  12566. this.negative = 0;
  12567. this.iaddn(num);
  12568. this.negative = 1;
  12569. return this;
  12570. }
  12571. this.words[0] -= num;
  12572. if (this.length === 1 && this.words[0] < 0) {
  12573. this.words[0] = -this.words[0];
  12574. this.negative = 1;
  12575. } else {
  12576. // Carry
  12577. for (var i = 0; i < this.length && this.words[i] < 0; i++) {
  12578. this.words[i] += 0x4000000;
  12579. this.words[i + 1] -= 1;
  12580. }
  12581. }
  12582. return this._strip();
  12583. };
  12584. BN.prototype.addn = function addn (num) {
  12585. return this.clone().iaddn(num);
  12586. };
  12587. BN.prototype.subn = function subn (num) {
  12588. return this.clone().isubn(num);
  12589. };
  12590. BN.prototype.iabs = function iabs () {
  12591. this.negative = 0;
  12592. return this;
  12593. };
  12594. BN.prototype.abs = function abs () {
  12595. return this.clone().iabs();
  12596. };
  12597. BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
  12598. var len = num.length + shift;
  12599. var i;
  12600. this._expand(len);
  12601. var w;
  12602. var carry = 0;
  12603. for (i = 0; i < num.length; i++) {
  12604. w = (this.words[i + shift] | 0) + carry;
  12605. var right = (num.words[i] | 0) * mul;
  12606. w -= right & 0x3ffffff;
  12607. carry = (w >> 26) - ((right / 0x4000000) | 0);
  12608. this.words[i + shift] = w & 0x3ffffff;
  12609. }
  12610. for (; i < this.length - shift; i++) {
  12611. w = (this.words[i + shift] | 0) + carry;
  12612. carry = w >> 26;
  12613. this.words[i + shift] = w & 0x3ffffff;
  12614. }
  12615. if (carry === 0) return this._strip();
  12616. // Subtraction overflow
  12617. assert(carry === -1);
  12618. carry = 0;
  12619. for (i = 0; i < this.length; i++) {
  12620. w = -(this.words[i] | 0) + carry;
  12621. carry = w >> 26;
  12622. this.words[i] = w & 0x3ffffff;
  12623. }
  12624. this.negative = 1;
  12625. return this._strip();
  12626. };
  12627. BN.prototype._wordDiv = function _wordDiv (num, mode) {
  12628. var shift = this.length - num.length;
  12629. var a = this.clone();
  12630. var b = num;
  12631. // Normalize
  12632. var bhi = b.words[b.length - 1] | 0;
  12633. var bhiBits = this._countBits(bhi);
  12634. shift = 26 - bhiBits;
  12635. if (shift !== 0) {
  12636. b = b.ushln(shift);
  12637. a.iushln(shift);
  12638. bhi = b.words[b.length - 1] | 0;
  12639. }
  12640. // Initialize quotient
  12641. var m = a.length - b.length;
  12642. var q;
  12643. if (mode !== 'mod') {
  12644. q = new BN(null);
  12645. q.length = m + 1;
  12646. q.words = new Array(q.length);
  12647. for (var i = 0; i < q.length; i++) {
  12648. q.words[i] = 0;
  12649. }
  12650. }
  12651. var diff = a.clone()._ishlnsubmul(b, 1, m);
  12652. if (diff.negative === 0) {
  12653. a = diff;
  12654. if (q) {
  12655. q.words[m] = 1;
  12656. }
  12657. }
  12658. for (var j = m - 1; j >= 0; j--) {
  12659. var qj = (a.words[b.length + j] | 0) * 0x4000000 +
  12660. (a.words[b.length + j - 1] | 0);
  12661. // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
  12662. // (0x7ffffff)
  12663. qj = Math.min((qj / bhi) | 0, 0x3ffffff);
  12664. a._ishlnsubmul(b, qj, j);
  12665. while (a.negative !== 0) {
  12666. qj--;
  12667. a.negative = 0;
  12668. a._ishlnsubmul(b, 1, j);
  12669. if (!a.isZero()) {
  12670. a.negative ^= 1;
  12671. }
  12672. }
  12673. if (q) {
  12674. q.words[j] = qj;
  12675. }
  12676. }
  12677. if (q) {
  12678. q._strip();
  12679. }
  12680. a._strip();
  12681. // Denormalize
  12682. if (mode !== 'div' && shift !== 0) {
  12683. a.iushrn(shift);
  12684. }
  12685. return {
  12686. div: q || null,
  12687. mod: a
  12688. };
  12689. };
  12690. // NOTE: 1) `mode` can be set to `mod` to request mod only,
  12691. // to `div` to request div only, or be absent to
  12692. // request both div & mod
  12693. // 2) `positive` is true if unsigned mod is requested
  12694. BN.prototype.divmod = function divmod (num, mode, positive) {
  12695. assert(!num.isZero());
  12696. if (this.isZero()) {
  12697. return {
  12698. div: new BN(0),
  12699. mod: new BN(0)
  12700. };
  12701. }
  12702. var div, mod, res;
  12703. if (this.negative !== 0 && num.negative === 0) {
  12704. res = this.neg().divmod(num, mode);
  12705. if (mode !== 'mod') {
  12706. div = res.div.neg();
  12707. }
  12708. if (mode !== 'div') {
  12709. mod = res.mod.neg();
  12710. if (positive && mod.negative !== 0) {
  12711. mod.iadd(num);
  12712. }
  12713. }
  12714. return {
  12715. div: div,
  12716. mod: mod
  12717. };
  12718. }
  12719. if (this.negative === 0 && num.negative !== 0) {
  12720. res = this.divmod(num.neg(), mode);
  12721. if (mode !== 'mod') {
  12722. div = res.div.neg();
  12723. }
  12724. return {
  12725. div: div,
  12726. mod: res.mod
  12727. };
  12728. }
  12729. if ((this.negative & num.negative) !== 0) {
  12730. res = this.neg().divmod(num.neg(), mode);
  12731. if (mode !== 'div') {
  12732. mod = res.mod.neg();
  12733. if (positive && mod.negative !== 0) {
  12734. mod.isub(num);
  12735. }
  12736. }
  12737. return {
  12738. div: res.div,
  12739. mod: mod
  12740. };
  12741. }
  12742. // Both numbers are positive at this point
  12743. // Strip both numbers to approximate shift value
  12744. if (num.length > this.length || this.cmp(num) < 0) {
  12745. return {
  12746. div: new BN(0),
  12747. mod: this
  12748. };
  12749. }
  12750. // Very short reduction
  12751. if (num.length === 1) {
  12752. if (mode === 'div') {
  12753. return {
  12754. div: this.divn(num.words[0]),
  12755. mod: null
  12756. };
  12757. }
  12758. if (mode === 'mod') {
  12759. return {
  12760. div: null,
  12761. mod: new BN(this.modrn(num.words[0]))
  12762. };
  12763. }
  12764. return {
  12765. div: this.divn(num.words[0]),
  12766. mod: new BN(this.modrn(num.words[0]))
  12767. };
  12768. }
  12769. return this._wordDiv(num, mode);
  12770. };
  12771. // Find `this` / `num`
  12772. BN.prototype.div = function div (num) {
  12773. return this.divmod(num, 'div', false).div;
  12774. };
  12775. // Find `this` % `num`
  12776. BN.prototype.mod = function mod (num) {
  12777. return this.divmod(num, 'mod', false).mod;
  12778. };
  12779. BN.prototype.umod = function umod (num) {
  12780. return this.divmod(num, 'mod', true).mod;
  12781. };
  12782. // Find Round(`this` / `num`)
  12783. BN.prototype.divRound = function divRound (num) {
  12784. var dm = this.divmod(num);
  12785. // Fast case - exact division
  12786. if (dm.mod.isZero()) return dm.div;
  12787. var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
  12788. var half = num.ushrn(1);
  12789. var r2 = num.andln(1);
  12790. var cmp = mod.cmp(half);
  12791. // Round down
  12792. if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;
  12793. // Round up
  12794. return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
  12795. };
  12796. BN.prototype.modrn = function modrn (num) {
  12797. var isNegNum = num < 0;
  12798. if (isNegNum) num = -num;
  12799. assert(num <= 0x3ffffff);
  12800. var p = (1 << 26) % num;
  12801. var acc = 0;
  12802. for (var i = this.length - 1; i >= 0; i--) {
  12803. acc = (p * acc + (this.words[i] | 0)) % num;
  12804. }
  12805. return isNegNum ? -acc : acc;
  12806. };
  12807. // WARNING: DEPRECATED
  12808. BN.prototype.modn = function modn (num) {
  12809. return this.modrn(num);
  12810. };
  12811. // In-place division by number
  12812. BN.prototype.idivn = function idivn (num) {
  12813. var isNegNum = num < 0;
  12814. if (isNegNum) num = -num;
  12815. assert(num <= 0x3ffffff);
  12816. var carry = 0;
  12817. for (var i = this.length - 1; i >= 0; i--) {
  12818. var w = (this.words[i] | 0) + carry * 0x4000000;
  12819. this.words[i] = (w / num) | 0;
  12820. carry = w % num;
  12821. }
  12822. this._strip();
  12823. return isNegNum ? this.ineg() : this;
  12824. };
  12825. BN.prototype.divn = function divn (num) {
  12826. return this.clone().idivn(num);
  12827. };
  12828. BN.prototype.egcd = function egcd (p) {
  12829. assert(p.negative === 0);
  12830. assert(!p.isZero());
  12831. var x = this;
  12832. var y = p.clone();
  12833. if (x.negative !== 0) {
  12834. x = x.umod(p);
  12835. } else {
  12836. x = x.clone();
  12837. }
  12838. // A * x + B * y = x
  12839. var A = new BN(1);
  12840. var B = new BN(0);
  12841. // C * x + D * y = y
  12842. var C = new BN(0);
  12843. var D = new BN(1);
  12844. var g = 0;
  12845. while (x.isEven() && y.isEven()) {
  12846. x.iushrn(1);
  12847. y.iushrn(1);
  12848. ++g;
  12849. }
  12850. var yp = y.clone();
  12851. var xp = x.clone();
  12852. while (!x.isZero()) {
  12853. for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  12854. if (i > 0) {
  12855. x.iushrn(i);
  12856. while (i-- > 0) {
  12857. if (A.isOdd() || B.isOdd()) {
  12858. A.iadd(yp);
  12859. B.isub(xp);
  12860. }
  12861. A.iushrn(1);
  12862. B.iushrn(1);
  12863. }
  12864. }
  12865. for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  12866. if (j > 0) {
  12867. y.iushrn(j);
  12868. while (j-- > 0) {
  12869. if (C.isOdd() || D.isOdd()) {
  12870. C.iadd(yp);
  12871. D.isub(xp);
  12872. }
  12873. C.iushrn(1);
  12874. D.iushrn(1);
  12875. }
  12876. }
  12877. if (x.cmp(y) >= 0) {
  12878. x.isub(y);
  12879. A.isub(C);
  12880. B.isub(D);
  12881. } else {
  12882. y.isub(x);
  12883. C.isub(A);
  12884. D.isub(B);
  12885. }
  12886. }
  12887. return {
  12888. a: C,
  12889. b: D,
  12890. gcd: y.iushln(g)
  12891. };
  12892. };
  12893. // This is reduced incarnation of the binary EEA
  12894. // above, designated to invert members of the
  12895. // _prime_ fields F(p) at a maximal speed
  12896. BN.prototype._invmp = function _invmp (p) {
  12897. assert(p.negative === 0);
  12898. assert(!p.isZero());
  12899. var a = this;
  12900. var b = p.clone();
  12901. if (a.negative !== 0) {
  12902. a = a.umod(p);
  12903. } else {
  12904. a = a.clone();
  12905. }
  12906. var x1 = new BN(1);
  12907. var x2 = new BN(0);
  12908. var delta = b.clone();
  12909. while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
  12910. for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  12911. if (i > 0) {
  12912. a.iushrn(i);
  12913. while (i-- > 0) {
  12914. if (x1.isOdd()) {
  12915. x1.iadd(delta);
  12916. }
  12917. x1.iushrn(1);
  12918. }
  12919. }
  12920. for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  12921. if (j > 0) {
  12922. b.iushrn(j);
  12923. while (j-- > 0) {
  12924. if (x2.isOdd()) {
  12925. x2.iadd(delta);
  12926. }
  12927. x2.iushrn(1);
  12928. }
  12929. }
  12930. if (a.cmp(b) >= 0) {
  12931. a.isub(b);
  12932. x1.isub(x2);
  12933. } else {
  12934. b.isub(a);
  12935. x2.isub(x1);
  12936. }
  12937. }
  12938. var res;
  12939. if (a.cmpn(1) === 0) {
  12940. res = x1;
  12941. } else {
  12942. res = x2;
  12943. }
  12944. if (res.cmpn(0) < 0) {
  12945. res.iadd(p);
  12946. }
  12947. return res;
  12948. };
  12949. BN.prototype.gcd = function gcd (num) {
  12950. if (this.isZero()) return num.abs();
  12951. if (num.isZero()) return this.abs();
  12952. var a = this.clone();
  12953. var b = num.clone();
  12954. a.negative = 0;
  12955. b.negative = 0;
  12956. // Remove common factor of two
  12957. for (var shift = 0; a.isEven() && b.isEven(); shift++) {
  12958. a.iushrn(1);
  12959. b.iushrn(1);
  12960. }
  12961. do {
  12962. while (a.isEven()) {
  12963. a.iushrn(1);
  12964. }
  12965. while (b.isEven()) {
  12966. b.iushrn(1);
  12967. }
  12968. var r = a.cmp(b);
  12969. if (r < 0) {
  12970. // Swap `a` and `b` to make `a` always bigger than `b`
  12971. var t = a;
  12972. a = b;
  12973. b = t;
  12974. } else if (r === 0 || b.cmpn(1) === 0) {
  12975. break;
  12976. }
  12977. a.isub(b);
  12978. } while (true);
  12979. return b.iushln(shift);
  12980. };
  12981. // Invert number in the field F(num)
  12982. BN.prototype.invm = function invm (num) {
  12983. return this.egcd(num).a.umod(num);
  12984. };
  12985. BN.prototype.isEven = function isEven () {
  12986. return (this.words[0] & 1) === 0;
  12987. };
  12988. BN.prototype.isOdd = function isOdd () {
  12989. return (this.words[0] & 1) === 1;
  12990. };
  12991. // And first word and num
  12992. BN.prototype.andln = function andln (num) {
  12993. return this.words[0] & num;
  12994. };
  12995. // Increment at the bit position in-line
  12996. BN.prototype.bincn = function bincn (bit) {
  12997. assert(typeof bit === 'number');
  12998. var r = bit % 26;
  12999. var s = (bit - r) / 26;
  13000. var q = 1 << r;
  13001. // Fast case: bit is much higher than all existing words
  13002. if (this.length <= s) {
  13003. this._expand(s + 1);
  13004. this.words[s] |= q;
  13005. return this;
  13006. }
  13007. // Add bit and propagate, if needed
  13008. var carry = q;
  13009. for (var i = s; carry !== 0 && i < this.length; i++) {
  13010. var w = this.words[i] | 0;
  13011. w += carry;
  13012. carry = w >>> 26;
  13013. w &= 0x3ffffff;
  13014. this.words[i] = w;
  13015. }
  13016. if (carry !== 0) {
  13017. this.words[i] = carry;
  13018. this.length++;
  13019. }
  13020. return this;
  13021. };
  13022. BN.prototype.isZero = function isZero () {
  13023. return this.length === 1 && this.words[0] === 0;
  13024. };
  13025. BN.prototype.cmpn = function cmpn (num) {
  13026. var negative = num < 0;
  13027. if (this.negative !== 0 && !negative) return -1;
  13028. if (this.negative === 0 && negative) return 1;
  13029. this._strip();
  13030. var res;
  13031. if (this.length > 1) {
  13032. res = 1;
  13033. } else {
  13034. if (negative) {
  13035. num = -num;
  13036. }
  13037. assert(num <= 0x3ffffff, 'Number is too big');
  13038. var w = this.words[0] | 0;
  13039. res = w === num ? 0 : w < num ? -1 : 1;
  13040. }
  13041. if (this.negative !== 0) return -res | 0;
  13042. return res;
  13043. };
  13044. // Compare two numbers and return:
  13045. // 1 - if `this` > `num`
  13046. // 0 - if `this` == `num`
  13047. // -1 - if `this` < `num`
  13048. BN.prototype.cmp = function cmp (num) {
  13049. if (this.negative !== 0 && num.negative === 0) return -1;
  13050. if (this.negative === 0 && num.negative !== 0) return 1;
  13051. var res = this.ucmp(num);
  13052. if (this.negative !== 0) return -res | 0;
  13053. return res;
  13054. };
  13055. // Unsigned comparison
  13056. BN.prototype.ucmp = function ucmp (num) {
  13057. // At this point both numbers have the same sign
  13058. if (this.length > num.length) return 1;
  13059. if (this.length < num.length) return -1;
  13060. var res = 0;
  13061. for (var i = this.length - 1; i >= 0; i--) {
  13062. var a = this.words[i] | 0;
  13063. var b = num.words[i] | 0;
  13064. if (a === b) continue;
  13065. if (a < b) {
  13066. res = -1;
  13067. } else if (a > b) {
  13068. res = 1;
  13069. }
  13070. break;
  13071. }
  13072. return res;
  13073. };
  13074. BN.prototype.gtn = function gtn (num) {
  13075. return this.cmpn(num) === 1;
  13076. };
  13077. BN.prototype.gt = function gt (num) {
  13078. return this.cmp(num) === 1;
  13079. };
  13080. BN.prototype.gten = function gten (num) {
  13081. return this.cmpn(num) >= 0;
  13082. };
  13083. BN.prototype.gte = function gte (num) {
  13084. return this.cmp(num) >= 0;
  13085. };
  13086. BN.prototype.ltn = function ltn (num) {
  13087. return this.cmpn(num) === -1;
  13088. };
  13089. BN.prototype.lt = function lt (num) {
  13090. return this.cmp(num) === -1;
  13091. };
  13092. BN.prototype.lten = function lten (num) {
  13093. return this.cmpn(num) <= 0;
  13094. };
  13095. BN.prototype.lte = function lte (num) {
  13096. return this.cmp(num) <= 0;
  13097. };
  13098. BN.prototype.eqn = function eqn (num) {
  13099. return this.cmpn(num) === 0;
  13100. };
  13101. BN.prototype.eq = function eq (num) {
  13102. return this.cmp(num) === 0;
  13103. };
  13104. //
  13105. // A reduce context, could be using montgomery or something better, depending
  13106. // on the `m` itself.
  13107. //
  13108. BN.red = function red (num) {
  13109. return new Red(num);
  13110. };
  13111. BN.prototype.toRed = function toRed (ctx) {
  13112. assert(!this.red, 'Already a number in reduction context');
  13113. assert(this.negative === 0, 'red works only with positives');
  13114. return ctx.convertTo(this)._forceRed(ctx);
  13115. };
  13116. BN.prototype.fromRed = function fromRed () {
  13117. assert(this.red, 'fromRed works only with numbers in reduction context');
  13118. return this.red.convertFrom(this);
  13119. };
  13120. BN.prototype._forceRed = function _forceRed (ctx) {
  13121. this.red = ctx;
  13122. return this;
  13123. };
  13124. BN.prototype.forceRed = function forceRed (ctx) {
  13125. assert(!this.red, 'Already a number in reduction context');
  13126. return this._forceRed(ctx);
  13127. };
  13128. BN.prototype.redAdd = function redAdd (num) {
  13129. assert(this.red, 'redAdd works only with red numbers');
  13130. return this.red.add(this, num);
  13131. };
  13132. BN.prototype.redIAdd = function redIAdd (num) {
  13133. assert(this.red, 'redIAdd works only with red numbers');
  13134. return this.red.iadd(this, num);
  13135. };
  13136. BN.prototype.redSub = function redSub (num) {
  13137. assert(this.red, 'redSub works only with red numbers');
  13138. return this.red.sub(this, num);
  13139. };
  13140. BN.prototype.redISub = function redISub (num) {
  13141. assert(this.red, 'redISub works only with red numbers');
  13142. return this.red.isub(this, num);
  13143. };
  13144. BN.prototype.redShl = function redShl (num) {
  13145. assert(this.red, 'redShl works only with red numbers');
  13146. return this.red.shl(this, num);
  13147. };
  13148. BN.prototype.redMul = function redMul (num) {
  13149. assert(this.red, 'redMul works only with red numbers');
  13150. this.red._verify2(this, num);
  13151. return this.red.mul(this, num);
  13152. };
  13153. BN.prototype.redIMul = function redIMul (num) {
  13154. assert(this.red, 'redMul works only with red numbers');
  13155. this.red._verify2(this, num);
  13156. return this.red.imul(this, num);
  13157. };
  13158. BN.prototype.redSqr = function redSqr () {
  13159. assert(this.red, 'redSqr works only with red numbers');
  13160. this.red._verify1(this);
  13161. return this.red.sqr(this);
  13162. };
  13163. BN.prototype.redISqr = function redISqr () {
  13164. assert(this.red, 'redISqr works only with red numbers');
  13165. this.red._verify1(this);
  13166. return this.red.isqr(this);
  13167. };
  13168. // Square root over p
  13169. BN.prototype.redSqrt = function redSqrt () {
  13170. assert(this.red, 'redSqrt works only with red numbers');
  13171. this.red._verify1(this);
  13172. return this.red.sqrt(this);
  13173. };
  13174. BN.prototype.redInvm = function redInvm () {
  13175. assert(this.red, 'redInvm works only with red numbers');
  13176. this.red._verify1(this);
  13177. return this.red.invm(this);
  13178. };
  13179. // Return negative clone of `this` % `red modulo`
  13180. BN.prototype.redNeg = function redNeg () {
  13181. assert(this.red, 'redNeg works only with red numbers');
  13182. this.red._verify1(this);
  13183. return this.red.neg(this);
  13184. };
  13185. BN.prototype.redPow = function redPow (num) {
  13186. assert(this.red && !num.red, 'redPow(normalNum)');
  13187. this.red._verify1(this);
  13188. return this.red.pow(this, num);
  13189. };
  13190. // Prime numbers with efficient reduction
  13191. var primes = {
  13192. k256: null,
  13193. p224: null,
  13194. p192: null,
  13195. p25519: null
  13196. };
  13197. // Pseudo-Mersenne prime
  13198. function MPrime (name, p) {
  13199. // P = 2 ^ N - K
  13200. this.name = name;
  13201. this.p = new BN(p, 16);
  13202. this.n = this.p.bitLength();
  13203. this.k = new BN(1).iushln(this.n).isub(this.p);
  13204. this.tmp = this._tmp();
  13205. }
  13206. MPrime.prototype._tmp = function _tmp () {
  13207. var tmp = new BN(null);
  13208. tmp.words = new Array(Math.ceil(this.n / 13));
  13209. return tmp;
  13210. };
  13211. MPrime.prototype.ireduce = function ireduce (num) {
  13212. // Assumes that `num` is less than `P^2`
  13213. // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
  13214. var r = num;
  13215. var rlen;
  13216. do {
  13217. this.split(r, this.tmp);
  13218. r = this.imulK(r);
  13219. r = r.iadd(this.tmp);
  13220. rlen = r.bitLength();
  13221. } while (rlen > this.n);
  13222. var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
  13223. if (cmp === 0) {
  13224. r.words[0] = 0;
  13225. r.length = 1;
  13226. } else if (cmp > 0) {
  13227. r.isub(this.p);
  13228. } else {
  13229. if (r.strip !== undefined) {
  13230. // r is a BN v4 instance
  13231. r.strip();
  13232. } else {
  13233. // r is a BN v5 instance
  13234. r._strip();
  13235. }
  13236. }
  13237. return r;
  13238. };
  13239. MPrime.prototype.split = function split (input, out) {
  13240. input.iushrn(this.n, 0, out);
  13241. };
  13242. MPrime.prototype.imulK = function imulK (num) {
  13243. return num.imul(this.k);
  13244. };
  13245. function K256 () {
  13246. MPrime.call(
  13247. this,
  13248. 'k256',
  13249. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
  13250. }
  13251. inherits(K256, MPrime);
  13252. K256.prototype.split = function split (input, output) {
  13253. // 256 = 9 * 26 + 22
  13254. var mask = 0x3fffff;
  13255. var outLen = Math.min(input.length, 9);
  13256. for (var i = 0; i < outLen; i++) {
  13257. output.words[i] = input.words[i];
  13258. }
  13259. output.length = outLen;
  13260. if (input.length <= 9) {
  13261. input.words[0] = 0;
  13262. input.length = 1;
  13263. return;
  13264. }
  13265. // Shift by 9 limbs
  13266. var prev = input.words[9];
  13267. output.words[output.length++] = prev & mask;
  13268. for (i = 10; i < input.length; i++) {
  13269. var next = input.words[i] | 0;
  13270. input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
  13271. prev = next;
  13272. }
  13273. prev >>>= 22;
  13274. input.words[i - 10] = prev;
  13275. if (prev === 0 && input.length > 10) {
  13276. input.length -= 10;
  13277. } else {
  13278. input.length -= 9;
  13279. }
  13280. };
  13281. K256.prototype.imulK = function imulK (num) {
  13282. // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
  13283. num.words[num.length] = 0;
  13284. num.words[num.length + 1] = 0;
  13285. num.length += 2;
  13286. // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
  13287. var lo = 0;
  13288. for (var i = 0; i < num.length; i++) {
  13289. var w = num.words[i] | 0;
  13290. lo += w * 0x3d1;
  13291. num.words[i] = lo & 0x3ffffff;
  13292. lo = w * 0x40 + ((lo / 0x4000000) | 0);
  13293. }
  13294. // Fast length reduction
  13295. if (num.words[num.length - 1] === 0) {
  13296. num.length--;
  13297. if (num.words[num.length - 1] === 0) {
  13298. num.length--;
  13299. }
  13300. }
  13301. return num;
  13302. };
  13303. function P224 () {
  13304. MPrime.call(
  13305. this,
  13306. 'p224',
  13307. 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
  13308. }
  13309. inherits(P224, MPrime);
  13310. function P192 () {
  13311. MPrime.call(
  13312. this,
  13313. 'p192',
  13314. 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
  13315. }
  13316. inherits(P192, MPrime);
  13317. function P25519 () {
  13318. // 2 ^ 255 - 19
  13319. MPrime.call(
  13320. this,
  13321. '25519',
  13322. '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
  13323. }
  13324. inherits(P25519, MPrime);
  13325. P25519.prototype.imulK = function imulK (num) {
  13326. // K = 0x13
  13327. var carry = 0;
  13328. for (var i = 0; i < num.length; i++) {
  13329. var hi = (num.words[i] | 0) * 0x13 + carry;
  13330. var lo = hi & 0x3ffffff;
  13331. hi >>>= 26;
  13332. num.words[i] = lo;
  13333. carry = hi;
  13334. }
  13335. if (carry !== 0) {
  13336. num.words[num.length++] = carry;
  13337. }
  13338. return num;
  13339. };
  13340. // Exported mostly for testing purposes, use plain name instead
  13341. BN._prime = function prime (name) {
  13342. // Cached version of prime
  13343. if (primes[name]) return primes[name];
  13344. var prime;
  13345. if (name === 'k256') {
  13346. prime = new K256();
  13347. } else if (name === 'p224') {
  13348. prime = new P224();
  13349. } else if (name === 'p192') {
  13350. prime = new P192();
  13351. } else if (name === 'p25519') {
  13352. prime = new P25519();
  13353. } else {
  13354. throw new Error('Unknown prime ' + name);
  13355. }
  13356. primes[name] = prime;
  13357. return prime;
  13358. };
  13359. //
  13360. // Base reduction engine
  13361. //
  13362. function Red (m) {
  13363. if (typeof m === 'string') {
  13364. var prime = BN._prime(m);
  13365. this.m = prime.p;
  13366. this.prime = prime;
  13367. } else {
  13368. assert(m.gtn(1), 'modulus must be greater than 1');
  13369. this.m = m;
  13370. this.prime = null;
  13371. }
  13372. }
  13373. Red.prototype._verify1 = function _verify1 (a) {
  13374. assert(a.negative === 0, 'red works only with positives');
  13375. assert(a.red, 'red works only with red numbers');
  13376. };
  13377. Red.prototype._verify2 = function _verify2 (a, b) {
  13378. assert((a.negative | b.negative) === 0, 'red works only with positives');
  13379. assert(a.red && a.red === b.red,
  13380. 'red works only with red numbers');
  13381. };
  13382. Red.prototype.imod = function imod (a) {
  13383. if (this.prime) return this.prime.ireduce(a)._forceRed(this);
  13384. move(a, a.umod(this.m)._forceRed(this));
  13385. return a;
  13386. };
  13387. Red.prototype.neg = function neg (a) {
  13388. if (a.isZero()) {
  13389. return a.clone();
  13390. }
  13391. return this.m.sub(a)._forceRed(this);
  13392. };
  13393. Red.prototype.add = function add (a, b) {
  13394. this._verify2(a, b);
  13395. var res = a.add(b);
  13396. if (res.cmp(this.m) >= 0) {
  13397. res.isub(this.m);
  13398. }
  13399. return res._forceRed(this);
  13400. };
  13401. Red.prototype.iadd = function iadd (a, b) {
  13402. this._verify2(a, b);
  13403. var res = a.iadd(b);
  13404. if (res.cmp(this.m) >= 0) {
  13405. res.isub(this.m);
  13406. }
  13407. return res;
  13408. };
  13409. Red.prototype.sub = function sub (a, b) {
  13410. this._verify2(a, b);
  13411. var res = a.sub(b);
  13412. if (res.cmpn(0) < 0) {
  13413. res.iadd(this.m);
  13414. }
  13415. return res._forceRed(this);
  13416. };
  13417. Red.prototype.isub = function isub (a, b) {
  13418. this._verify2(a, b);
  13419. var res = a.isub(b);
  13420. if (res.cmpn(0) < 0) {
  13421. res.iadd(this.m);
  13422. }
  13423. return res;
  13424. };
  13425. Red.prototype.shl = function shl (a, num) {
  13426. this._verify1(a);
  13427. return this.imod(a.ushln(num));
  13428. };
  13429. Red.prototype.imul = function imul (a, b) {
  13430. this._verify2(a, b);
  13431. return this.imod(a.imul(b));
  13432. };
  13433. Red.prototype.mul = function mul (a, b) {
  13434. this._verify2(a, b);
  13435. return this.imod(a.mul(b));
  13436. };
  13437. Red.prototype.isqr = function isqr (a) {
  13438. return this.imul(a, a.clone());
  13439. };
  13440. Red.prototype.sqr = function sqr (a) {
  13441. return this.mul(a, a);
  13442. };
  13443. Red.prototype.sqrt = function sqrt (a) {
  13444. if (a.isZero()) return a.clone();
  13445. var mod3 = this.m.andln(3);
  13446. assert(mod3 % 2 === 1);
  13447. // Fast case
  13448. if (mod3 === 3) {
  13449. var pow = this.m.add(new BN(1)).iushrn(2);
  13450. return this.pow(a, pow);
  13451. }
  13452. // Tonelli-Shanks algorithm (Totally unoptimized and slow)
  13453. //
  13454. // Find Q and S, that Q * 2 ^ S = (P - 1)
  13455. var q = this.m.subn(1);
  13456. var s = 0;
  13457. while (!q.isZero() && q.andln(1) === 0) {
  13458. s++;
  13459. q.iushrn(1);
  13460. }
  13461. assert(!q.isZero());
  13462. var one = new BN(1).toRed(this);
  13463. var nOne = one.redNeg();
  13464. // Find quadratic non-residue
  13465. // NOTE: Max is such because of generalized Riemann hypothesis.
  13466. var lpow = this.m.subn(1).iushrn(1);
  13467. var z = this.m.bitLength();
  13468. z = new BN(2 * z * z).toRed(this);
  13469. while (this.pow(z, lpow).cmp(nOne) !== 0) {
  13470. z.redIAdd(nOne);
  13471. }
  13472. var c = this.pow(z, q);
  13473. var r = this.pow(a, q.addn(1).iushrn(1));
  13474. var t = this.pow(a, q);
  13475. var m = s;
  13476. while (t.cmp(one) !== 0) {
  13477. var tmp = t;
  13478. for (var i = 0; tmp.cmp(one) !== 0; i++) {
  13479. tmp = tmp.redSqr();
  13480. }
  13481. assert(i < m);
  13482. var b = this.pow(c, new BN(1).iushln(m - i - 1));
  13483. r = r.redMul(b);
  13484. c = b.redSqr();
  13485. t = t.redMul(c);
  13486. m = i;
  13487. }
  13488. return r;
  13489. };
  13490. Red.prototype.invm = function invm (a) {
  13491. var inv = a._invmp(this.m);
  13492. if (inv.negative !== 0) {
  13493. inv.negative = 0;
  13494. return this.imod(inv).redNeg();
  13495. } else {
  13496. return this.imod(inv);
  13497. }
  13498. };
  13499. Red.prototype.pow = function pow (a, num) {
  13500. if (num.isZero()) return new BN(1).toRed(this);
  13501. if (num.cmpn(1) === 0) return a.clone();
  13502. var windowSize = 4;
  13503. var wnd = new Array(1 << windowSize);
  13504. wnd[0] = new BN(1).toRed(this);
  13505. wnd[1] = a;
  13506. for (var i = 2; i < wnd.length; i++) {
  13507. wnd[i] = this.mul(wnd[i - 1], a);
  13508. }
  13509. var res = wnd[0];
  13510. var current = 0;
  13511. var currentLen = 0;
  13512. var start = num.bitLength() % 26;
  13513. if (start === 0) {
  13514. start = 26;
  13515. }
  13516. for (i = num.length - 1; i >= 0; i--) {
  13517. var word = num.words[i];
  13518. for (var j = start - 1; j >= 0; j--) {
  13519. var bit = (word >> j) & 1;
  13520. if (res !== wnd[0]) {
  13521. res = this.sqr(res);
  13522. }
  13523. if (bit === 0 && current === 0) {
  13524. currentLen = 0;
  13525. continue;
  13526. }
  13527. current <<= 1;
  13528. current |= bit;
  13529. currentLen++;
  13530. if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
  13531. res = this.mul(res, wnd[current]);
  13532. currentLen = 0;
  13533. current = 0;
  13534. }
  13535. start = 26;
  13536. }
  13537. return res;
  13538. };
  13539. Red.prototype.convertTo = function convertTo (num) {
  13540. var r = num.umod(this.m);
  13541. return r === num ? r.clone() : r;
  13542. };
  13543. Red.prototype.convertFrom = function convertFrom (num) {
  13544. var res = num.clone();
  13545. res.red = null;
  13546. return res;
  13547. };
  13548. //
  13549. // Montgomery method engine
  13550. //
  13551. BN.mont = function mont (num) {
  13552. return new Mont(num);
  13553. };
  13554. function Mont (m) {
  13555. Red.call(this, m);
  13556. this.shift = this.m.bitLength();
  13557. if (this.shift % 26 !== 0) {
  13558. this.shift += 26 - (this.shift % 26);
  13559. }
  13560. this.r = new BN(1).iushln(this.shift);
  13561. this.r2 = this.imod(this.r.sqr());
  13562. this.rinv = this.r._invmp(this.m);
  13563. this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
  13564. this.minv = this.minv.umod(this.r);
  13565. this.minv = this.r.sub(this.minv);
  13566. }
  13567. inherits(Mont, Red);
  13568. Mont.prototype.convertTo = function convertTo (num) {
  13569. return this.imod(num.ushln(this.shift));
  13570. };
  13571. Mont.prototype.convertFrom = function convertFrom (num) {
  13572. var r = this.imod(num.mul(this.rinv));
  13573. r.red = null;
  13574. return r;
  13575. };
  13576. Mont.prototype.imul = function imul (a, b) {
  13577. if (a.isZero() || b.isZero()) {
  13578. a.words[0] = 0;
  13579. a.length = 1;
  13580. return a;
  13581. }
  13582. var t = a.imul(b);
  13583. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  13584. var u = t.isub(c).iushrn(this.shift);
  13585. var res = u;
  13586. if (u.cmp(this.m) >= 0) {
  13587. res = u.isub(this.m);
  13588. } else if (u.cmpn(0) < 0) {
  13589. res = u.iadd(this.m);
  13590. }
  13591. return res._forceRed(this);
  13592. };
  13593. Mont.prototype.mul = function mul (a, b) {
  13594. if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
  13595. var t = a.mul(b);
  13596. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  13597. var u = t.isub(c).iushrn(this.shift);
  13598. var res = u;
  13599. if (u.cmp(this.m) >= 0) {
  13600. res = u.isub(this.m);
  13601. } else if (u.cmpn(0) < 0) {
  13602. res = u.iadd(this.m);
  13603. }
  13604. return res._forceRed(this);
  13605. };
  13606. Mont.prototype.invm = function invm (a) {
  13607. // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
  13608. var res = this.imod(a._invmp(this.m).mul(this.r2));
  13609. return res._forceRed(this);
  13610. };
  13611. })( false || module, this);
  13612. /***/ }),
  13613. /***/ 29931:
  13614. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  13615. var r;
  13616. module.exports = function rand(len) {
  13617. if (!r)
  13618. r = new Rand(null);
  13619. return r.generate(len);
  13620. };
  13621. function Rand(rand) {
  13622. this.rand = rand;
  13623. }
  13624. module.exports.Rand = Rand;
  13625. Rand.prototype.generate = function generate(len) {
  13626. return this._rand(len);
  13627. };
  13628. // Emulate crypto API using randy
  13629. Rand.prototype._rand = function _rand(n) {
  13630. if (this.rand.getBytes)
  13631. return this.rand.getBytes(n);
  13632. var res = new Uint8Array(n);
  13633. for (var i = 0; i < res.length; i++)
  13634. res[i] = this.rand.getByte();
  13635. return res;
  13636. };
  13637. if (typeof self === 'object') {
  13638. if (self.crypto && self.crypto.getRandomValues) {
  13639. // Modern browsers
  13640. Rand.prototype._rand = function _rand(n) {
  13641. var arr = new Uint8Array(n);
  13642. self.crypto.getRandomValues(arr);
  13643. return arr;
  13644. };
  13645. } else if (self.msCrypto && self.msCrypto.getRandomValues) {
  13646. // IE
  13647. Rand.prototype._rand = function _rand(n) {
  13648. var arr = new Uint8Array(n);
  13649. self.msCrypto.getRandomValues(arr);
  13650. return arr;
  13651. };
  13652. // Safari's WebWorkers do not have `crypto`
  13653. } else if (typeof window === 'object') {
  13654. // Old junk
  13655. Rand.prototype._rand = function() {
  13656. throw new Error('Not implemented yet');
  13657. };
  13658. }
  13659. } else {
  13660. // Node.js or Web worker with no crypto support
  13661. try {
  13662. var crypto = __webpack_require__(89214);
  13663. if (typeof crypto.randomBytes !== 'function')
  13664. throw new Error('Not supported');
  13665. Rand.prototype._rand = function _rand(n) {
  13666. return crypto.randomBytes(n);
  13667. };
  13668. } catch (e) {
  13669. }
  13670. }
  13671. /***/ }),
  13672. /***/ 74497:
  13673. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  13674. // based on the aes implimentation in triple sec
  13675. // https://github.com/keybase/triplesec
  13676. // which is in turn based on the one from crypto-js
  13677. // https://code.google.com/p/crypto-js/
  13678. var Buffer = (__webpack_require__(89509).Buffer)
  13679. function asUInt32Array (buf) {
  13680. if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
  13681. var len = (buf.length / 4) | 0
  13682. var out = new Array(len)
  13683. for (var i = 0; i < len; i++) {
  13684. out[i] = buf.readUInt32BE(i * 4)
  13685. }
  13686. return out
  13687. }
  13688. function scrubVec (v) {
  13689. for (var i = 0; i < v.length; v++) {
  13690. v[i] = 0
  13691. }
  13692. }
  13693. function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
  13694. var SUB_MIX0 = SUB_MIX[0]
  13695. var SUB_MIX1 = SUB_MIX[1]
  13696. var SUB_MIX2 = SUB_MIX[2]
  13697. var SUB_MIX3 = SUB_MIX[3]
  13698. var s0 = M[0] ^ keySchedule[0]
  13699. var s1 = M[1] ^ keySchedule[1]
  13700. var s2 = M[2] ^ keySchedule[2]
  13701. var s3 = M[3] ^ keySchedule[3]
  13702. var t0, t1, t2, t3
  13703. var ksRow = 4
  13704. for (var round = 1; round < nRounds; round++) {
  13705. t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
  13706. t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
  13707. t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
  13708. t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
  13709. s0 = t0
  13710. s1 = t1
  13711. s2 = t2
  13712. s3 = t3
  13713. }
  13714. t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
  13715. t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
  13716. t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
  13717. t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
  13718. t0 = t0 >>> 0
  13719. t1 = t1 >>> 0
  13720. t2 = t2 >>> 0
  13721. t3 = t3 >>> 0
  13722. return [t0, t1, t2, t3]
  13723. }
  13724. // AES constants
  13725. var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
  13726. var G = (function () {
  13727. // Compute double table
  13728. var d = new Array(256)
  13729. for (var j = 0; j < 256; j++) {
  13730. if (j < 128) {
  13731. d[j] = j << 1
  13732. } else {
  13733. d[j] = (j << 1) ^ 0x11b
  13734. }
  13735. }
  13736. var SBOX = []
  13737. var INV_SBOX = []
  13738. var SUB_MIX = [[], [], [], []]
  13739. var INV_SUB_MIX = [[], [], [], []]
  13740. // Walk GF(2^8)
  13741. var x = 0
  13742. var xi = 0
  13743. for (var i = 0; i < 256; ++i) {
  13744. // Compute sbox
  13745. var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
  13746. sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
  13747. SBOX[x] = sx
  13748. INV_SBOX[sx] = x
  13749. // Compute multiplication
  13750. var x2 = d[x]
  13751. var x4 = d[x2]
  13752. var x8 = d[x4]
  13753. // Compute sub bytes, mix columns tables
  13754. var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
  13755. SUB_MIX[0][x] = (t << 24) | (t >>> 8)
  13756. SUB_MIX[1][x] = (t << 16) | (t >>> 16)
  13757. SUB_MIX[2][x] = (t << 8) | (t >>> 24)
  13758. SUB_MIX[3][x] = t
  13759. // Compute inv sub bytes, inv mix columns tables
  13760. t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
  13761. INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
  13762. INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
  13763. INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
  13764. INV_SUB_MIX[3][sx] = t
  13765. if (x === 0) {
  13766. x = xi = 1
  13767. } else {
  13768. x = x2 ^ d[d[d[x8 ^ x2]]]
  13769. xi ^= d[d[xi]]
  13770. }
  13771. }
  13772. return {
  13773. SBOX: SBOX,
  13774. INV_SBOX: INV_SBOX,
  13775. SUB_MIX: SUB_MIX,
  13776. INV_SUB_MIX: INV_SUB_MIX
  13777. }
  13778. })()
  13779. function AES (key) {
  13780. this._key = asUInt32Array(key)
  13781. this._reset()
  13782. }
  13783. AES.blockSize = 4 * 4
  13784. AES.keySize = 256 / 8
  13785. AES.prototype.blockSize = AES.blockSize
  13786. AES.prototype.keySize = AES.keySize
  13787. AES.prototype._reset = function () {
  13788. var keyWords = this._key
  13789. var keySize = keyWords.length
  13790. var nRounds = keySize + 6
  13791. var ksRows = (nRounds + 1) * 4
  13792. var keySchedule = []
  13793. for (var k = 0; k < keySize; k++) {
  13794. keySchedule[k] = keyWords[k]
  13795. }
  13796. for (k = keySize; k < ksRows; k++) {
  13797. var t = keySchedule[k - 1]
  13798. if (k % keySize === 0) {
  13799. t = (t << 8) | (t >>> 24)
  13800. t =
  13801. (G.SBOX[t >>> 24] << 24) |
  13802. (G.SBOX[(t >>> 16) & 0xff] << 16) |
  13803. (G.SBOX[(t >>> 8) & 0xff] << 8) |
  13804. (G.SBOX[t & 0xff])
  13805. t ^= RCON[(k / keySize) | 0] << 24
  13806. } else if (keySize > 6 && k % keySize === 4) {
  13807. t =
  13808. (G.SBOX[t >>> 24] << 24) |
  13809. (G.SBOX[(t >>> 16) & 0xff] << 16) |
  13810. (G.SBOX[(t >>> 8) & 0xff] << 8) |
  13811. (G.SBOX[t & 0xff])
  13812. }
  13813. keySchedule[k] = keySchedule[k - keySize] ^ t
  13814. }
  13815. var invKeySchedule = []
  13816. for (var ik = 0; ik < ksRows; ik++) {
  13817. var ksR = ksRows - ik
  13818. var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
  13819. if (ik < 4 || ksR <= 4) {
  13820. invKeySchedule[ik] = tt
  13821. } else {
  13822. invKeySchedule[ik] =
  13823. G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
  13824. G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
  13825. G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
  13826. G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
  13827. }
  13828. }
  13829. this._nRounds = nRounds
  13830. this._keySchedule = keySchedule
  13831. this._invKeySchedule = invKeySchedule
  13832. }
  13833. AES.prototype.encryptBlockRaw = function (M) {
  13834. M = asUInt32Array(M)
  13835. return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
  13836. }
  13837. AES.prototype.encryptBlock = function (M) {
  13838. var out = this.encryptBlockRaw(M)
  13839. var buf = Buffer.allocUnsafe(16)
  13840. buf.writeUInt32BE(out[0], 0)
  13841. buf.writeUInt32BE(out[1], 4)
  13842. buf.writeUInt32BE(out[2], 8)
  13843. buf.writeUInt32BE(out[3], 12)
  13844. return buf
  13845. }
  13846. AES.prototype.decryptBlock = function (M) {
  13847. M = asUInt32Array(M)
  13848. // swap
  13849. var m1 = M[1]
  13850. M[1] = M[3]
  13851. M[3] = m1
  13852. var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
  13853. var buf = Buffer.allocUnsafe(16)
  13854. buf.writeUInt32BE(out[0], 0)
  13855. buf.writeUInt32BE(out[3], 4)
  13856. buf.writeUInt32BE(out[2], 8)
  13857. buf.writeUInt32BE(out[1], 12)
  13858. return buf
  13859. }
  13860. AES.prototype.scrub = function () {
  13861. scrubVec(this._keySchedule)
  13862. scrubVec(this._invKeySchedule)
  13863. scrubVec(this._key)
  13864. }
  13865. module.exports.AES = AES
  13866. /***/ }),
  13867. /***/ 62422:
  13868. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  13869. var aes = __webpack_require__(74497)
  13870. var Buffer = (__webpack_require__(89509).Buffer)
  13871. var Transform = __webpack_require__(71027)
  13872. var inherits = __webpack_require__(35717)
  13873. var GHASH = __webpack_require__(83288)
  13874. var xor = __webpack_require__(67295)
  13875. var incr32 = __webpack_require__(20685)
  13876. function xorTest (a, b) {
  13877. var out = 0
  13878. if (a.length !== b.length) out++
  13879. var len = Math.min(a.length, b.length)
  13880. for (var i = 0; i < len; ++i) {
  13881. out += (a[i] ^ b[i])
  13882. }
  13883. return out
  13884. }
  13885. function calcIv (self, iv, ck) {
  13886. if (iv.length === 12) {
  13887. self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
  13888. return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
  13889. }
  13890. var ghash = new GHASH(ck)
  13891. var len = iv.length
  13892. var toPad = len % 16
  13893. ghash.update(iv)
  13894. if (toPad) {
  13895. toPad = 16 - toPad
  13896. ghash.update(Buffer.alloc(toPad, 0))
  13897. }
  13898. ghash.update(Buffer.alloc(8, 0))
  13899. var ivBits = len * 8
  13900. var tail = Buffer.alloc(8)
  13901. tail.writeUIntBE(ivBits, 0, 8)
  13902. ghash.update(tail)
  13903. self._finID = ghash.state
  13904. var out = Buffer.from(self._finID)
  13905. incr32(out)
  13906. return out
  13907. }
  13908. function StreamCipher (mode, key, iv, decrypt) {
  13909. Transform.call(this)
  13910. var h = Buffer.alloc(4, 0)
  13911. this._cipher = new aes.AES(key)
  13912. var ck = this._cipher.encryptBlock(h)
  13913. this._ghash = new GHASH(ck)
  13914. iv = calcIv(this, iv, ck)
  13915. this._prev = Buffer.from(iv)
  13916. this._cache = Buffer.allocUnsafe(0)
  13917. this._secCache = Buffer.allocUnsafe(0)
  13918. this._decrypt = decrypt
  13919. this._alen = 0
  13920. this._len = 0
  13921. this._mode = mode
  13922. this._authTag = null
  13923. this._called = false
  13924. }
  13925. inherits(StreamCipher, Transform)
  13926. StreamCipher.prototype._update = function (chunk) {
  13927. if (!this._called && this._alen) {
  13928. var rump = 16 - (this._alen % 16)
  13929. if (rump < 16) {
  13930. rump = Buffer.alloc(rump, 0)
  13931. this._ghash.update(rump)
  13932. }
  13933. }
  13934. this._called = true
  13935. var out = this._mode.encrypt(this, chunk)
  13936. if (this._decrypt) {
  13937. this._ghash.update(chunk)
  13938. } else {
  13939. this._ghash.update(out)
  13940. }
  13941. this._len += chunk.length
  13942. return out
  13943. }
  13944. StreamCipher.prototype._final = function () {
  13945. if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
  13946. var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
  13947. if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
  13948. this._authTag = tag
  13949. this._cipher.scrub()
  13950. }
  13951. StreamCipher.prototype.getAuthTag = function getAuthTag () {
  13952. if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
  13953. return this._authTag
  13954. }
  13955. StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
  13956. if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
  13957. this._authTag = tag
  13958. }
  13959. StreamCipher.prototype.setAAD = function setAAD (buf) {
  13960. if (this._called) throw new Error('Attempting to set AAD in unsupported state')
  13961. this._ghash.update(buf)
  13962. this._alen += buf.length
  13963. }
  13964. module.exports = StreamCipher
  13965. /***/ }),
  13966. /***/ 44696:
  13967. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  13968. var ciphers = __webpack_require__(71494)
  13969. var deciphers = __webpack_require__(66193)
  13970. var modes = __webpack_require__(44946)
  13971. function getCiphers () {
  13972. return Object.keys(modes)
  13973. }
  13974. exports.createCipher = exports.Cipher = ciphers.createCipher
  13975. exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
  13976. exports.createDecipher = exports.Decipher = deciphers.createDecipher
  13977. exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
  13978. exports.listCiphers = exports.getCiphers = getCiphers
  13979. /***/ }),
  13980. /***/ 66193:
  13981. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  13982. var AuthCipher = __webpack_require__(62422)
  13983. var Buffer = (__webpack_require__(89509).Buffer)
  13984. var MODES = __webpack_require__(45)
  13985. var StreamCipher = __webpack_require__(25969)
  13986. var Transform = __webpack_require__(71027)
  13987. var aes = __webpack_require__(74497)
  13988. var ebtk = __webpack_require__(13048)
  13989. var inherits = __webpack_require__(35717)
  13990. function Decipher (mode, key, iv) {
  13991. Transform.call(this)
  13992. this._cache = new Splitter()
  13993. this._last = void 0
  13994. this._cipher = new aes.AES(key)
  13995. this._prev = Buffer.from(iv)
  13996. this._mode = mode
  13997. this._autopadding = true
  13998. }
  13999. inherits(Decipher, Transform)
  14000. Decipher.prototype._update = function (data) {
  14001. this._cache.add(data)
  14002. var chunk
  14003. var thing
  14004. var out = []
  14005. while ((chunk = this._cache.get(this._autopadding))) {
  14006. thing = this._mode.decrypt(this, chunk)
  14007. out.push(thing)
  14008. }
  14009. return Buffer.concat(out)
  14010. }
  14011. Decipher.prototype._final = function () {
  14012. var chunk = this._cache.flush()
  14013. if (this._autopadding) {
  14014. return unpad(this._mode.decrypt(this, chunk))
  14015. } else if (chunk) {
  14016. throw new Error('data not multiple of block length')
  14017. }
  14018. }
  14019. Decipher.prototype.setAutoPadding = function (setTo) {
  14020. this._autopadding = !!setTo
  14021. return this
  14022. }
  14023. function Splitter () {
  14024. this.cache = Buffer.allocUnsafe(0)
  14025. }
  14026. Splitter.prototype.add = function (data) {
  14027. this.cache = Buffer.concat([this.cache, data])
  14028. }
  14029. Splitter.prototype.get = function (autoPadding) {
  14030. var out
  14031. if (autoPadding) {
  14032. if (this.cache.length > 16) {
  14033. out = this.cache.slice(0, 16)
  14034. this.cache = this.cache.slice(16)
  14035. return out
  14036. }
  14037. } else {
  14038. if (this.cache.length >= 16) {
  14039. out = this.cache.slice(0, 16)
  14040. this.cache = this.cache.slice(16)
  14041. return out
  14042. }
  14043. }
  14044. return null
  14045. }
  14046. Splitter.prototype.flush = function () {
  14047. if (this.cache.length) return this.cache
  14048. }
  14049. function unpad (last) {
  14050. var padded = last[15]
  14051. if (padded < 1 || padded > 16) {
  14052. throw new Error('unable to decrypt data')
  14053. }
  14054. var i = -1
  14055. while (++i < padded) {
  14056. if (last[(i + (16 - padded))] !== padded) {
  14057. throw new Error('unable to decrypt data')
  14058. }
  14059. }
  14060. if (padded === 16) return
  14061. return last.slice(0, 16 - padded)
  14062. }
  14063. function createDecipheriv (suite, password, iv) {
  14064. var config = MODES[suite.toLowerCase()]
  14065. if (!config) throw new TypeError('invalid suite type')
  14066. if (typeof iv === 'string') iv = Buffer.from(iv)
  14067. if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
  14068. if (typeof password === 'string') password = Buffer.from(password)
  14069. if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
  14070. if (config.type === 'stream') {
  14071. return new StreamCipher(config.module, password, iv, true)
  14072. } else if (config.type === 'auth') {
  14073. return new AuthCipher(config.module, password, iv, true)
  14074. }
  14075. return new Decipher(config.module, password, iv)
  14076. }
  14077. function createDecipher (suite, password) {
  14078. var config = MODES[suite.toLowerCase()]
  14079. if (!config) throw new TypeError('invalid suite type')
  14080. var keys = ebtk(password, false, config.key, config.iv)
  14081. return createDecipheriv(suite, keys.key, keys.iv)
  14082. }
  14083. exports.createDecipher = createDecipher
  14084. exports.createDecipheriv = createDecipheriv
  14085. /***/ }),
  14086. /***/ 71494:
  14087. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14088. var MODES = __webpack_require__(45)
  14089. var AuthCipher = __webpack_require__(62422)
  14090. var Buffer = (__webpack_require__(89509).Buffer)
  14091. var StreamCipher = __webpack_require__(25969)
  14092. var Transform = __webpack_require__(71027)
  14093. var aes = __webpack_require__(74497)
  14094. var ebtk = __webpack_require__(13048)
  14095. var inherits = __webpack_require__(35717)
  14096. function Cipher (mode, key, iv) {
  14097. Transform.call(this)
  14098. this._cache = new Splitter()
  14099. this._cipher = new aes.AES(key)
  14100. this._prev = Buffer.from(iv)
  14101. this._mode = mode
  14102. this._autopadding = true
  14103. }
  14104. inherits(Cipher, Transform)
  14105. Cipher.prototype._update = function (data) {
  14106. this._cache.add(data)
  14107. var chunk
  14108. var thing
  14109. var out = []
  14110. while ((chunk = this._cache.get())) {
  14111. thing = this._mode.encrypt(this, chunk)
  14112. out.push(thing)
  14113. }
  14114. return Buffer.concat(out)
  14115. }
  14116. var PADDING = Buffer.alloc(16, 0x10)
  14117. Cipher.prototype._final = function () {
  14118. var chunk = this._cache.flush()
  14119. if (this._autopadding) {
  14120. chunk = this._mode.encrypt(this, chunk)
  14121. this._cipher.scrub()
  14122. return chunk
  14123. }
  14124. if (!chunk.equals(PADDING)) {
  14125. this._cipher.scrub()
  14126. throw new Error('data not multiple of block length')
  14127. }
  14128. }
  14129. Cipher.prototype.setAutoPadding = function (setTo) {
  14130. this._autopadding = !!setTo
  14131. return this
  14132. }
  14133. function Splitter () {
  14134. this.cache = Buffer.allocUnsafe(0)
  14135. }
  14136. Splitter.prototype.add = function (data) {
  14137. this.cache = Buffer.concat([this.cache, data])
  14138. }
  14139. Splitter.prototype.get = function () {
  14140. if (this.cache.length > 15) {
  14141. var out = this.cache.slice(0, 16)
  14142. this.cache = this.cache.slice(16)
  14143. return out
  14144. }
  14145. return null
  14146. }
  14147. Splitter.prototype.flush = function () {
  14148. var len = 16 - this.cache.length
  14149. var padBuff = Buffer.allocUnsafe(len)
  14150. var i = -1
  14151. while (++i < len) {
  14152. padBuff.writeUInt8(len, i)
  14153. }
  14154. return Buffer.concat([this.cache, padBuff])
  14155. }
  14156. function createCipheriv (suite, password, iv) {
  14157. var config = MODES[suite.toLowerCase()]
  14158. if (!config) throw new TypeError('invalid suite type')
  14159. if (typeof password === 'string') password = Buffer.from(password)
  14160. if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
  14161. if (typeof iv === 'string') iv = Buffer.from(iv)
  14162. if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
  14163. if (config.type === 'stream') {
  14164. return new StreamCipher(config.module, password, iv)
  14165. } else if (config.type === 'auth') {
  14166. return new AuthCipher(config.module, password, iv)
  14167. }
  14168. return new Cipher(config.module, password, iv)
  14169. }
  14170. function createCipher (suite, password) {
  14171. var config = MODES[suite.toLowerCase()]
  14172. if (!config) throw new TypeError('invalid suite type')
  14173. var keys = ebtk(password, false, config.key, config.iv)
  14174. return createCipheriv(suite, keys.key, keys.iv)
  14175. }
  14176. exports.createCipheriv = createCipheriv
  14177. exports.createCipher = createCipher
  14178. /***/ }),
  14179. /***/ 83288:
  14180. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14181. var Buffer = (__webpack_require__(89509).Buffer)
  14182. var ZEROES = Buffer.alloc(16, 0)
  14183. function toArray (buf) {
  14184. return [
  14185. buf.readUInt32BE(0),
  14186. buf.readUInt32BE(4),
  14187. buf.readUInt32BE(8),
  14188. buf.readUInt32BE(12)
  14189. ]
  14190. }
  14191. function fromArray (out) {
  14192. var buf = Buffer.allocUnsafe(16)
  14193. buf.writeUInt32BE(out[0] >>> 0, 0)
  14194. buf.writeUInt32BE(out[1] >>> 0, 4)
  14195. buf.writeUInt32BE(out[2] >>> 0, 8)
  14196. buf.writeUInt32BE(out[3] >>> 0, 12)
  14197. return buf
  14198. }
  14199. function GHASH (key) {
  14200. this.h = key
  14201. this.state = Buffer.alloc(16, 0)
  14202. this.cache = Buffer.allocUnsafe(0)
  14203. }
  14204. // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
  14205. // by Juho Vähä-Herttua
  14206. GHASH.prototype.ghash = function (block) {
  14207. var i = -1
  14208. while (++i < block.length) {
  14209. this.state[i] ^= block[i]
  14210. }
  14211. this._multiply()
  14212. }
  14213. GHASH.prototype._multiply = function () {
  14214. var Vi = toArray(this.h)
  14215. var Zi = [0, 0, 0, 0]
  14216. var j, xi, lsbVi
  14217. var i = -1
  14218. while (++i < 128) {
  14219. xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
  14220. if (xi) {
  14221. // Z_i+1 = Z_i ^ V_i
  14222. Zi[0] ^= Vi[0]
  14223. Zi[1] ^= Vi[1]
  14224. Zi[2] ^= Vi[2]
  14225. Zi[3] ^= Vi[3]
  14226. }
  14227. // Store the value of LSB(V_i)
  14228. lsbVi = (Vi[3] & 1) !== 0
  14229. // V_i+1 = V_i >> 1
  14230. for (j = 3; j > 0; j--) {
  14231. Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
  14232. }
  14233. Vi[0] = Vi[0] >>> 1
  14234. // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
  14235. if (lsbVi) {
  14236. Vi[0] = Vi[0] ^ (0xe1 << 24)
  14237. }
  14238. }
  14239. this.state = fromArray(Zi)
  14240. }
  14241. GHASH.prototype.update = function (buf) {
  14242. this.cache = Buffer.concat([this.cache, buf])
  14243. var chunk
  14244. while (this.cache.length >= 16) {
  14245. chunk = this.cache.slice(0, 16)
  14246. this.cache = this.cache.slice(16)
  14247. this.ghash(chunk)
  14248. }
  14249. }
  14250. GHASH.prototype.final = function (abl, bl) {
  14251. if (this.cache.length) {
  14252. this.ghash(Buffer.concat([this.cache, ZEROES], 16))
  14253. }
  14254. this.ghash(fromArray([0, abl, 0, bl]))
  14255. return this.state
  14256. }
  14257. module.exports = GHASH
  14258. /***/ }),
  14259. /***/ 20685:
  14260. /***/ ((module) => {
  14261. function incr32 (iv) {
  14262. var len = iv.length
  14263. var item
  14264. while (len--) {
  14265. item = iv.readUInt8(len)
  14266. if (item === 255) {
  14267. iv.writeUInt8(0, len)
  14268. } else {
  14269. item++
  14270. iv.writeUInt8(item, len)
  14271. break
  14272. }
  14273. }
  14274. }
  14275. module.exports = incr32
  14276. /***/ }),
  14277. /***/ 25292:
  14278. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14279. var xor = __webpack_require__(67295)
  14280. exports.encrypt = function (self, block) {
  14281. var data = xor(block, self._prev)
  14282. self._prev = self._cipher.encryptBlock(data)
  14283. return self._prev
  14284. }
  14285. exports.decrypt = function (self, block) {
  14286. var pad = self._prev
  14287. self._prev = block
  14288. var out = self._cipher.decryptBlock(block)
  14289. return xor(out, pad)
  14290. }
  14291. /***/ }),
  14292. /***/ 86311:
  14293. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14294. var Buffer = (__webpack_require__(89509).Buffer)
  14295. var xor = __webpack_require__(67295)
  14296. function encryptStart (self, data, decrypt) {
  14297. var len = data.length
  14298. var out = xor(data, self._cache)
  14299. self._cache = self._cache.slice(len)
  14300. self._prev = Buffer.concat([self._prev, decrypt ? data : out])
  14301. return out
  14302. }
  14303. exports.encrypt = function (self, data, decrypt) {
  14304. var out = Buffer.allocUnsafe(0)
  14305. var len
  14306. while (data.length) {
  14307. if (self._cache.length === 0) {
  14308. self._cache = self._cipher.encryptBlock(self._prev)
  14309. self._prev = Buffer.allocUnsafe(0)
  14310. }
  14311. if (self._cache.length <= data.length) {
  14312. len = self._cache.length
  14313. out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
  14314. data = data.slice(len)
  14315. } else {
  14316. out = Buffer.concat([out, encryptStart(self, data, decrypt)])
  14317. break
  14318. }
  14319. }
  14320. return out
  14321. }
  14322. /***/ }),
  14323. /***/ 21510:
  14324. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14325. var Buffer = (__webpack_require__(89509).Buffer)
  14326. function encryptByte (self, byteParam, decrypt) {
  14327. var pad
  14328. var i = -1
  14329. var len = 8
  14330. var out = 0
  14331. var bit, value
  14332. while (++i < len) {
  14333. pad = self._cipher.encryptBlock(self._prev)
  14334. bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
  14335. value = pad[0] ^ bit
  14336. out += ((value & 0x80) >> (i % 8))
  14337. self._prev = shiftIn(self._prev, decrypt ? bit : value)
  14338. }
  14339. return out
  14340. }
  14341. function shiftIn (buffer, value) {
  14342. var len = buffer.length
  14343. var i = -1
  14344. var out = Buffer.allocUnsafe(buffer.length)
  14345. buffer = Buffer.concat([buffer, Buffer.from([value])])
  14346. while (++i < len) {
  14347. out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
  14348. }
  14349. return out
  14350. }
  14351. exports.encrypt = function (self, chunk, decrypt) {
  14352. var len = chunk.length
  14353. var out = Buffer.allocUnsafe(len)
  14354. var i = -1
  14355. while (++i < len) {
  14356. out[i] = encryptByte(self, chunk[i], decrypt)
  14357. }
  14358. return out
  14359. }
  14360. /***/ }),
  14361. /***/ 71964:
  14362. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14363. var Buffer = (__webpack_require__(89509).Buffer)
  14364. function encryptByte (self, byteParam, decrypt) {
  14365. var pad = self._cipher.encryptBlock(self._prev)
  14366. var out = pad[0] ^ byteParam
  14367. self._prev = Buffer.concat([
  14368. self._prev.slice(1),
  14369. Buffer.from([decrypt ? byteParam : out])
  14370. ])
  14371. return out
  14372. }
  14373. exports.encrypt = function (self, chunk, decrypt) {
  14374. var len = chunk.length
  14375. var out = Buffer.allocUnsafe(len)
  14376. var i = -1
  14377. while (++i < len) {
  14378. out[i] = encryptByte(self, chunk[i], decrypt)
  14379. }
  14380. return out
  14381. }
  14382. /***/ }),
  14383. /***/ 96009:
  14384. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14385. var xor = __webpack_require__(67295)
  14386. var Buffer = (__webpack_require__(89509).Buffer)
  14387. var incr32 = __webpack_require__(20685)
  14388. function getBlock (self) {
  14389. var out = self._cipher.encryptBlockRaw(self._prev)
  14390. incr32(self._prev)
  14391. return out
  14392. }
  14393. var blockSize = 16
  14394. exports.encrypt = function (self, chunk) {
  14395. var chunkNum = Math.ceil(chunk.length / blockSize)
  14396. var start = self._cache.length
  14397. self._cache = Buffer.concat([
  14398. self._cache,
  14399. Buffer.allocUnsafe(chunkNum * blockSize)
  14400. ])
  14401. for (var i = 0; i < chunkNum; i++) {
  14402. var out = getBlock(self)
  14403. var offset = start + i * blockSize
  14404. self._cache.writeUInt32BE(out[0], offset + 0)
  14405. self._cache.writeUInt32BE(out[1], offset + 4)
  14406. self._cache.writeUInt32BE(out[2], offset + 8)
  14407. self._cache.writeUInt32BE(out[3], offset + 12)
  14408. }
  14409. var pad = self._cache.slice(0, chunk.length)
  14410. self._cache = self._cache.slice(chunk.length)
  14411. return xor(chunk, pad)
  14412. }
  14413. /***/ }),
  14414. /***/ 11084:
  14415. /***/ ((__unused_webpack_module, exports) => {
  14416. exports.encrypt = function (self, block) {
  14417. return self._cipher.encryptBlock(block)
  14418. }
  14419. exports.decrypt = function (self, block) {
  14420. return self._cipher.decryptBlock(block)
  14421. }
  14422. /***/ }),
  14423. /***/ 45:
  14424. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14425. var modeModules = {
  14426. ECB: __webpack_require__(11084),
  14427. CBC: __webpack_require__(25292),
  14428. CFB: __webpack_require__(86311),
  14429. CFB8: __webpack_require__(71964),
  14430. CFB1: __webpack_require__(21510),
  14431. OFB: __webpack_require__(18861),
  14432. CTR: __webpack_require__(96009),
  14433. GCM: __webpack_require__(96009)
  14434. }
  14435. var modes = __webpack_require__(44946)
  14436. for (var key in modes) {
  14437. modes[key].module = modeModules[modes[key].mode]
  14438. }
  14439. module.exports = modes
  14440. /***/ }),
  14441. /***/ 18861:
  14442. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14443. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  14444. var xor = __webpack_require__(67295)
  14445. function getBlock (self) {
  14446. self._prev = self._cipher.encryptBlock(self._prev)
  14447. return self._prev
  14448. }
  14449. exports.encrypt = function (self, chunk) {
  14450. while (self._cache.length < chunk.length) {
  14451. self._cache = Buffer.concat([self._cache, getBlock(self)])
  14452. }
  14453. var pad = self._cache.slice(0, chunk.length)
  14454. self._cache = self._cache.slice(chunk.length)
  14455. return xor(chunk, pad)
  14456. }
  14457. /***/ }),
  14458. /***/ 25969:
  14459. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14460. var aes = __webpack_require__(74497)
  14461. var Buffer = (__webpack_require__(89509).Buffer)
  14462. var Transform = __webpack_require__(71027)
  14463. var inherits = __webpack_require__(35717)
  14464. function StreamCipher (mode, key, iv, decrypt) {
  14465. Transform.call(this)
  14466. this._cipher = new aes.AES(key)
  14467. this._prev = Buffer.from(iv)
  14468. this._cache = Buffer.allocUnsafe(0)
  14469. this._secCache = Buffer.allocUnsafe(0)
  14470. this._decrypt = decrypt
  14471. this._mode = mode
  14472. }
  14473. inherits(StreamCipher, Transform)
  14474. StreamCipher.prototype._update = function (chunk) {
  14475. return this._mode.encrypt(this, chunk, this._decrypt)
  14476. }
  14477. StreamCipher.prototype._final = function () {
  14478. this._cipher.scrub()
  14479. }
  14480. module.exports = StreamCipher
  14481. /***/ }),
  14482. /***/ 53614:
  14483. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14484. var DES = __webpack_require__(47667)
  14485. var aes = __webpack_require__(44696)
  14486. var aesModes = __webpack_require__(45)
  14487. var desModes = __webpack_require__(99715)
  14488. var ebtk = __webpack_require__(13048)
  14489. function createCipher (suite, password) {
  14490. suite = suite.toLowerCase()
  14491. var keyLen, ivLen
  14492. if (aesModes[suite]) {
  14493. keyLen = aesModes[suite].key
  14494. ivLen = aesModes[suite].iv
  14495. } else if (desModes[suite]) {
  14496. keyLen = desModes[suite].key * 8
  14497. ivLen = desModes[suite].iv
  14498. } else {
  14499. throw new TypeError('invalid suite type')
  14500. }
  14501. var keys = ebtk(password, false, keyLen, ivLen)
  14502. return createCipheriv(suite, keys.key, keys.iv)
  14503. }
  14504. function createDecipher (suite, password) {
  14505. suite = suite.toLowerCase()
  14506. var keyLen, ivLen
  14507. if (aesModes[suite]) {
  14508. keyLen = aesModes[suite].key
  14509. ivLen = aesModes[suite].iv
  14510. } else if (desModes[suite]) {
  14511. keyLen = desModes[suite].key * 8
  14512. ivLen = desModes[suite].iv
  14513. } else {
  14514. throw new TypeError('invalid suite type')
  14515. }
  14516. var keys = ebtk(password, false, keyLen, ivLen)
  14517. return createDecipheriv(suite, keys.key, keys.iv)
  14518. }
  14519. function createCipheriv (suite, key, iv) {
  14520. suite = suite.toLowerCase()
  14521. if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)
  14522. if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })
  14523. throw new TypeError('invalid suite type')
  14524. }
  14525. function createDecipheriv (suite, key, iv) {
  14526. suite = suite.toLowerCase()
  14527. if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)
  14528. if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })
  14529. throw new TypeError('invalid suite type')
  14530. }
  14531. function getCiphers () {
  14532. return Object.keys(desModes).concat(aes.getCiphers())
  14533. }
  14534. exports.createCipher = exports.Cipher = createCipher
  14535. exports.createCipheriv = exports.Cipheriv = createCipheriv
  14536. exports.createDecipher = exports.Decipher = createDecipher
  14537. exports.createDecipheriv = exports.Decipheriv = createDecipheriv
  14538. exports.listCiphers = exports.getCiphers = getCiphers
  14539. /***/ }),
  14540. /***/ 47667:
  14541. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14542. var CipherBase = __webpack_require__(71027)
  14543. var des = __webpack_require__(15251)
  14544. var inherits = __webpack_require__(35717)
  14545. var Buffer = (__webpack_require__(89509).Buffer)
  14546. var modes = {
  14547. 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
  14548. 'des-ede3': des.EDE,
  14549. 'des-ede-cbc': des.CBC.instantiate(des.EDE),
  14550. 'des-ede': des.EDE,
  14551. 'des-cbc': des.CBC.instantiate(des.DES),
  14552. 'des-ecb': des.DES
  14553. }
  14554. modes.des = modes['des-cbc']
  14555. modes.des3 = modes['des-ede3-cbc']
  14556. module.exports = DES
  14557. inherits(DES, CipherBase)
  14558. function DES (opts) {
  14559. CipherBase.call(this)
  14560. var modeName = opts.mode.toLowerCase()
  14561. var mode = modes[modeName]
  14562. var type
  14563. if (opts.decrypt) {
  14564. type = 'decrypt'
  14565. } else {
  14566. type = 'encrypt'
  14567. }
  14568. var key = opts.key
  14569. if (!Buffer.isBuffer(key)) {
  14570. key = Buffer.from(key)
  14571. }
  14572. if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
  14573. key = Buffer.concat([key, key.slice(0, 8)])
  14574. }
  14575. var iv = opts.iv
  14576. if (!Buffer.isBuffer(iv)) {
  14577. iv = Buffer.from(iv)
  14578. }
  14579. this._des = mode.create({
  14580. key: key,
  14581. iv: iv,
  14582. type: type
  14583. })
  14584. }
  14585. DES.prototype._update = function (data) {
  14586. return Buffer.from(this._des.update(data))
  14587. }
  14588. DES.prototype._final = function () {
  14589. return Buffer.from(this._des.final())
  14590. }
  14591. /***/ }),
  14592. /***/ 99715:
  14593. /***/ ((__unused_webpack_module, exports) => {
  14594. exports["des-ecb"] = {
  14595. key: 8,
  14596. iv: 0
  14597. }
  14598. exports["des-cbc"] = exports.des = {
  14599. key: 8,
  14600. iv: 8
  14601. }
  14602. exports["des-ede3-cbc"] = exports.des3 = {
  14603. key: 24,
  14604. iv: 8
  14605. }
  14606. exports["des-ede3"] = {
  14607. key: 24,
  14608. iv: 0
  14609. }
  14610. exports["des-ede-cbc"] = {
  14611. key: 16,
  14612. iv: 8
  14613. }
  14614. exports["des-ede"] = {
  14615. key: 16,
  14616. iv: 0
  14617. }
  14618. /***/ }),
  14619. /***/ 23663:
  14620. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14621. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  14622. var BN = __webpack_require__(13550)
  14623. var randomBytes = __webpack_require__(61798)
  14624. function blind (priv) {
  14625. var r = getr(priv)
  14626. var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()
  14627. return { blinder: blinder, unblinder: r.invm(priv.modulus) }
  14628. }
  14629. function getr (priv) {
  14630. var len = priv.modulus.byteLength()
  14631. var r
  14632. do {
  14633. r = new BN(randomBytes(len))
  14634. } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))
  14635. return r
  14636. }
  14637. function crt (msg, priv) {
  14638. var blinds = blind(priv)
  14639. var len = priv.modulus.byteLength()
  14640. var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)
  14641. var c1 = blinded.toRed(BN.mont(priv.prime1))
  14642. var c2 = blinded.toRed(BN.mont(priv.prime2))
  14643. var qinv = priv.coefficient
  14644. var p = priv.prime1
  14645. var q = priv.prime2
  14646. var m1 = c1.redPow(priv.exponent1).fromRed()
  14647. var m2 = c2.redPow(priv.exponent2).fromRed()
  14648. var h = m1.isub(m2).imul(qinv).umod(p).imul(q)
  14649. return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)
  14650. }
  14651. crt.getr = getr
  14652. module.exports = crt
  14653. /***/ }),
  14654. /***/ 56042:
  14655. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14656. module.exports = __webpack_require__(75207)
  14657. /***/ }),
  14658. /***/ 64743:
  14659. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14660. var Buffer = (__webpack_require__(89509).Buffer)
  14661. var createHash = __webpack_require__(23482)
  14662. var stream = __webpack_require__(88473)
  14663. var inherits = __webpack_require__(35717)
  14664. var sign = __webpack_require__(82957)
  14665. var verify = __webpack_require__(47753)
  14666. var algorithms = __webpack_require__(75207)
  14667. Object.keys(algorithms).forEach(function (key) {
  14668. algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')
  14669. algorithms[key.toLowerCase()] = algorithms[key]
  14670. })
  14671. function Sign (algorithm) {
  14672. stream.Writable.call(this)
  14673. var data = algorithms[algorithm]
  14674. if (!data) throw new Error('Unknown message digest')
  14675. this._hashType = data.hash
  14676. this._hash = createHash(data.hash)
  14677. this._tag = data.id
  14678. this._signType = data.sign
  14679. }
  14680. inherits(Sign, stream.Writable)
  14681. Sign.prototype._write = function _write (data, _, done) {
  14682. this._hash.update(data)
  14683. done()
  14684. }
  14685. Sign.prototype.update = function update (data, enc) {
  14686. if (typeof data === 'string') data = Buffer.from(data, enc)
  14687. this._hash.update(data)
  14688. return this
  14689. }
  14690. Sign.prototype.sign = function signMethod (key, enc) {
  14691. this.end()
  14692. var hash = this._hash.digest()
  14693. var sig = sign(hash, key, this._hashType, this._signType, this._tag)
  14694. return enc ? sig.toString(enc) : sig
  14695. }
  14696. function Verify (algorithm) {
  14697. stream.Writable.call(this)
  14698. var data = algorithms[algorithm]
  14699. if (!data) throw new Error('Unknown message digest')
  14700. this._hash = createHash(data.hash)
  14701. this._tag = data.id
  14702. this._signType = data.sign
  14703. }
  14704. inherits(Verify, stream.Writable)
  14705. Verify.prototype._write = function _write (data, _, done) {
  14706. this._hash.update(data)
  14707. done()
  14708. }
  14709. Verify.prototype.update = function update (data, enc) {
  14710. if (typeof data === 'string') data = Buffer.from(data, enc)
  14711. this._hash.update(data)
  14712. return this
  14713. }
  14714. Verify.prototype.verify = function verifyMethod (key, sig, enc) {
  14715. if (typeof sig === 'string') sig = Buffer.from(sig, enc)
  14716. this.end()
  14717. var hash = this._hash.digest()
  14718. return verify(sig, hash, key, this._signType, this._tag)
  14719. }
  14720. function createSign (algorithm) {
  14721. return new Sign(algorithm)
  14722. }
  14723. function createVerify (algorithm) {
  14724. return new Verify(algorithm)
  14725. }
  14726. module.exports = {
  14727. Sign: createSign,
  14728. Verify: createVerify,
  14729. createSign: createSign,
  14730. createVerify: createVerify
  14731. }
  14732. /***/ }),
  14733. /***/ 82957:
  14734. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14735. // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
  14736. var Buffer = (__webpack_require__(89509).Buffer)
  14737. var createHmac = __webpack_require__(58355)
  14738. var crt = __webpack_require__(23663)
  14739. var EC = (__webpack_require__(86266).ec)
  14740. var BN = __webpack_require__(13550)
  14741. var parseKeys = __webpack_require__(70980)
  14742. var curves = __webpack_require__(1308)
  14743. function sign (hash, key, hashType, signType, tag) {
  14744. var priv = parseKeys(key)
  14745. if (priv.curve) {
  14746. // rsa keys can be interpreted as ecdsa ones in openssl
  14747. if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
  14748. return ecSign(hash, priv)
  14749. } else if (priv.type === 'dsa') {
  14750. if (signType !== 'dsa') throw new Error('wrong private key type')
  14751. return dsaSign(hash, priv, hashType)
  14752. } else {
  14753. if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
  14754. }
  14755. hash = Buffer.concat([tag, hash])
  14756. var len = priv.modulus.byteLength()
  14757. var pad = [0, 1]
  14758. while (hash.length + pad.length + 1 < len) pad.push(0xff)
  14759. pad.push(0x00)
  14760. var i = -1
  14761. while (++i < hash.length) pad.push(hash[i])
  14762. var out = crt(pad, priv)
  14763. return out
  14764. }
  14765. function ecSign (hash, priv) {
  14766. var curveId = curves[priv.curve.join('.')]
  14767. if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
  14768. var curve = new EC(curveId)
  14769. var key = curve.keyFromPrivate(priv.privateKey)
  14770. var out = key.sign(hash)
  14771. return Buffer.from(out.toDER())
  14772. }
  14773. function dsaSign (hash, priv, algo) {
  14774. var x = priv.params.priv_key
  14775. var p = priv.params.p
  14776. var q = priv.params.q
  14777. var g = priv.params.g
  14778. var r = new BN(0)
  14779. var k
  14780. var H = bits2int(hash, q).mod(q)
  14781. var s = false
  14782. var kv = getKey(x, q, hash, algo)
  14783. while (s === false) {
  14784. k = makeKey(q, kv, algo)
  14785. r = makeR(g, k, p, q)
  14786. s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
  14787. if (s.cmpn(0) === 0) {
  14788. s = false
  14789. r = new BN(0)
  14790. }
  14791. }
  14792. return toDER(r, s)
  14793. }
  14794. function toDER (r, s) {
  14795. r = r.toArray()
  14796. s = s.toArray()
  14797. // Pad values
  14798. if (r[0] & 0x80) r = [0].concat(r)
  14799. if (s[0] & 0x80) s = [0].concat(s)
  14800. var total = r.length + s.length + 4
  14801. var res = [0x30, total, 0x02, r.length]
  14802. res = res.concat(r, [0x02, s.length], s)
  14803. return Buffer.from(res)
  14804. }
  14805. function getKey (x, q, hash, algo) {
  14806. x = Buffer.from(x.toArray())
  14807. if (x.length < q.byteLength()) {
  14808. var zeros = Buffer.alloc(q.byteLength() - x.length)
  14809. x = Buffer.concat([zeros, x])
  14810. }
  14811. var hlen = hash.length
  14812. var hbits = bits2octets(hash, q)
  14813. var v = Buffer.alloc(hlen)
  14814. v.fill(1)
  14815. var k = Buffer.alloc(hlen)
  14816. k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()
  14817. v = createHmac(algo, k).update(v).digest()
  14818. k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()
  14819. v = createHmac(algo, k).update(v).digest()
  14820. return { k: k, v: v }
  14821. }
  14822. function bits2int (obits, q) {
  14823. var bits = new BN(obits)
  14824. var shift = (obits.length << 3) - q.bitLength()
  14825. if (shift > 0) bits.ishrn(shift)
  14826. return bits
  14827. }
  14828. function bits2octets (bits, q) {
  14829. bits = bits2int(bits, q)
  14830. bits = bits.mod(q)
  14831. var out = Buffer.from(bits.toArray())
  14832. if (out.length < q.byteLength()) {
  14833. var zeros = Buffer.alloc(q.byteLength() - out.length)
  14834. out = Buffer.concat([zeros, out])
  14835. }
  14836. return out
  14837. }
  14838. function makeKey (q, kv, algo) {
  14839. var t
  14840. var k
  14841. do {
  14842. t = Buffer.alloc(0)
  14843. while (t.length * 8 < q.bitLength()) {
  14844. kv.v = createHmac(algo, kv.k).update(kv.v).digest()
  14845. t = Buffer.concat([t, kv.v])
  14846. }
  14847. k = bits2int(t, q)
  14848. kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()
  14849. kv.v = createHmac(algo, kv.k).update(kv.v).digest()
  14850. } while (k.cmp(q) !== -1)
  14851. return k
  14852. }
  14853. function makeR (g, k, p, q) {
  14854. return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
  14855. }
  14856. module.exports = sign
  14857. module.exports.getKey = getKey
  14858. module.exports.makeKey = makeKey
  14859. /***/ }),
  14860. /***/ 47753:
  14861. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  14862. // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
  14863. var Buffer = (__webpack_require__(89509).Buffer)
  14864. var BN = __webpack_require__(13550)
  14865. var EC = (__webpack_require__(86266).ec)
  14866. var parseKeys = __webpack_require__(70980)
  14867. var curves = __webpack_require__(1308)
  14868. function verify (sig, hash, key, signType, tag) {
  14869. var pub = parseKeys(key)
  14870. if (pub.type === 'ec') {
  14871. // rsa keys can be interpreted as ecdsa ones in openssl
  14872. if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
  14873. return ecVerify(sig, hash, pub)
  14874. } else if (pub.type === 'dsa') {
  14875. if (signType !== 'dsa') throw new Error('wrong public key type')
  14876. return dsaVerify(sig, hash, pub)
  14877. } else {
  14878. if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
  14879. }
  14880. hash = Buffer.concat([tag, hash])
  14881. var len = pub.modulus.byteLength()
  14882. var pad = [1]
  14883. var padNum = 0
  14884. while (hash.length + pad.length + 2 < len) {
  14885. pad.push(0xff)
  14886. padNum++
  14887. }
  14888. pad.push(0x00)
  14889. var i = -1
  14890. while (++i < hash.length) {
  14891. pad.push(hash[i])
  14892. }
  14893. pad = Buffer.from(pad)
  14894. var red = BN.mont(pub.modulus)
  14895. sig = new BN(sig).toRed(red)
  14896. sig = sig.redPow(new BN(pub.publicExponent))
  14897. sig = Buffer.from(sig.fromRed().toArray())
  14898. var out = padNum < 8 ? 1 : 0
  14899. len = Math.min(sig.length, pad.length)
  14900. if (sig.length !== pad.length) out = 1
  14901. i = -1
  14902. while (++i < len) out |= sig[i] ^ pad[i]
  14903. return out === 0
  14904. }
  14905. function ecVerify (sig, hash, pub) {
  14906. var curveId = curves[pub.data.algorithm.curve.join('.')]
  14907. if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
  14908. var curve = new EC(curveId)
  14909. var pubkey = pub.data.subjectPrivateKey.data
  14910. return curve.verify(hash, sig, pubkey)
  14911. }
  14912. function dsaVerify (sig, hash, pub) {
  14913. var p = pub.data.p
  14914. var q = pub.data.q
  14915. var g = pub.data.g
  14916. var y = pub.data.pub_key
  14917. var unpacked = parseKeys.signature.decode(sig, 'der')
  14918. var s = unpacked.s
  14919. var r = unpacked.r
  14920. checkValue(s, q)
  14921. checkValue(r, q)
  14922. var montp = BN.mont(p)
  14923. var w = s.invm(q)
  14924. var v = g.toRed(montp)
  14925. .redPow(new BN(hash).mul(w).mod(q))
  14926. .fromRed()
  14927. .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
  14928. .mod(p)
  14929. .mod(q)
  14930. return v.cmp(r) === 0
  14931. }
  14932. function checkValue (b, q) {
  14933. if (b.cmpn(0) <= 0) throw new Error('invalid sig')
  14934. if (b.cmp(q) >= q) throw new Error('invalid sig')
  14935. }
  14936. module.exports = verify
  14937. /***/ }),
  14938. /***/ 74505:
  14939. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  14940. "use strict";
  14941. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  14942. /* provided dependency */ var process = __webpack_require__(34155);
  14943. /* eslint camelcase: "off" */
  14944. var assert = __webpack_require__(69282);
  14945. var Zstream = __webpack_require__(54860);
  14946. var zlib_deflate = __webpack_require__(42233);
  14947. var zlib_inflate = __webpack_require__(23001);
  14948. var constants = __webpack_require__(77162);
  14949. for (var key in constants) {
  14950. exports[key] = constants[key];
  14951. }
  14952. // zlib modes
  14953. exports.NONE = 0;
  14954. exports.DEFLATE = 1;
  14955. exports.INFLATE = 2;
  14956. exports.GZIP = 3;
  14957. exports.GUNZIP = 4;
  14958. exports.DEFLATERAW = 5;
  14959. exports.INFLATERAW = 6;
  14960. exports.UNZIP = 7;
  14961. var GZIP_HEADER_ID1 = 0x1f;
  14962. var GZIP_HEADER_ID2 = 0x8b;
  14963. /**
  14964. * Emulate Node's zlib C++ layer for use by the JS layer in index.js
  14965. */
  14966. function Zlib(mode) {
  14967. if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {
  14968. throw new TypeError('Bad argument');
  14969. }
  14970. this.dictionary = null;
  14971. this.err = 0;
  14972. this.flush = 0;
  14973. this.init_done = false;
  14974. this.level = 0;
  14975. this.memLevel = 0;
  14976. this.mode = mode;
  14977. this.strategy = 0;
  14978. this.windowBits = 0;
  14979. this.write_in_progress = false;
  14980. this.pending_close = false;
  14981. this.gzip_id_bytes_read = 0;
  14982. }
  14983. Zlib.prototype.close = function () {
  14984. if (this.write_in_progress) {
  14985. this.pending_close = true;
  14986. return;
  14987. }
  14988. this.pending_close = false;
  14989. assert(this.init_done, 'close before init');
  14990. assert(this.mode <= exports.UNZIP);
  14991. if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {
  14992. zlib_deflate.deflateEnd(this.strm);
  14993. } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {
  14994. zlib_inflate.inflateEnd(this.strm);
  14995. }
  14996. this.mode = exports.NONE;
  14997. this.dictionary = null;
  14998. };
  14999. Zlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {
  15000. return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);
  15001. };
  15002. Zlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {
  15003. return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);
  15004. };
  15005. Zlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {
  15006. assert.equal(arguments.length, 8);
  15007. assert(this.init_done, 'write before init');
  15008. assert(this.mode !== exports.NONE, 'already finalized');
  15009. assert.equal(false, this.write_in_progress, 'write already in progress');
  15010. assert.equal(false, this.pending_close, 'close is pending');
  15011. this.write_in_progress = true;
  15012. assert.equal(false, flush === undefined, 'must provide flush value');
  15013. this.write_in_progress = true;
  15014. if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {
  15015. throw new Error('Invalid flush value');
  15016. }
  15017. if (input == null) {
  15018. input = Buffer.alloc(0);
  15019. in_len = 0;
  15020. in_off = 0;
  15021. }
  15022. this.strm.avail_in = in_len;
  15023. this.strm.input = input;
  15024. this.strm.next_in = in_off;
  15025. this.strm.avail_out = out_len;
  15026. this.strm.output = out;
  15027. this.strm.next_out = out_off;
  15028. this.flush = flush;
  15029. if (!async) {
  15030. // sync version
  15031. this._process();
  15032. if (this._checkError()) {
  15033. return this._afterSync();
  15034. }
  15035. return;
  15036. }
  15037. // async version
  15038. var self = this;
  15039. process.nextTick(function () {
  15040. self._process();
  15041. self._after();
  15042. });
  15043. return this;
  15044. };
  15045. Zlib.prototype._afterSync = function () {
  15046. var avail_out = this.strm.avail_out;
  15047. var avail_in = this.strm.avail_in;
  15048. this.write_in_progress = false;
  15049. return [avail_in, avail_out];
  15050. };
  15051. Zlib.prototype._process = function () {
  15052. var next_expected_header_byte = null;
  15053. // If the avail_out is left at 0, then it means that it ran out
  15054. // of room. If there was avail_out left over, then it means
  15055. // that all of the input was consumed.
  15056. switch (this.mode) {
  15057. case exports.DEFLATE:
  15058. case exports.GZIP:
  15059. case exports.DEFLATERAW:
  15060. this.err = zlib_deflate.deflate(this.strm, this.flush);
  15061. break;
  15062. case exports.UNZIP:
  15063. if (this.strm.avail_in > 0) {
  15064. next_expected_header_byte = this.strm.next_in;
  15065. }
  15066. switch (this.gzip_id_bytes_read) {
  15067. case 0:
  15068. if (next_expected_header_byte === null) {
  15069. break;
  15070. }
  15071. if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {
  15072. this.gzip_id_bytes_read = 1;
  15073. next_expected_header_byte++;
  15074. if (this.strm.avail_in === 1) {
  15075. // The only available byte was already read.
  15076. break;
  15077. }
  15078. } else {
  15079. this.mode = exports.INFLATE;
  15080. break;
  15081. }
  15082. // fallthrough
  15083. case 1:
  15084. if (next_expected_header_byte === null) {
  15085. break;
  15086. }
  15087. if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {
  15088. this.gzip_id_bytes_read = 2;
  15089. this.mode = exports.GUNZIP;
  15090. } else {
  15091. // There is no actual difference between INFLATE and INFLATERAW
  15092. // (after initialization).
  15093. this.mode = exports.INFLATE;
  15094. }
  15095. break;
  15096. default:
  15097. throw new Error('invalid number of gzip magic number bytes read');
  15098. }
  15099. // fallthrough
  15100. case exports.INFLATE:
  15101. case exports.GUNZIP:
  15102. case exports.INFLATERAW:
  15103. this.err = zlib_inflate.inflate(this.strm, this.flush
  15104. // If data was encoded with dictionary
  15105. );if (this.err === exports.Z_NEED_DICT && this.dictionary) {
  15106. // Load it
  15107. this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);
  15108. if (this.err === exports.Z_OK) {
  15109. // And try to decode again
  15110. this.err = zlib_inflate.inflate(this.strm, this.flush);
  15111. } else if (this.err === exports.Z_DATA_ERROR) {
  15112. // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.
  15113. // Make it possible for After() to tell a bad dictionary from bad
  15114. // input.
  15115. this.err = exports.Z_NEED_DICT;
  15116. }
  15117. }
  15118. while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {
  15119. // Bytes remain in input buffer. Perhaps this is another compressed
  15120. // member in the same archive, or just trailing garbage.
  15121. // Trailing zero bytes are okay, though, since they are frequently
  15122. // used for padding.
  15123. this.reset();
  15124. this.err = zlib_inflate.inflate(this.strm, this.flush);
  15125. }
  15126. break;
  15127. default:
  15128. throw new Error('Unknown mode ' + this.mode);
  15129. }
  15130. };
  15131. Zlib.prototype._checkError = function () {
  15132. // Acceptable error states depend on the type of zlib stream.
  15133. switch (this.err) {
  15134. case exports.Z_OK:
  15135. case exports.Z_BUF_ERROR:
  15136. if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {
  15137. this._error('unexpected end of file');
  15138. return false;
  15139. }
  15140. break;
  15141. case exports.Z_STREAM_END:
  15142. // normal statuses, not fatal
  15143. break;
  15144. case exports.Z_NEED_DICT:
  15145. if (this.dictionary == null) {
  15146. this._error('Missing dictionary');
  15147. } else {
  15148. this._error('Bad dictionary');
  15149. }
  15150. return false;
  15151. default:
  15152. // something else.
  15153. this._error('Zlib error');
  15154. return false;
  15155. }
  15156. return true;
  15157. };
  15158. Zlib.prototype._after = function () {
  15159. if (!this._checkError()) {
  15160. return;
  15161. }
  15162. var avail_out = this.strm.avail_out;
  15163. var avail_in = this.strm.avail_in;
  15164. this.write_in_progress = false;
  15165. // call the write() cb
  15166. this.callback(avail_in, avail_out);
  15167. if (this.pending_close) {
  15168. this.close();
  15169. }
  15170. };
  15171. Zlib.prototype._error = function (message) {
  15172. if (this.strm.msg) {
  15173. message = this.strm.msg;
  15174. }
  15175. this.onerror(message, this.err
  15176. // no hope of rescue.
  15177. );this.write_in_progress = false;
  15178. if (this.pending_close) {
  15179. this.close();
  15180. }
  15181. };
  15182. Zlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {
  15183. assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');
  15184. assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');
  15185. assert(level >= -1 && level <= 9, 'invalid compression level');
  15186. assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');
  15187. assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');
  15188. this._init(level, windowBits, memLevel, strategy, dictionary);
  15189. this._setDictionary();
  15190. };
  15191. Zlib.prototype.params = function () {
  15192. throw new Error('deflateParams Not supported');
  15193. };
  15194. Zlib.prototype.reset = function () {
  15195. this._reset();
  15196. this._setDictionary();
  15197. };
  15198. Zlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {
  15199. this.level = level;
  15200. this.windowBits = windowBits;
  15201. this.memLevel = memLevel;
  15202. this.strategy = strategy;
  15203. this.flush = exports.Z_NO_FLUSH;
  15204. this.err = exports.Z_OK;
  15205. if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {
  15206. this.windowBits += 16;
  15207. }
  15208. if (this.mode === exports.UNZIP) {
  15209. this.windowBits += 32;
  15210. }
  15211. if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {
  15212. this.windowBits = -1 * this.windowBits;
  15213. }
  15214. this.strm = new Zstream();
  15215. switch (this.mode) {
  15216. case exports.DEFLATE:
  15217. case exports.GZIP:
  15218. case exports.DEFLATERAW:
  15219. this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);
  15220. break;
  15221. case exports.INFLATE:
  15222. case exports.GUNZIP:
  15223. case exports.INFLATERAW:
  15224. case exports.UNZIP:
  15225. this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);
  15226. break;
  15227. default:
  15228. throw new Error('Unknown mode ' + this.mode);
  15229. }
  15230. if (this.err !== exports.Z_OK) {
  15231. this._error('Init error');
  15232. }
  15233. this.dictionary = dictionary;
  15234. this.write_in_progress = false;
  15235. this.init_done = true;
  15236. };
  15237. Zlib.prototype._setDictionary = function () {
  15238. if (this.dictionary == null) {
  15239. return;
  15240. }
  15241. this.err = exports.Z_OK;
  15242. switch (this.mode) {
  15243. case exports.DEFLATE:
  15244. case exports.DEFLATERAW:
  15245. this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);
  15246. break;
  15247. default:
  15248. break;
  15249. }
  15250. if (this.err !== exports.Z_OK) {
  15251. this._error('Failed to set dictionary');
  15252. }
  15253. };
  15254. Zlib.prototype._reset = function () {
  15255. this.err = exports.Z_OK;
  15256. switch (this.mode) {
  15257. case exports.DEFLATE:
  15258. case exports.DEFLATERAW:
  15259. case exports.GZIP:
  15260. this.err = zlib_deflate.deflateReset(this.strm);
  15261. break;
  15262. case exports.INFLATE:
  15263. case exports.INFLATERAW:
  15264. case exports.GUNZIP:
  15265. this.err = zlib_inflate.inflateReset(this.strm);
  15266. break;
  15267. default:
  15268. break;
  15269. }
  15270. if (this.err !== exports.Z_OK) {
  15271. this._error('Failed to reset stream');
  15272. }
  15273. };
  15274. exports.Zlib = Zlib;
  15275. /***/ }),
  15276. /***/ 42635:
  15277. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  15278. "use strict";
  15279. /* provided dependency */ var process = __webpack_require__(34155);
  15280. var Buffer = (__webpack_require__(48764).Buffer);
  15281. var Transform = (__webpack_require__(42830).Transform);
  15282. var binding = __webpack_require__(74505);
  15283. var util = __webpack_require__(89539);
  15284. var assert = (__webpack_require__(69282).ok);
  15285. var kMaxLength = (__webpack_require__(48764).kMaxLength);
  15286. var kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';
  15287. // zlib doesn't provide these, so kludge them in following the same
  15288. // const naming scheme zlib uses.
  15289. binding.Z_MIN_WINDOWBITS = 8;
  15290. binding.Z_MAX_WINDOWBITS = 15;
  15291. binding.Z_DEFAULT_WINDOWBITS = 15;
  15292. // fewer than 64 bytes per chunk is stupid.
  15293. // technically it could work with as few as 8, but even 64 bytes
  15294. // is absurdly low. Usually a MB or more is best.
  15295. binding.Z_MIN_CHUNK = 64;
  15296. binding.Z_MAX_CHUNK = Infinity;
  15297. binding.Z_DEFAULT_CHUNK = 16 * 1024;
  15298. binding.Z_MIN_MEMLEVEL = 1;
  15299. binding.Z_MAX_MEMLEVEL = 9;
  15300. binding.Z_DEFAULT_MEMLEVEL = 8;
  15301. binding.Z_MIN_LEVEL = -1;
  15302. binding.Z_MAX_LEVEL = 9;
  15303. binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;
  15304. // expose all the zlib constants
  15305. var bkeys = Object.keys(binding);
  15306. for (var bk = 0; bk < bkeys.length; bk++) {
  15307. var bkey = bkeys[bk];
  15308. if (bkey.match(/^Z/)) {
  15309. Object.defineProperty(exports, bkey, {
  15310. enumerable: true, value: binding[bkey], writable: false
  15311. });
  15312. }
  15313. }
  15314. // translation table for return codes.
  15315. var codes = {
  15316. Z_OK: binding.Z_OK,
  15317. Z_STREAM_END: binding.Z_STREAM_END,
  15318. Z_NEED_DICT: binding.Z_NEED_DICT,
  15319. Z_ERRNO: binding.Z_ERRNO,
  15320. Z_STREAM_ERROR: binding.Z_STREAM_ERROR,
  15321. Z_DATA_ERROR: binding.Z_DATA_ERROR,
  15322. Z_MEM_ERROR: binding.Z_MEM_ERROR,
  15323. Z_BUF_ERROR: binding.Z_BUF_ERROR,
  15324. Z_VERSION_ERROR: binding.Z_VERSION_ERROR
  15325. };
  15326. var ckeys = Object.keys(codes);
  15327. for (var ck = 0; ck < ckeys.length; ck++) {
  15328. var ckey = ckeys[ck];
  15329. codes[codes[ckey]] = ckey;
  15330. }
  15331. Object.defineProperty(exports, "codes", ({
  15332. enumerable: true, value: Object.freeze(codes), writable: false
  15333. }));
  15334. exports.Deflate = Deflate;
  15335. exports.Inflate = Inflate;
  15336. exports.Gzip = Gzip;
  15337. exports.Gunzip = Gunzip;
  15338. exports.DeflateRaw = DeflateRaw;
  15339. exports.InflateRaw = InflateRaw;
  15340. exports.Unzip = Unzip;
  15341. exports.createDeflate = function (o) {
  15342. return new Deflate(o);
  15343. };
  15344. exports.createInflate = function (o) {
  15345. return new Inflate(o);
  15346. };
  15347. exports.createDeflateRaw = function (o) {
  15348. return new DeflateRaw(o);
  15349. };
  15350. exports.createInflateRaw = function (o) {
  15351. return new InflateRaw(o);
  15352. };
  15353. exports.createGzip = function (o) {
  15354. return new Gzip(o);
  15355. };
  15356. exports.createGunzip = function (o) {
  15357. return new Gunzip(o);
  15358. };
  15359. exports.createUnzip = function (o) {
  15360. return new Unzip(o);
  15361. };
  15362. // Convenience methods.
  15363. // compress/decompress a string or buffer in one step.
  15364. exports.deflate = function (buffer, opts, callback) {
  15365. if (typeof opts === 'function') {
  15366. callback = opts;
  15367. opts = {};
  15368. }
  15369. return zlibBuffer(new Deflate(opts), buffer, callback);
  15370. };
  15371. exports.deflateSync = function (buffer, opts) {
  15372. return zlibBufferSync(new Deflate(opts), buffer);
  15373. };
  15374. exports.gzip = function (buffer, opts, callback) {
  15375. if (typeof opts === 'function') {
  15376. callback = opts;
  15377. opts = {};
  15378. }
  15379. return zlibBuffer(new Gzip(opts), buffer, callback);
  15380. };
  15381. exports.gzipSync = function (buffer, opts) {
  15382. return zlibBufferSync(new Gzip(opts), buffer);
  15383. };
  15384. exports.deflateRaw = function (buffer, opts, callback) {
  15385. if (typeof opts === 'function') {
  15386. callback = opts;
  15387. opts = {};
  15388. }
  15389. return zlibBuffer(new DeflateRaw(opts), buffer, callback);
  15390. };
  15391. exports.deflateRawSync = function (buffer, opts) {
  15392. return zlibBufferSync(new DeflateRaw(opts), buffer);
  15393. };
  15394. exports.unzip = function (buffer, opts, callback) {
  15395. if (typeof opts === 'function') {
  15396. callback = opts;
  15397. opts = {};
  15398. }
  15399. return zlibBuffer(new Unzip(opts), buffer, callback);
  15400. };
  15401. exports.unzipSync = function (buffer, opts) {
  15402. return zlibBufferSync(new Unzip(opts), buffer);
  15403. };
  15404. exports.inflate = function (buffer, opts, callback) {
  15405. if (typeof opts === 'function') {
  15406. callback = opts;
  15407. opts = {};
  15408. }
  15409. return zlibBuffer(new Inflate(opts), buffer, callback);
  15410. };
  15411. exports.inflateSync = function (buffer, opts) {
  15412. return zlibBufferSync(new Inflate(opts), buffer);
  15413. };
  15414. exports.gunzip = function (buffer, opts, callback) {
  15415. if (typeof opts === 'function') {
  15416. callback = opts;
  15417. opts = {};
  15418. }
  15419. return zlibBuffer(new Gunzip(opts), buffer, callback);
  15420. };
  15421. exports.gunzipSync = function (buffer, opts) {
  15422. return zlibBufferSync(new Gunzip(opts), buffer);
  15423. };
  15424. exports.inflateRaw = function (buffer, opts, callback) {
  15425. if (typeof opts === 'function') {
  15426. callback = opts;
  15427. opts = {};
  15428. }
  15429. return zlibBuffer(new InflateRaw(opts), buffer, callback);
  15430. };
  15431. exports.inflateRawSync = function (buffer, opts) {
  15432. return zlibBufferSync(new InflateRaw(opts), buffer);
  15433. };
  15434. function zlibBuffer(engine, buffer, callback) {
  15435. var buffers = [];
  15436. var nread = 0;
  15437. engine.on('error', onError);
  15438. engine.on('end', onEnd);
  15439. engine.end(buffer);
  15440. flow();
  15441. function flow() {
  15442. var chunk;
  15443. while (null !== (chunk = engine.read())) {
  15444. buffers.push(chunk);
  15445. nread += chunk.length;
  15446. }
  15447. engine.once('readable', flow);
  15448. }
  15449. function onError(err) {
  15450. engine.removeListener('end', onEnd);
  15451. engine.removeListener('readable', flow);
  15452. callback(err);
  15453. }
  15454. function onEnd() {
  15455. var buf;
  15456. var err = null;
  15457. if (nread >= kMaxLength) {
  15458. err = new RangeError(kRangeErrorMessage);
  15459. } else {
  15460. buf = Buffer.concat(buffers, nread);
  15461. }
  15462. buffers = [];
  15463. engine.close();
  15464. callback(err, buf);
  15465. }
  15466. }
  15467. function zlibBufferSync(engine, buffer) {
  15468. if (typeof buffer === 'string') buffer = Buffer.from(buffer);
  15469. if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');
  15470. var flushFlag = engine._finishFlushFlag;
  15471. return engine._processChunk(buffer, flushFlag);
  15472. }
  15473. // generic zlib
  15474. // minimal 2-byte header
  15475. function Deflate(opts) {
  15476. if (!(this instanceof Deflate)) return new Deflate(opts);
  15477. Zlib.call(this, opts, binding.DEFLATE);
  15478. }
  15479. function Inflate(opts) {
  15480. if (!(this instanceof Inflate)) return new Inflate(opts);
  15481. Zlib.call(this, opts, binding.INFLATE);
  15482. }
  15483. // gzip - bigger header, same deflate compression
  15484. function Gzip(opts) {
  15485. if (!(this instanceof Gzip)) return new Gzip(opts);
  15486. Zlib.call(this, opts, binding.GZIP);
  15487. }
  15488. function Gunzip(opts) {
  15489. if (!(this instanceof Gunzip)) return new Gunzip(opts);
  15490. Zlib.call(this, opts, binding.GUNZIP);
  15491. }
  15492. // raw - no header
  15493. function DeflateRaw(opts) {
  15494. if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);
  15495. Zlib.call(this, opts, binding.DEFLATERAW);
  15496. }
  15497. function InflateRaw(opts) {
  15498. if (!(this instanceof InflateRaw)) return new InflateRaw(opts);
  15499. Zlib.call(this, opts, binding.INFLATERAW);
  15500. }
  15501. // auto-detect header.
  15502. function Unzip(opts) {
  15503. if (!(this instanceof Unzip)) return new Unzip(opts);
  15504. Zlib.call(this, opts, binding.UNZIP);
  15505. }
  15506. function isValidFlushFlag(flag) {
  15507. return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;
  15508. }
  15509. // the Zlib class they all inherit from
  15510. // This thing manages the queue of requests, and returns
  15511. // true or false if there is anything in the queue when
  15512. // you call the .write() method.
  15513. function Zlib(opts, mode) {
  15514. var _this = this;
  15515. this._opts = opts = opts || {};
  15516. this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;
  15517. Transform.call(this, opts);
  15518. if (opts.flush && !isValidFlushFlag(opts.flush)) {
  15519. throw new Error('Invalid flush flag: ' + opts.flush);
  15520. }
  15521. if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {
  15522. throw new Error('Invalid flush flag: ' + opts.finishFlush);
  15523. }
  15524. this._flushFlag = opts.flush || binding.Z_NO_FLUSH;
  15525. this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;
  15526. if (opts.chunkSize) {
  15527. if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {
  15528. throw new Error('Invalid chunk size: ' + opts.chunkSize);
  15529. }
  15530. }
  15531. if (opts.windowBits) {
  15532. if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {
  15533. throw new Error('Invalid windowBits: ' + opts.windowBits);
  15534. }
  15535. }
  15536. if (opts.level) {
  15537. if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {
  15538. throw new Error('Invalid compression level: ' + opts.level);
  15539. }
  15540. }
  15541. if (opts.memLevel) {
  15542. if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {
  15543. throw new Error('Invalid memLevel: ' + opts.memLevel);
  15544. }
  15545. }
  15546. if (opts.strategy) {
  15547. if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {
  15548. throw new Error('Invalid strategy: ' + opts.strategy);
  15549. }
  15550. }
  15551. if (opts.dictionary) {
  15552. if (!Buffer.isBuffer(opts.dictionary)) {
  15553. throw new Error('Invalid dictionary: it should be a Buffer instance');
  15554. }
  15555. }
  15556. this._handle = new binding.Zlib(mode);
  15557. var self = this;
  15558. this._hadError = false;
  15559. this._handle.onerror = function (message, errno) {
  15560. // there is no way to cleanly recover.
  15561. // continuing only obscures problems.
  15562. _close(self);
  15563. self._hadError = true;
  15564. var error = new Error(message);
  15565. error.errno = errno;
  15566. error.code = exports.codes[errno];
  15567. self.emit('error', error);
  15568. };
  15569. var level = exports.Z_DEFAULT_COMPRESSION;
  15570. if (typeof opts.level === 'number') level = opts.level;
  15571. var strategy = exports.Z_DEFAULT_STRATEGY;
  15572. if (typeof opts.strategy === 'number') strategy = opts.strategy;
  15573. this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);
  15574. this._buffer = Buffer.allocUnsafe(this._chunkSize);
  15575. this._offset = 0;
  15576. this._level = level;
  15577. this._strategy = strategy;
  15578. this.once('end', this.close);
  15579. Object.defineProperty(this, '_closed', {
  15580. get: function () {
  15581. return !_this._handle;
  15582. },
  15583. configurable: true,
  15584. enumerable: true
  15585. });
  15586. }
  15587. util.inherits(Zlib, Transform);
  15588. Zlib.prototype.params = function (level, strategy, callback) {
  15589. if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {
  15590. throw new RangeError('Invalid compression level: ' + level);
  15591. }
  15592. if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {
  15593. throw new TypeError('Invalid strategy: ' + strategy);
  15594. }
  15595. if (this._level !== level || this._strategy !== strategy) {
  15596. var self = this;
  15597. this.flush(binding.Z_SYNC_FLUSH, function () {
  15598. assert(self._handle, 'zlib binding closed');
  15599. self._handle.params(level, strategy);
  15600. if (!self._hadError) {
  15601. self._level = level;
  15602. self._strategy = strategy;
  15603. if (callback) callback();
  15604. }
  15605. });
  15606. } else {
  15607. process.nextTick(callback);
  15608. }
  15609. };
  15610. Zlib.prototype.reset = function () {
  15611. assert(this._handle, 'zlib binding closed');
  15612. return this._handle.reset();
  15613. };
  15614. // This is the _flush function called by the transform class,
  15615. // internally, when the last chunk has been written.
  15616. Zlib.prototype._flush = function (callback) {
  15617. this._transform(Buffer.alloc(0), '', callback);
  15618. };
  15619. Zlib.prototype.flush = function (kind, callback) {
  15620. var _this2 = this;
  15621. var ws = this._writableState;
  15622. if (typeof kind === 'function' || kind === undefined && !callback) {
  15623. callback = kind;
  15624. kind = binding.Z_FULL_FLUSH;
  15625. }
  15626. if (ws.ended) {
  15627. if (callback) process.nextTick(callback);
  15628. } else if (ws.ending) {
  15629. if (callback) this.once('end', callback);
  15630. } else if (ws.needDrain) {
  15631. if (callback) {
  15632. this.once('drain', function () {
  15633. return _this2.flush(kind, callback);
  15634. });
  15635. }
  15636. } else {
  15637. this._flushFlag = kind;
  15638. this.write(Buffer.alloc(0), '', callback);
  15639. }
  15640. };
  15641. Zlib.prototype.close = function (callback) {
  15642. _close(this, callback);
  15643. process.nextTick(emitCloseNT, this);
  15644. };
  15645. function _close(engine, callback) {
  15646. if (callback) process.nextTick(callback);
  15647. // Caller may invoke .close after a zlib error (which will null _handle).
  15648. if (!engine._handle) return;
  15649. engine._handle.close();
  15650. engine._handle = null;
  15651. }
  15652. function emitCloseNT(self) {
  15653. self.emit('close');
  15654. }
  15655. Zlib.prototype._transform = function (chunk, encoding, cb) {
  15656. var flushFlag;
  15657. var ws = this._writableState;
  15658. var ending = ws.ending || ws.ended;
  15659. var last = ending && (!chunk || ws.length === chunk.length);
  15660. if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));
  15661. if (!this._handle) return cb(new Error('zlib binding closed'));
  15662. // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag
  15663. // (or whatever flag was provided using opts.finishFlush).
  15664. // If it's explicitly flushing at some other time, then we use
  15665. // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression
  15666. // goodness.
  15667. if (last) flushFlag = this._finishFlushFlag;else {
  15668. flushFlag = this._flushFlag;
  15669. // once we've flushed the last of the queue, stop flushing and
  15670. // go back to the normal behavior.
  15671. if (chunk.length >= ws.length) {
  15672. this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;
  15673. }
  15674. }
  15675. this._processChunk(chunk, flushFlag, cb);
  15676. };
  15677. Zlib.prototype._processChunk = function (chunk, flushFlag, cb) {
  15678. var availInBefore = chunk && chunk.length;
  15679. var availOutBefore = this._chunkSize - this._offset;
  15680. var inOff = 0;
  15681. var self = this;
  15682. var async = typeof cb === 'function';
  15683. if (!async) {
  15684. var buffers = [];
  15685. var nread = 0;
  15686. var error;
  15687. this.on('error', function (er) {
  15688. error = er;
  15689. });
  15690. assert(this._handle, 'zlib binding closed');
  15691. do {
  15692. var res = this._handle.writeSync(flushFlag, chunk, // in
  15693. inOff, // in_off
  15694. availInBefore, // in_len
  15695. this._buffer, // out
  15696. this._offset, //out_off
  15697. availOutBefore); // out_len
  15698. } while (!this._hadError && callback(res[0], res[1]));
  15699. if (this._hadError) {
  15700. throw error;
  15701. }
  15702. if (nread >= kMaxLength) {
  15703. _close(this);
  15704. throw new RangeError(kRangeErrorMessage);
  15705. }
  15706. var buf = Buffer.concat(buffers, nread);
  15707. _close(this);
  15708. return buf;
  15709. }
  15710. assert(this._handle, 'zlib binding closed');
  15711. var req = this._handle.write(flushFlag, chunk, // in
  15712. inOff, // in_off
  15713. availInBefore, // in_len
  15714. this._buffer, // out
  15715. this._offset, //out_off
  15716. availOutBefore); // out_len
  15717. req.buffer = chunk;
  15718. req.callback = callback;
  15719. function callback(availInAfter, availOutAfter) {
  15720. // When the callback is used in an async write, the callback's
  15721. // context is the `req` object that was created. The req object
  15722. // is === this._handle, and that's why it's important to null
  15723. // out the values after they are done being used. `this._handle`
  15724. // can stay in memory longer than the callback and buffer are needed.
  15725. if (this) {
  15726. this.buffer = null;
  15727. this.callback = null;
  15728. }
  15729. if (self._hadError) return;
  15730. var have = availOutBefore - availOutAfter;
  15731. assert(have >= 0, 'have should not go down');
  15732. if (have > 0) {
  15733. var out = self._buffer.slice(self._offset, self._offset + have);
  15734. self._offset += have;
  15735. // serve some output to the consumer.
  15736. if (async) {
  15737. self.push(out);
  15738. } else {
  15739. buffers.push(out);
  15740. nread += out.length;
  15741. }
  15742. }
  15743. // exhausted the output buffer, or used all the input create a new one.
  15744. if (availOutAfter === 0 || self._offset >= self._chunkSize) {
  15745. availOutBefore = self._chunkSize;
  15746. self._offset = 0;
  15747. self._buffer = Buffer.allocUnsafe(self._chunkSize);
  15748. }
  15749. if (availOutAfter === 0) {
  15750. // Not actually done. Need to reprocess.
  15751. // Also, update the availInBefore to the availInAfter value,
  15752. // so that if we have to hit it a third (fourth, etc.) time,
  15753. // it'll have the correct byte counts.
  15754. inOff += availInBefore - availInAfter;
  15755. availInBefore = availInAfter;
  15756. if (!async) return true;
  15757. var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);
  15758. newReq.callback = callback; // this same function
  15759. newReq.buffer = chunk;
  15760. return;
  15761. }
  15762. if (!async) return false;
  15763. // finished with the chunk.
  15764. cb();
  15765. }
  15766. };
  15767. util.inherits(Deflate, Zlib);
  15768. util.inherits(Inflate, Zlib);
  15769. util.inherits(Gzip, Zlib);
  15770. util.inherits(Gunzip, Zlib);
  15771. util.inherits(DeflateRaw, Zlib);
  15772. util.inherits(InflateRaw, Zlib);
  15773. util.inherits(Unzip, Zlib);
  15774. /***/ }),
  15775. /***/ 6907:
  15776. /***/ ((__unused_webpack_module, exports) => {
  15777. "use strict";
  15778. var TYPED_OK = (typeof Uint8Array !== 'undefined') &&
  15779. (typeof Uint16Array !== 'undefined') &&
  15780. (typeof Int32Array !== 'undefined');
  15781. function _has(obj, key) {
  15782. return Object.prototype.hasOwnProperty.call(obj, key);
  15783. }
  15784. exports.assign = function (obj /*from1, from2, from3, ...*/) {
  15785. var sources = Array.prototype.slice.call(arguments, 1);
  15786. while (sources.length) {
  15787. var source = sources.shift();
  15788. if (!source) { continue; }
  15789. if (typeof source !== 'object') {
  15790. throw new TypeError(source + 'must be non-object');
  15791. }
  15792. for (var p in source) {
  15793. if (_has(source, p)) {
  15794. obj[p] = source[p];
  15795. }
  15796. }
  15797. }
  15798. return obj;
  15799. };
  15800. // reduce buffer size, avoiding mem copy
  15801. exports.shrinkBuf = function (buf, size) {
  15802. if (buf.length === size) { return buf; }
  15803. if (buf.subarray) { return buf.subarray(0, size); }
  15804. buf.length = size;
  15805. return buf;
  15806. };
  15807. var fnTyped = {
  15808. arraySet: function (dest, src, src_offs, len, dest_offs) {
  15809. if (src.subarray && dest.subarray) {
  15810. dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
  15811. return;
  15812. }
  15813. // Fallback to ordinary array
  15814. for (var i = 0; i < len; i++) {
  15815. dest[dest_offs + i] = src[src_offs + i];
  15816. }
  15817. },
  15818. // Join array of chunks to single array.
  15819. flattenChunks: function (chunks) {
  15820. var i, l, len, pos, chunk, result;
  15821. // calculate data length
  15822. len = 0;
  15823. for (i = 0, l = chunks.length; i < l; i++) {
  15824. len += chunks[i].length;
  15825. }
  15826. // join chunks
  15827. result = new Uint8Array(len);
  15828. pos = 0;
  15829. for (i = 0, l = chunks.length; i < l; i++) {
  15830. chunk = chunks[i];
  15831. result.set(chunk, pos);
  15832. pos += chunk.length;
  15833. }
  15834. return result;
  15835. }
  15836. };
  15837. var fnUntyped = {
  15838. arraySet: function (dest, src, src_offs, len, dest_offs) {
  15839. for (var i = 0; i < len; i++) {
  15840. dest[dest_offs + i] = src[src_offs + i];
  15841. }
  15842. },
  15843. // Join array of chunks to single array.
  15844. flattenChunks: function (chunks) {
  15845. return [].concat.apply([], chunks);
  15846. }
  15847. };
  15848. // Enable/Disable typed arrays use, for testing
  15849. //
  15850. exports.setTyped = function (on) {
  15851. if (on) {
  15852. exports.Buf8 = Uint8Array;
  15853. exports.Buf16 = Uint16Array;
  15854. exports.Buf32 = Int32Array;
  15855. exports.assign(exports, fnTyped);
  15856. } else {
  15857. exports.Buf8 = Array;
  15858. exports.Buf16 = Array;
  15859. exports.Buf32 = Array;
  15860. exports.assign(exports, fnUntyped);
  15861. }
  15862. };
  15863. exports.setTyped(TYPED_OK);
  15864. /***/ }),
  15865. /***/ 47575:
  15866. /***/ ((module) => {
  15867. "use strict";
  15868. // Note: adler32 takes 12% for level 0 and 2% for level 6.
  15869. // It isn't worth it to make additional optimizations as in original.
  15870. // Small size is preferable.
  15871. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  15872. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  15873. //
  15874. // This software is provided 'as-is', without any express or implied
  15875. // warranty. In no event will the authors be held liable for any damages
  15876. // arising from the use of this software.
  15877. //
  15878. // Permission is granted to anyone to use this software for any purpose,
  15879. // including commercial applications, and to alter it and redistribute it
  15880. // freely, subject to the following restrictions:
  15881. //
  15882. // 1. The origin of this software must not be misrepresented; you must not
  15883. // claim that you wrote the original software. If you use this software
  15884. // in a product, an acknowledgment in the product documentation would be
  15885. // appreciated but is not required.
  15886. // 2. Altered source versions must be plainly marked as such, and must not be
  15887. // misrepresented as being the original software.
  15888. // 3. This notice may not be removed or altered from any source distribution.
  15889. function adler32(adler, buf, len, pos) {
  15890. var s1 = (adler & 0xffff) |0,
  15891. s2 = ((adler >>> 16) & 0xffff) |0,
  15892. n = 0;
  15893. while (len !== 0) {
  15894. // Set limit ~ twice less than 5552, to keep
  15895. // s2 in 31-bits, because we force signed ints.
  15896. // in other case %= will fail.
  15897. n = len > 2000 ? 2000 : len;
  15898. len -= n;
  15899. do {
  15900. s1 = (s1 + buf[pos++]) |0;
  15901. s2 = (s2 + s1) |0;
  15902. } while (--n);
  15903. s1 %= 65521;
  15904. s2 %= 65521;
  15905. }
  15906. return (s1 | (s2 << 16)) |0;
  15907. }
  15908. module.exports = adler32;
  15909. /***/ }),
  15910. /***/ 77162:
  15911. /***/ ((module) => {
  15912. "use strict";
  15913. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  15914. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  15915. //
  15916. // This software is provided 'as-is', without any express or implied
  15917. // warranty. In no event will the authors be held liable for any damages
  15918. // arising from the use of this software.
  15919. //
  15920. // Permission is granted to anyone to use this software for any purpose,
  15921. // including commercial applications, and to alter it and redistribute it
  15922. // freely, subject to the following restrictions:
  15923. //
  15924. // 1. The origin of this software must not be misrepresented; you must not
  15925. // claim that you wrote the original software. If you use this software
  15926. // in a product, an acknowledgment in the product documentation would be
  15927. // appreciated but is not required.
  15928. // 2. Altered source versions must be plainly marked as such, and must not be
  15929. // misrepresented as being the original software.
  15930. // 3. This notice may not be removed or altered from any source distribution.
  15931. module.exports = {
  15932. /* Allowed flush values; see deflate() and inflate() below for details */
  15933. Z_NO_FLUSH: 0,
  15934. Z_PARTIAL_FLUSH: 1,
  15935. Z_SYNC_FLUSH: 2,
  15936. Z_FULL_FLUSH: 3,
  15937. Z_FINISH: 4,
  15938. Z_BLOCK: 5,
  15939. Z_TREES: 6,
  15940. /* Return codes for the compression/decompression functions. Negative values
  15941. * are errors, positive values are used for special but normal events.
  15942. */
  15943. Z_OK: 0,
  15944. Z_STREAM_END: 1,
  15945. Z_NEED_DICT: 2,
  15946. Z_ERRNO: -1,
  15947. Z_STREAM_ERROR: -2,
  15948. Z_DATA_ERROR: -3,
  15949. //Z_MEM_ERROR: -4,
  15950. Z_BUF_ERROR: -5,
  15951. //Z_VERSION_ERROR: -6,
  15952. /* compression levels */
  15953. Z_NO_COMPRESSION: 0,
  15954. Z_BEST_SPEED: 1,
  15955. Z_BEST_COMPRESSION: 9,
  15956. Z_DEFAULT_COMPRESSION: -1,
  15957. Z_FILTERED: 1,
  15958. Z_HUFFMAN_ONLY: 2,
  15959. Z_RLE: 3,
  15960. Z_FIXED: 4,
  15961. Z_DEFAULT_STRATEGY: 0,
  15962. /* Possible values of the data_type field (though see inflate()) */
  15963. Z_BINARY: 0,
  15964. Z_TEXT: 1,
  15965. //Z_ASCII: 1, // = Z_TEXT (deprecated)
  15966. Z_UNKNOWN: 2,
  15967. /* The deflate compression method */
  15968. Z_DEFLATED: 8
  15969. //Z_NULL: null // Use -1 or null inline, depending on var type
  15970. };
  15971. /***/ }),
  15972. /***/ 13415:
  15973. /***/ ((module) => {
  15974. "use strict";
  15975. // Note: we can't get significant speed boost here.
  15976. // So write code to minimize size - no pregenerated tables
  15977. // and array tools dependencies.
  15978. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  15979. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  15980. //
  15981. // This software is provided 'as-is', without any express or implied
  15982. // warranty. In no event will the authors be held liable for any damages
  15983. // arising from the use of this software.
  15984. //
  15985. // Permission is granted to anyone to use this software for any purpose,
  15986. // including commercial applications, and to alter it and redistribute it
  15987. // freely, subject to the following restrictions:
  15988. //
  15989. // 1. The origin of this software must not be misrepresented; you must not
  15990. // claim that you wrote the original software. If you use this software
  15991. // in a product, an acknowledgment in the product documentation would be
  15992. // appreciated but is not required.
  15993. // 2. Altered source versions must be plainly marked as such, and must not be
  15994. // misrepresented as being the original software.
  15995. // 3. This notice may not be removed or altered from any source distribution.
  15996. // Use ordinary array, since untyped makes no boost here
  15997. function makeTable() {
  15998. var c, table = [];
  15999. for (var n = 0; n < 256; n++) {
  16000. c = n;
  16001. for (var k = 0; k < 8; k++) {
  16002. c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
  16003. }
  16004. table[n] = c;
  16005. }
  16006. return table;
  16007. }
  16008. // Create table on load. Just 255 signed longs. Not a problem.
  16009. var crcTable = makeTable();
  16010. function crc32(crc, buf, len, pos) {
  16011. var t = crcTable,
  16012. end = pos + len;
  16013. crc ^= -1;
  16014. for (var i = pos; i < end; i++) {
  16015. crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
  16016. }
  16017. return (crc ^ (-1)); // >>> 0;
  16018. }
  16019. module.exports = crc32;
  16020. /***/ }),
  16021. /***/ 42233:
  16022. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  16023. "use strict";
  16024. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  16025. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  16026. //
  16027. // This software is provided 'as-is', without any express or implied
  16028. // warranty. In no event will the authors be held liable for any damages
  16029. // arising from the use of this software.
  16030. //
  16031. // Permission is granted to anyone to use this software for any purpose,
  16032. // including commercial applications, and to alter it and redistribute it
  16033. // freely, subject to the following restrictions:
  16034. //
  16035. // 1. The origin of this software must not be misrepresented; you must not
  16036. // claim that you wrote the original software. If you use this software
  16037. // in a product, an acknowledgment in the product documentation would be
  16038. // appreciated but is not required.
  16039. // 2. Altered source versions must be plainly marked as such, and must not be
  16040. // misrepresented as being the original software.
  16041. // 3. This notice may not be removed or altered from any source distribution.
  16042. var utils = __webpack_require__(6907);
  16043. var trees = __webpack_require__(81339);
  16044. var adler32 = __webpack_require__(47575);
  16045. var crc32 = __webpack_require__(13415);
  16046. var msg = __webpack_require__(89364);
  16047. /* Public constants ==========================================================*/
  16048. /* ===========================================================================*/
  16049. /* Allowed flush values; see deflate() and inflate() below for details */
  16050. var Z_NO_FLUSH = 0;
  16051. var Z_PARTIAL_FLUSH = 1;
  16052. //var Z_SYNC_FLUSH = 2;
  16053. var Z_FULL_FLUSH = 3;
  16054. var Z_FINISH = 4;
  16055. var Z_BLOCK = 5;
  16056. //var Z_TREES = 6;
  16057. /* Return codes for the compression/decompression functions. Negative values
  16058. * are errors, positive values are used for special but normal events.
  16059. */
  16060. var Z_OK = 0;
  16061. var Z_STREAM_END = 1;
  16062. //var Z_NEED_DICT = 2;
  16063. //var Z_ERRNO = -1;
  16064. var Z_STREAM_ERROR = -2;
  16065. var Z_DATA_ERROR = -3;
  16066. //var Z_MEM_ERROR = -4;
  16067. var Z_BUF_ERROR = -5;
  16068. //var Z_VERSION_ERROR = -6;
  16069. /* compression levels */
  16070. //var Z_NO_COMPRESSION = 0;
  16071. //var Z_BEST_SPEED = 1;
  16072. //var Z_BEST_COMPRESSION = 9;
  16073. var Z_DEFAULT_COMPRESSION = -1;
  16074. var Z_FILTERED = 1;
  16075. var Z_HUFFMAN_ONLY = 2;
  16076. var Z_RLE = 3;
  16077. var Z_FIXED = 4;
  16078. var Z_DEFAULT_STRATEGY = 0;
  16079. /* Possible values of the data_type field (though see inflate()) */
  16080. //var Z_BINARY = 0;
  16081. //var Z_TEXT = 1;
  16082. //var Z_ASCII = 1; // = Z_TEXT
  16083. var Z_UNKNOWN = 2;
  16084. /* The deflate compression method */
  16085. var Z_DEFLATED = 8;
  16086. /*============================================================================*/
  16087. var MAX_MEM_LEVEL = 9;
  16088. /* Maximum value for memLevel in deflateInit2 */
  16089. var MAX_WBITS = 15;
  16090. /* 32K LZ77 window */
  16091. var DEF_MEM_LEVEL = 8;
  16092. var LENGTH_CODES = 29;
  16093. /* number of length codes, not counting the special END_BLOCK code */
  16094. var LITERALS = 256;
  16095. /* number of literal bytes 0..255 */
  16096. var L_CODES = LITERALS + 1 + LENGTH_CODES;
  16097. /* number of Literal or Length codes, including the END_BLOCK code */
  16098. var D_CODES = 30;
  16099. /* number of distance codes */
  16100. var BL_CODES = 19;
  16101. /* number of codes used to transfer the bit lengths */
  16102. var HEAP_SIZE = 2 * L_CODES + 1;
  16103. /* maximum heap size */
  16104. var MAX_BITS = 15;
  16105. /* All codes must not exceed MAX_BITS bits */
  16106. var MIN_MATCH = 3;
  16107. var MAX_MATCH = 258;
  16108. var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
  16109. var PRESET_DICT = 0x20;
  16110. var INIT_STATE = 42;
  16111. var EXTRA_STATE = 69;
  16112. var NAME_STATE = 73;
  16113. var COMMENT_STATE = 91;
  16114. var HCRC_STATE = 103;
  16115. var BUSY_STATE = 113;
  16116. var FINISH_STATE = 666;
  16117. var BS_NEED_MORE = 1; /* block not completed, need more input or more output */
  16118. var BS_BLOCK_DONE = 2; /* block flush performed */
  16119. var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
  16120. var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */
  16121. var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
  16122. function err(strm, errorCode) {
  16123. strm.msg = msg[errorCode];
  16124. return errorCode;
  16125. }
  16126. function rank(f) {
  16127. return ((f) << 1) - ((f) > 4 ? 9 : 0);
  16128. }
  16129. function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
  16130. /* =========================================================================
  16131. * Flush as much pending output as possible. All deflate() output goes
  16132. * through this function so some applications may wish to modify it
  16133. * to avoid allocating a large strm->output buffer and copying into it.
  16134. * (See also read_buf()).
  16135. */
  16136. function flush_pending(strm) {
  16137. var s = strm.state;
  16138. //_tr_flush_bits(s);
  16139. var len = s.pending;
  16140. if (len > strm.avail_out) {
  16141. len = strm.avail_out;
  16142. }
  16143. if (len === 0) { return; }
  16144. utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
  16145. strm.next_out += len;
  16146. s.pending_out += len;
  16147. strm.total_out += len;
  16148. strm.avail_out -= len;
  16149. s.pending -= len;
  16150. if (s.pending === 0) {
  16151. s.pending_out = 0;
  16152. }
  16153. }
  16154. function flush_block_only(s, last) {
  16155. trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
  16156. s.block_start = s.strstart;
  16157. flush_pending(s.strm);
  16158. }
  16159. function put_byte(s, b) {
  16160. s.pending_buf[s.pending++] = b;
  16161. }
  16162. /* =========================================================================
  16163. * Put a short in the pending buffer. The 16-bit value is put in MSB order.
  16164. * IN assertion: the stream state is correct and there is enough room in
  16165. * pending_buf.
  16166. */
  16167. function putShortMSB(s, b) {
  16168. // put_byte(s, (Byte)(b >> 8));
  16169. // put_byte(s, (Byte)(b & 0xff));
  16170. s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
  16171. s.pending_buf[s.pending++] = b & 0xff;
  16172. }
  16173. /* ===========================================================================
  16174. * Read a new buffer from the current input stream, update the adler32
  16175. * and total number of bytes read. All deflate() input goes through
  16176. * this function so some applications may wish to modify it to avoid
  16177. * allocating a large strm->input buffer and copying from it.
  16178. * (See also flush_pending()).
  16179. */
  16180. function read_buf(strm, buf, start, size) {
  16181. var len = strm.avail_in;
  16182. if (len > size) { len = size; }
  16183. if (len === 0) { return 0; }
  16184. strm.avail_in -= len;
  16185. // zmemcpy(buf, strm->next_in, len);
  16186. utils.arraySet(buf, strm.input, strm.next_in, len, start);
  16187. if (strm.state.wrap === 1) {
  16188. strm.adler = adler32(strm.adler, buf, len, start);
  16189. }
  16190. else if (strm.state.wrap === 2) {
  16191. strm.adler = crc32(strm.adler, buf, len, start);
  16192. }
  16193. strm.next_in += len;
  16194. strm.total_in += len;
  16195. return len;
  16196. }
  16197. /* ===========================================================================
  16198. * Set match_start to the longest match starting at the given string and
  16199. * return its length. Matches shorter or equal to prev_length are discarded,
  16200. * in which case the result is equal to prev_length and match_start is
  16201. * garbage.
  16202. * IN assertions: cur_match is the head of the hash chain for the current
  16203. * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
  16204. * OUT assertion: the match length is not greater than s->lookahead.
  16205. */
  16206. function longest_match(s, cur_match) {
  16207. var chain_length = s.max_chain_length; /* max hash chain length */
  16208. var scan = s.strstart; /* current string */
  16209. var match; /* matched string */
  16210. var len; /* length of current match */
  16211. var best_len = s.prev_length; /* best match length so far */
  16212. var nice_match = s.nice_match; /* stop if match long enough */
  16213. var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
  16214. s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
  16215. var _win = s.window; // shortcut
  16216. var wmask = s.w_mask;
  16217. var prev = s.prev;
  16218. /* Stop when cur_match becomes <= limit. To simplify the code,
  16219. * we prevent matches with the string of window index 0.
  16220. */
  16221. var strend = s.strstart + MAX_MATCH;
  16222. var scan_end1 = _win[scan + best_len - 1];
  16223. var scan_end = _win[scan + best_len];
  16224. /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
  16225. * It is easy to get rid of this optimization if necessary.
  16226. */
  16227. // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
  16228. /* Do not waste too much time if we already have a good match: */
  16229. if (s.prev_length >= s.good_match) {
  16230. chain_length >>= 2;
  16231. }
  16232. /* Do not look for matches beyond the end of the input. This is necessary
  16233. * to make deflate deterministic.
  16234. */
  16235. if (nice_match > s.lookahead) { nice_match = s.lookahead; }
  16236. // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
  16237. do {
  16238. // Assert(cur_match < s->strstart, "no future");
  16239. match = cur_match;
  16240. /* Skip to next match if the match length cannot increase
  16241. * or if the match length is less than 2. Note that the checks below
  16242. * for insufficient lookahead only occur occasionally for performance
  16243. * reasons. Therefore uninitialized memory will be accessed, and
  16244. * conditional jumps will be made that depend on those values.
  16245. * However the length of the match is limited to the lookahead, so
  16246. * the output of deflate is not affected by the uninitialized values.
  16247. */
  16248. if (_win[match + best_len] !== scan_end ||
  16249. _win[match + best_len - 1] !== scan_end1 ||
  16250. _win[match] !== _win[scan] ||
  16251. _win[++match] !== _win[scan + 1]) {
  16252. continue;
  16253. }
  16254. /* The check at best_len-1 can be removed because it will be made
  16255. * again later. (This heuristic is not always a win.)
  16256. * It is not necessary to compare scan[2] and match[2] since they
  16257. * are always equal when the other bytes match, given that
  16258. * the hash keys are equal and that HASH_BITS >= 8.
  16259. */
  16260. scan += 2;
  16261. match++;
  16262. // Assert(*scan == *match, "match[2]?");
  16263. /* We check for insufficient lookahead only every 8th comparison;
  16264. * the 256th check will be made at strstart+258.
  16265. */
  16266. do {
  16267. /*jshint noempty:false*/
  16268. } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
  16269. _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
  16270. _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
  16271. _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
  16272. scan < strend);
  16273. // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
  16274. len = MAX_MATCH - (strend - scan);
  16275. scan = strend - MAX_MATCH;
  16276. if (len > best_len) {
  16277. s.match_start = cur_match;
  16278. best_len = len;
  16279. if (len >= nice_match) {
  16280. break;
  16281. }
  16282. scan_end1 = _win[scan + best_len - 1];
  16283. scan_end = _win[scan + best_len];
  16284. }
  16285. } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
  16286. if (best_len <= s.lookahead) {
  16287. return best_len;
  16288. }
  16289. return s.lookahead;
  16290. }
  16291. /* ===========================================================================
  16292. * Fill the window when the lookahead becomes insufficient.
  16293. * Updates strstart and lookahead.
  16294. *
  16295. * IN assertion: lookahead < MIN_LOOKAHEAD
  16296. * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
  16297. * At least one byte has been read, or avail_in == 0; reads are
  16298. * performed for at least two bytes (required for the zip translate_eol
  16299. * option -- not supported here).
  16300. */
  16301. function fill_window(s) {
  16302. var _w_size = s.w_size;
  16303. var p, n, m, more, str;
  16304. //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
  16305. do {
  16306. more = s.window_size - s.lookahead - s.strstart;
  16307. // JS ints have 32 bit, block below not needed
  16308. /* Deal with !@#$% 64K limit: */
  16309. //if (sizeof(int) <= 2) {
  16310. // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
  16311. // more = wsize;
  16312. //
  16313. // } else if (more == (unsigned)(-1)) {
  16314. // /* Very unlikely, but possible on 16 bit machine if
  16315. // * strstart == 0 && lookahead == 1 (input done a byte at time)
  16316. // */
  16317. // more--;
  16318. // }
  16319. //}
  16320. /* If the window is almost full and there is insufficient lookahead,
  16321. * move the upper half to the lower one to make room in the upper half.
  16322. */
  16323. if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
  16324. utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
  16325. s.match_start -= _w_size;
  16326. s.strstart -= _w_size;
  16327. /* we now have strstart >= MAX_DIST */
  16328. s.block_start -= _w_size;
  16329. /* Slide the hash table (could be avoided with 32 bit values
  16330. at the expense of memory usage). We slide even when level == 0
  16331. to keep the hash table consistent if we switch back to level > 0
  16332. later. (Using level 0 permanently is not an optimal usage of
  16333. zlib, so we don't care about this pathological case.)
  16334. */
  16335. n = s.hash_size;
  16336. p = n;
  16337. do {
  16338. m = s.head[--p];
  16339. s.head[p] = (m >= _w_size ? m - _w_size : 0);
  16340. } while (--n);
  16341. n = _w_size;
  16342. p = n;
  16343. do {
  16344. m = s.prev[--p];
  16345. s.prev[p] = (m >= _w_size ? m - _w_size : 0);
  16346. /* If n is not on any hash chain, prev[n] is garbage but
  16347. * its value will never be used.
  16348. */
  16349. } while (--n);
  16350. more += _w_size;
  16351. }
  16352. if (s.strm.avail_in === 0) {
  16353. break;
  16354. }
  16355. /* If there was no sliding:
  16356. * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
  16357. * more == window_size - lookahead - strstart
  16358. * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
  16359. * => more >= window_size - 2*WSIZE + 2
  16360. * In the BIG_MEM or MMAP case (not yet supported),
  16361. * window_size == input_size + MIN_LOOKAHEAD &&
  16362. * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
  16363. * Otherwise, window_size == 2*WSIZE so more >= 2.
  16364. * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
  16365. */
  16366. //Assert(more >= 2, "more < 2");
  16367. n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
  16368. s.lookahead += n;
  16369. /* Initialize the hash value now that we have some input: */
  16370. if (s.lookahead + s.insert >= MIN_MATCH) {
  16371. str = s.strstart - s.insert;
  16372. s.ins_h = s.window[str];
  16373. /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
  16374. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
  16375. //#if MIN_MATCH != 3
  16376. // Call update_hash() MIN_MATCH-3 more times
  16377. //#endif
  16378. while (s.insert) {
  16379. /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
  16380. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
  16381. s.prev[str & s.w_mask] = s.head[s.ins_h];
  16382. s.head[s.ins_h] = str;
  16383. str++;
  16384. s.insert--;
  16385. if (s.lookahead + s.insert < MIN_MATCH) {
  16386. break;
  16387. }
  16388. }
  16389. }
  16390. /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
  16391. * but this is not important since only literal bytes will be emitted.
  16392. */
  16393. } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
  16394. /* If the WIN_INIT bytes after the end of the current data have never been
  16395. * written, then zero those bytes in order to avoid memory check reports of
  16396. * the use of uninitialized (or uninitialised as Julian writes) bytes by
  16397. * the longest match routines. Update the high water mark for the next
  16398. * time through here. WIN_INIT is set to MAX_MATCH since the longest match
  16399. * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
  16400. */
  16401. // if (s.high_water < s.window_size) {
  16402. // var curr = s.strstart + s.lookahead;
  16403. // var init = 0;
  16404. //
  16405. // if (s.high_water < curr) {
  16406. // /* Previous high water mark below current data -- zero WIN_INIT
  16407. // * bytes or up to end of window, whichever is less.
  16408. // */
  16409. // init = s.window_size - curr;
  16410. // if (init > WIN_INIT)
  16411. // init = WIN_INIT;
  16412. // zmemzero(s->window + curr, (unsigned)init);
  16413. // s->high_water = curr + init;
  16414. // }
  16415. // else if (s->high_water < (ulg)curr + WIN_INIT) {
  16416. // /* High water mark at or above current data, but below current data
  16417. // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
  16418. // * to end of window, whichever is less.
  16419. // */
  16420. // init = (ulg)curr + WIN_INIT - s->high_water;
  16421. // if (init > s->window_size - s->high_water)
  16422. // init = s->window_size - s->high_water;
  16423. // zmemzero(s->window + s->high_water, (unsigned)init);
  16424. // s->high_water += init;
  16425. // }
  16426. // }
  16427. //
  16428. // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
  16429. // "not enough room for search");
  16430. }
  16431. /* ===========================================================================
  16432. * Copy without compression as much as possible from the input stream, return
  16433. * the current block state.
  16434. * This function does not insert new strings in the dictionary since
  16435. * uncompressible data is probably not useful. This function is used
  16436. * only for the level=0 compression option.
  16437. * NOTE: this function should be optimized to avoid extra copying from
  16438. * window to pending_buf.
  16439. */
  16440. function deflate_stored(s, flush) {
  16441. /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
  16442. * to pending_buf_size, and each stored block has a 5 byte header:
  16443. */
  16444. var max_block_size = 0xffff;
  16445. if (max_block_size > s.pending_buf_size - 5) {
  16446. max_block_size = s.pending_buf_size - 5;
  16447. }
  16448. /* Copy as much as possible from input to output: */
  16449. for (;;) {
  16450. /* Fill the window as much as possible: */
  16451. if (s.lookahead <= 1) {
  16452. //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
  16453. // s->block_start >= (long)s->w_size, "slide too late");
  16454. // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
  16455. // s.block_start >= s.w_size)) {
  16456. // throw new Error("slide too late");
  16457. // }
  16458. fill_window(s);
  16459. if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
  16460. return BS_NEED_MORE;
  16461. }
  16462. if (s.lookahead === 0) {
  16463. break;
  16464. }
  16465. /* flush the current block */
  16466. }
  16467. //Assert(s->block_start >= 0L, "block gone");
  16468. // if (s.block_start < 0) throw new Error("block gone");
  16469. s.strstart += s.lookahead;
  16470. s.lookahead = 0;
  16471. /* Emit a stored block if pending_buf will be full: */
  16472. var max_start = s.block_start + max_block_size;
  16473. if (s.strstart === 0 || s.strstart >= max_start) {
  16474. /* strstart == 0 is possible when wraparound on 16-bit machine */
  16475. s.lookahead = s.strstart - max_start;
  16476. s.strstart = max_start;
  16477. /*** FLUSH_BLOCK(s, 0); ***/
  16478. flush_block_only(s, false);
  16479. if (s.strm.avail_out === 0) {
  16480. return BS_NEED_MORE;
  16481. }
  16482. /***/
  16483. }
  16484. /* Flush if we may have to slide, otherwise block_start may become
  16485. * negative and the data will be gone:
  16486. */
  16487. if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
  16488. /*** FLUSH_BLOCK(s, 0); ***/
  16489. flush_block_only(s, false);
  16490. if (s.strm.avail_out === 0) {
  16491. return BS_NEED_MORE;
  16492. }
  16493. /***/
  16494. }
  16495. }
  16496. s.insert = 0;
  16497. if (flush === Z_FINISH) {
  16498. /*** FLUSH_BLOCK(s, 1); ***/
  16499. flush_block_only(s, true);
  16500. if (s.strm.avail_out === 0) {
  16501. return BS_FINISH_STARTED;
  16502. }
  16503. /***/
  16504. return BS_FINISH_DONE;
  16505. }
  16506. if (s.strstart > s.block_start) {
  16507. /*** FLUSH_BLOCK(s, 0); ***/
  16508. flush_block_only(s, false);
  16509. if (s.strm.avail_out === 0) {
  16510. return BS_NEED_MORE;
  16511. }
  16512. /***/
  16513. }
  16514. return BS_NEED_MORE;
  16515. }
  16516. /* ===========================================================================
  16517. * Compress as much as possible from the input stream, return the current
  16518. * block state.
  16519. * This function does not perform lazy evaluation of matches and inserts
  16520. * new strings in the dictionary only for unmatched strings or for short
  16521. * matches. It is used only for the fast compression options.
  16522. */
  16523. function deflate_fast(s, flush) {
  16524. var hash_head; /* head of the hash chain */
  16525. var bflush; /* set if current block must be flushed */
  16526. for (;;) {
  16527. /* Make sure that we always have enough lookahead, except
  16528. * at the end of the input file. We need MAX_MATCH bytes
  16529. * for the next match, plus MIN_MATCH bytes to insert the
  16530. * string following the next match.
  16531. */
  16532. if (s.lookahead < MIN_LOOKAHEAD) {
  16533. fill_window(s);
  16534. if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
  16535. return BS_NEED_MORE;
  16536. }
  16537. if (s.lookahead === 0) {
  16538. break; /* flush the current block */
  16539. }
  16540. }
  16541. /* Insert the string window[strstart .. strstart+2] in the
  16542. * dictionary, and set hash_head to the head of the hash chain:
  16543. */
  16544. hash_head = 0/*NIL*/;
  16545. if (s.lookahead >= MIN_MATCH) {
  16546. /*** INSERT_STRING(s, s.strstart, hash_head); ***/
  16547. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
  16548. hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
  16549. s.head[s.ins_h] = s.strstart;
  16550. /***/
  16551. }
  16552. /* Find the longest match, discarding those <= prev_length.
  16553. * At this point we have always match_length < MIN_MATCH
  16554. */
  16555. if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
  16556. /* To simplify the code, we prevent matches with the string
  16557. * of window index 0 (in particular we have to avoid a match
  16558. * of the string with itself at the start of the input file).
  16559. */
  16560. s.match_length = longest_match(s, hash_head);
  16561. /* longest_match() sets match_start */
  16562. }
  16563. if (s.match_length >= MIN_MATCH) {
  16564. // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
  16565. /*** _tr_tally_dist(s, s.strstart - s.match_start,
  16566. s.match_length - MIN_MATCH, bflush); ***/
  16567. bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
  16568. s.lookahead -= s.match_length;
  16569. /* Insert new strings in the hash table only if the match length
  16570. * is not too large. This saves time but degrades compression.
  16571. */
  16572. if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
  16573. s.match_length--; /* string at strstart already in table */
  16574. do {
  16575. s.strstart++;
  16576. /*** INSERT_STRING(s, s.strstart, hash_head); ***/
  16577. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
  16578. hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
  16579. s.head[s.ins_h] = s.strstart;
  16580. /***/
  16581. /* strstart never exceeds WSIZE-MAX_MATCH, so there are
  16582. * always MIN_MATCH bytes ahead.
  16583. */
  16584. } while (--s.match_length !== 0);
  16585. s.strstart++;
  16586. } else
  16587. {
  16588. s.strstart += s.match_length;
  16589. s.match_length = 0;
  16590. s.ins_h = s.window[s.strstart];
  16591. /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
  16592. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
  16593. //#if MIN_MATCH != 3
  16594. // Call UPDATE_HASH() MIN_MATCH-3 more times
  16595. //#endif
  16596. /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
  16597. * matter since it will be recomputed at next deflate call.
  16598. */
  16599. }
  16600. } else {
  16601. /* No match, output a literal byte */
  16602. //Tracevv((stderr,"%c", s.window[s.strstart]));
  16603. /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
  16604. bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
  16605. s.lookahead--;
  16606. s.strstart++;
  16607. }
  16608. if (bflush) {
  16609. /*** FLUSH_BLOCK(s, 0); ***/
  16610. flush_block_only(s, false);
  16611. if (s.strm.avail_out === 0) {
  16612. return BS_NEED_MORE;
  16613. }
  16614. /***/
  16615. }
  16616. }
  16617. s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);
  16618. if (flush === Z_FINISH) {
  16619. /*** FLUSH_BLOCK(s, 1); ***/
  16620. flush_block_only(s, true);
  16621. if (s.strm.avail_out === 0) {
  16622. return BS_FINISH_STARTED;
  16623. }
  16624. /***/
  16625. return BS_FINISH_DONE;
  16626. }
  16627. if (s.last_lit) {
  16628. /*** FLUSH_BLOCK(s, 0); ***/
  16629. flush_block_only(s, false);
  16630. if (s.strm.avail_out === 0) {
  16631. return BS_NEED_MORE;
  16632. }
  16633. /***/
  16634. }
  16635. return BS_BLOCK_DONE;
  16636. }
  16637. /* ===========================================================================
  16638. * Same as above, but achieves better compression. We use a lazy
  16639. * evaluation for matches: a match is finally adopted only if there is
  16640. * no better match at the next window position.
  16641. */
  16642. function deflate_slow(s, flush) {
  16643. var hash_head; /* head of hash chain */
  16644. var bflush; /* set if current block must be flushed */
  16645. var max_insert;
  16646. /* Process the input block. */
  16647. for (;;) {
  16648. /* Make sure that we always have enough lookahead, except
  16649. * at the end of the input file. We need MAX_MATCH bytes
  16650. * for the next match, plus MIN_MATCH bytes to insert the
  16651. * string following the next match.
  16652. */
  16653. if (s.lookahead < MIN_LOOKAHEAD) {
  16654. fill_window(s);
  16655. if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
  16656. return BS_NEED_MORE;
  16657. }
  16658. if (s.lookahead === 0) { break; } /* flush the current block */
  16659. }
  16660. /* Insert the string window[strstart .. strstart+2] in the
  16661. * dictionary, and set hash_head to the head of the hash chain:
  16662. */
  16663. hash_head = 0/*NIL*/;
  16664. if (s.lookahead >= MIN_MATCH) {
  16665. /*** INSERT_STRING(s, s.strstart, hash_head); ***/
  16666. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
  16667. hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
  16668. s.head[s.ins_h] = s.strstart;
  16669. /***/
  16670. }
  16671. /* Find the longest match, discarding those <= prev_length.
  16672. */
  16673. s.prev_length = s.match_length;
  16674. s.prev_match = s.match_start;
  16675. s.match_length = MIN_MATCH - 1;
  16676. if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
  16677. s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
  16678. /* To simplify the code, we prevent matches with the string
  16679. * of window index 0 (in particular we have to avoid a match
  16680. * of the string with itself at the start of the input file).
  16681. */
  16682. s.match_length = longest_match(s, hash_head);
  16683. /* longest_match() sets match_start */
  16684. if (s.match_length <= 5 &&
  16685. (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
  16686. /* If prev_match is also MIN_MATCH, match_start is garbage
  16687. * but we will ignore the current match anyway.
  16688. */
  16689. s.match_length = MIN_MATCH - 1;
  16690. }
  16691. }
  16692. /* If there was a match at the previous step and the current
  16693. * match is not better, output the previous match:
  16694. */
  16695. if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
  16696. max_insert = s.strstart + s.lookahead - MIN_MATCH;
  16697. /* Do not insert strings in hash table beyond this. */
  16698. //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
  16699. /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
  16700. s.prev_length - MIN_MATCH, bflush);***/
  16701. bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
  16702. /* Insert in hash table all strings up to the end of the match.
  16703. * strstart-1 and strstart are already inserted. If there is not
  16704. * enough lookahead, the last two strings are not inserted in
  16705. * the hash table.
  16706. */
  16707. s.lookahead -= s.prev_length - 1;
  16708. s.prev_length -= 2;
  16709. do {
  16710. if (++s.strstart <= max_insert) {
  16711. /*** INSERT_STRING(s, s.strstart, hash_head); ***/
  16712. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
  16713. hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
  16714. s.head[s.ins_h] = s.strstart;
  16715. /***/
  16716. }
  16717. } while (--s.prev_length !== 0);
  16718. s.match_available = 0;
  16719. s.match_length = MIN_MATCH - 1;
  16720. s.strstart++;
  16721. if (bflush) {
  16722. /*** FLUSH_BLOCK(s, 0); ***/
  16723. flush_block_only(s, false);
  16724. if (s.strm.avail_out === 0) {
  16725. return BS_NEED_MORE;
  16726. }
  16727. /***/
  16728. }
  16729. } else if (s.match_available) {
  16730. /* If there was no match at the previous position, output a
  16731. * single literal. If there was a match but the current match
  16732. * is longer, truncate the previous match to a single literal.
  16733. */
  16734. //Tracevv((stderr,"%c", s->window[s->strstart-1]));
  16735. /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
  16736. bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
  16737. if (bflush) {
  16738. /*** FLUSH_BLOCK_ONLY(s, 0) ***/
  16739. flush_block_only(s, false);
  16740. /***/
  16741. }
  16742. s.strstart++;
  16743. s.lookahead--;
  16744. if (s.strm.avail_out === 0) {
  16745. return BS_NEED_MORE;
  16746. }
  16747. } else {
  16748. /* There is no previous match to compare with, wait for
  16749. * the next step to decide.
  16750. */
  16751. s.match_available = 1;
  16752. s.strstart++;
  16753. s.lookahead--;
  16754. }
  16755. }
  16756. //Assert (flush != Z_NO_FLUSH, "no flush?");
  16757. if (s.match_available) {
  16758. //Tracevv((stderr,"%c", s->window[s->strstart-1]));
  16759. /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
  16760. bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
  16761. s.match_available = 0;
  16762. }
  16763. s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
  16764. if (flush === Z_FINISH) {
  16765. /*** FLUSH_BLOCK(s, 1); ***/
  16766. flush_block_only(s, true);
  16767. if (s.strm.avail_out === 0) {
  16768. return BS_FINISH_STARTED;
  16769. }
  16770. /***/
  16771. return BS_FINISH_DONE;
  16772. }
  16773. if (s.last_lit) {
  16774. /*** FLUSH_BLOCK(s, 0); ***/
  16775. flush_block_only(s, false);
  16776. if (s.strm.avail_out === 0) {
  16777. return BS_NEED_MORE;
  16778. }
  16779. /***/
  16780. }
  16781. return BS_BLOCK_DONE;
  16782. }
  16783. /* ===========================================================================
  16784. * For Z_RLE, simply look for runs of bytes, generate matches only of distance
  16785. * one. Do not maintain a hash table. (It will be regenerated if this run of
  16786. * deflate switches away from Z_RLE.)
  16787. */
  16788. function deflate_rle(s, flush) {
  16789. var bflush; /* set if current block must be flushed */
  16790. var prev; /* byte at distance one to match */
  16791. var scan, strend; /* scan goes up to strend for length of run */
  16792. var _win = s.window;
  16793. for (;;) {
  16794. /* Make sure that we always have enough lookahead, except
  16795. * at the end of the input file. We need MAX_MATCH bytes
  16796. * for the longest run, plus one for the unrolled loop.
  16797. */
  16798. if (s.lookahead <= MAX_MATCH) {
  16799. fill_window(s);
  16800. if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
  16801. return BS_NEED_MORE;
  16802. }
  16803. if (s.lookahead === 0) { break; } /* flush the current block */
  16804. }
  16805. /* See how many times the previous byte repeats */
  16806. s.match_length = 0;
  16807. if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
  16808. scan = s.strstart - 1;
  16809. prev = _win[scan];
  16810. if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
  16811. strend = s.strstart + MAX_MATCH;
  16812. do {
  16813. /*jshint noempty:false*/
  16814. } while (prev === _win[++scan] && prev === _win[++scan] &&
  16815. prev === _win[++scan] && prev === _win[++scan] &&
  16816. prev === _win[++scan] && prev === _win[++scan] &&
  16817. prev === _win[++scan] && prev === _win[++scan] &&
  16818. scan < strend);
  16819. s.match_length = MAX_MATCH - (strend - scan);
  16820. if (s.match_length > s.lookahead) {
  16821. s.match_length = s.lookahead;
  16822. }
  16823. }
  16824. //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
  16825. }
  16826. /* Emit match if have run of MIN_MATCH or longer, else emit literal */
  16827. if (s.match_length >= MIN_MATCH) {
  16828. //check_match(s, s.strstart, s.strstart - 1, s.match_length);
  16829. /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
  16830. bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
  16831. s.lookahead -= s.match_length;
  16832. s.strstart += s.match_length;
  16833. s.match_length = 0;
  16834. } else {
  16835. /* No match, output a literal byte */
  16836. //Tracevv((stderr,"%c", s->window[s->strstart]));
  16837. /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
  16838. bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
  16839. s.lookahead--;
  16840. s.strstart++;
  16841. }
  16842. if (bflush) {
  16843. /*** FLUSH_BLOCK(s, 0); ***/
  16844. flush_block_only(s, false);
  16845. if (s.strm.avail_out === 0) {
  16846. return BS_NEED_MORE;
  16847. }
  16848. /***/
  16849. }
  16850. }
  16851. s.insert = 0;
  16852. if (flush === Z_FINISH) {
  16853. /*** FLUSH_BLOCK(s, 1); ***/
  16854. flush_block_only(s, true);
  16855. if (s.strm.avail_out === 0) {
  16856. return BS_FINISH_STARTED;
  16857. }
  16858. /***/
  16859. return BS_FINISH_DONE;
  16860. }
  16861. if (s.last_lit) {
  16862. /*** FLUSH_BLOCK(s, 0); ***/
  16863. flush_block_only(s, false);
  16864. if (s.strm.avail_out === 0) {
  16865. return BS_NEED_MORE;
  16866. }
  16867. /***/
  16868. }
  16869. return BS_BLOCK_DONE;
  16870. }
  16871. /* ===========================================================================
  16872. * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
  16873. * (It will be regenerated if this run of deflate switches away from Huffman.)
  16874. */
  16875. function deflate_huff(s, flush) {
  16876. var bflush; /* set if current block must be flushed */
  16877. for (;;) {
  16878. /* Make sure that we have a literal to write. */
  16879. if (s.lookahead === 0) {
  16880. fill_window(s);
  16881. if (s.lookahead === 0) {
  16882. if (flush === Z_NO_FLUSH) {
  16883. return BS_NEED_MORE;
  16884. }
  16885. break; /* flush the current block */
  16886. }
  16887. }
  16888. /* Output a literal byte */
  16889. s.match_length = 0;
  16890. //Tracevv((stderr,"%c", s->window[s->strstart]));
  16891. /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
  16892. bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
  16893. s.lookahead--;
  16894. s.strstart++;
  16895. if (bflush) {
  16896. /*** FLUSH_BLOCK(s, 0); ***/
  16897. flush_block_only(s, false);
  16898. if (s.strm.avail_out === 0) {
  16899. return BS_NEED_MORE;
  16900. }
  16901. /***/
  16902. }
  16903. }
  16904. s.insert = 0;
  16905. if (flush === Z_FINISH) {
  16906. /*** FLUSH_BLOCK(s, 1); ***/
  16907. flush_block_only(s, true);
  16908. if (s.strm.avail_out === 0) {
  16909. return BS_FINISH_STARTED;
  16910. }
  16911. /***/
  16912. return BS_FINISH_DONE;
  16913. }
  16914. if (s.last_lit) {
  16915. /*** FLUSH_BLOCK(s, 0); ***/
  16916. flush_block_only(s, false);
  16917. if (s.strm.avail_out === 0) {
  16918. return BS_NEED_MORE;
  16919. }
  16920. /***/
  16921. }
  16922. return BS_BLOCK_DONE;
  16923. }
  16924. /* Values for max_lazy_match, good_match and max_chain_length, depending on
  16925. * the desired pack level (0..9). The values given below have been tuned to
  16926. * exclude worst case performance for pathological files. Better values may be
  16927. * found for specific files.
  16928. */
  16929. function Config(good_length, max_lazy, nice_length, max_chain, func) {
  16930. this.good_length = good_length;
  16931. this.max_lazy = max_lazy;
  16932. this.nice_length = nice_length;
  16933. this.max_chain = max_chain;
  16934. this.func = func;
  16935. }
  16936. var configuration_table;
  16937. configuration_table = [
  16938. /* good lazy nice chain */
  16939. new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */
  16940. new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */
  16941. new Config(4, 5, 16, 8, deflate_fast), /* 2 */
  16942. new Config(4, 6, 32, 32, deflate_fast), /* 3 */
  16943. new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */
  16944. new Config(8, 16, 32, 32, deflate_slow), /* 5 */
  16945. new Config(8, 16, 128, 128, deflate_slow), /* 6 */
  16946. new Config(8, 32, 128, 256, deflate_slow), /* 7 */
  16947. new Config(32, 128, 258, 1024, deflate_slow), /* 8 */
  16948. new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */
  16949. ];
  16950. /* ===========================================================================
  16951. * Initialize the "longest match" routines for a new zlib stream
  16952. */
  16953. function lm_init(s) {
  16954. s.window_size = 2 * s.w_size;
  16955. /*** CLEAR_HASH(s); ***/
  16956. zero(s.head); // Fill with NIL (= 0);
  16957. /* Set the default configuration parameters:
  16958. */
  16959. s.max_lazy_match = configuration_table[s.level].max_lazy;
  16960. s.good_match = configuration_table[s.level].good_length;
  16961. s.nice_match = configuration_table[s.level].nice_length;
  16962. s.max_chain_length = configuration_table[s.level].max_chain;
  16963. s.strstart = 0;
  16964. s.block_start = 0;
  16965. s.lookahead = 0;
  16966. s.insert = 0;
  16967. s.match_length = s.prev_length = MIN_MATCH - 1;
  16968. s.match_available = 0;
  16969. s.ins_h = 0;
  16970. }
  16971. function DeflateState() {
  16972. this.strm = null; /* pointer back to this zlib stream */
  16973. this.status = 0; /* as the name implies */
  16974. this.pending_buf = null; /* output still pending */
  16975. this.pending_buf_size = 0; /* size of pending_buf */
  16976. this.pending_out = 0; /* next pending byte to output to the stream */
  16977. this.pending = 0; /* nb of bytes in the pending buffer */
  16978. this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
  16979. this.gzhead = null; /* gzip header information to write */
  16980. this.gzindex = 0; /* where in extra, name, or comment */
  16981. this.method = Z_DEFLATED; /* can only be DEFLATED */
  16982. this.last_flush = -1; /* value of flush param for previous deflate call */
  16983. this.w_size = 0; /* LZ77 window size (32K by default) */
  16984. this.w_bits = 0; /* log2(w_size) (8..16) */
  16985. this.w_mask = 0; /* w_size - 1 */
  16986. this.window = null;
  16987. /* Sliding window. Input bytes are read into the second half of the window,
  16988. * and move to the first half later to keep a dictionary of at least wSize
  16989. * bytes. With this organization, matches are limited to a distance of
  16990. * wSize-MAX_MATCH bytes, but this ensures that IO is always
  16991. * performed with a length multiple of the block size.
  16992. */
  16993. this.window_size = 0;
  16994. /* Actual size of window: 2*wSize, except when the user input buffer
  16995. * is directly used as sliding window.
  16996. */
  16997. this.prev = null;
  16998. /* Link to older string with same hash index. To limit the size of this
  16999. * array to 64K, this link is maintained only for the last 32K strings.
  17000. * An index in this array is thus a window index modulo 32K.
  17001. */
  17002. this.head = null; /* Heads of the hash chains or NIL. */
  17003. this.ins_h = 0; /* hash index of string to be inserted */
  17004. this.hash_size = 0; /* number of elements in hash table */
  17005. this.hash_bits = 0; /* log2(hash_size) */
  17006. this.hash_mask = 0; /* hash_size-1 */
  17007. this.hash_shift = 0;
  17008. /* Number of bits by which ins_h must be shifted at each input
  17009. * step. It must be such that after MIN_MATCH steps, the oldest
  17010. * byte no longer takes part in the hash key, that is:
  17011. * hash_shift * MIN_MATCH >= hash_bits
  17012. */
  17013. this.block_start = 0;
  17014. /* Window position at the beginning of the current output block. Gets
  17015. * negative when the window is moved backwards.
  17016. */
  17017. this.match_length = 0; /* length of best match */
  17018. this.prev_match = 0; /* previous match */
  17019. this.match_available = 0; /* set if previous match exists */
  17020. this.strstart = 0; /* start of string to insert */
  17021. this.match_start = 0; /* start of matching string */
  17022. this.lookahead = 0; /* number of valid bytes ahead in window */
  17023. this.prev_length = 0;
  17024. /* Length of the best match at previous step. Matches not greater than this
  17025. * are discarded. This is used in the lazy match evaluation.
  17026. */
  17027. this.max_chain_length = 0;
  17028. /* To speed up deflation, hash chains are never searched beyond this
  17029. * length. A higher limit improves compression ratio but degrades the
  17030. * speed.
  17031. */
  17032. this.max_lazy_match = 0;
  17033. /* Attempt to find a better match only when the current match is strictly
  17034. * smaller than this value. This mechanism is used only for compression
  17035. * levels >= 4.
  17036. */
  17037. // That's alias to max_lazy_match, don't use directly
  17038. //this.max_insert_length = 0;
  17039. /* Insert new strings in the hash table only if the match length is not
  17040. * greater than this length. This saves time but degrades compression.
  17041. * max_insert_length is used only for compression levels <= 3.
  17042. */
  17043. this.level = 0; /* compression level (1..9) */
  17044. this.strategy = 0; /* favor or force Huffman coding*/
  17045. this.good_match = 0;
  17046. /* Use a faster search when the previous match is longer than this */
  17047. this.nice_match = 0; /* Stop searching when current match exceeds this */
  17048. /* used by trees.c: */
  17049. /* Didn't use ct_data typedef below to suppress compiler warning */
  17050. // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
  17051. // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
  17052. // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
  17053. // Use flat array of DOUBLE size, with interleaved fata,
  17054. // because JS does not support effective
  17055. this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);
  17056. this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);
  17057. this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);
  17058. zero(this.dyn_ltree);
  17059. zero(this.dyn_dtree);
  17060. zero(this.bl_tree);
  17061. this.l_desc = null; /* desc. for literal tree */
  17062. this.d_desc = null; /* desc. for distance tree */
  17063. this.bl_desc = null; /* desc. for bit length tree */
  17064. //ush bl_count[MAX_BITS+1];
  17065. this.bl_count = new utils.Buf16(MAX_BITS + 1);
  17066. /* number of codes at each bit length for an optimal tree */
  17067. //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
  17068. this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */
  17069. zero(this.heap);
  17070. this.heap_len = 0; /* number of elements in the heap */
  17071. this.heap_max = 0; /* element of largest frequency */
  17072. /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
  17073. * The same heap array is used to build all trees.
  17074. */
  17075. this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
  17076. zero(this.depth);
  17077. /* Depth of each subtree used as tie breaker for trees of equal frequency
  17078. */
  17079. this.l_buf = 0; /* buffer index for literals or lengths */
  17080. this.lit_bufsize = 0;
  17081. /* Size of match buffer for literals/lengths. There are 4 reasons for
  17082. * limiting lit_bufsize to 64K:
  17083. * - frequencies can be kept in 16 bit counters
  17084. * - if compression is not successful for the first block, all input
  17085. * data is still in the window so we can still emit a stored block even
  17086. * when input comes from standard input. (This can also be done for
  17087. * all blocks if lit_bufsize is not greater than 32K.)
  17088. * - if compression is not successful for a file smaller than 64K, we can
  17089. * even emit a stored file instead of a stored block (saving 5 bytes).
  17090. * This is applicable only for zip (not gzip or zlib).
  17091. * - creating new Huffman trees less frequently may not provide fast
  17092. * adaptation to changes in the input data statistics. (Take for
  17093. * example a binary file with poorly compressible code followed by
  17094. * a highly compressible string table.) Smaller buffer sizes give
  17095. * fast adaptation but have of course the overhead of transmitting
  17096. * trees more frequently.
  17097. * - I can't count above 4
  17098. */
  17099. this.last_lit = 0; /* running index in l_buf */
  17100. this.d_buf = 0;
  17101. /* Buffer index for distances. To simplify the code, d_buf and l_buf have
  17102. * the same number of elements. To use different lengths, an extra flag
  17103. * array would be necessary.
  17104. */
  17105. this.opt_len = 0; /* bit length of current block with optimal trees */
  17106. this.static_len = 0; /* bit length of current block with static trees */
  17107. this.matches = 0; /* number of string matches in current block */
  17108. this.insert = 0; /* bytes at end of window left to insert */
  17109. this.bi_buf = 0;
  17110. /* Output buffer. bits are inserted starting at the bottom (least
  17111. * significant bits).
  17112. */
  17113. this.bi_valid = 0;
  17114. /* Number of valid bits in bi_buf. All bits above the last valid bit
  17115. * are always zero.
  17116. */
  17117. // Used for window memory init. We safely ignore it for JS. That makes
  17118. // sense only for pointers and memory check tools.
  17119. //this.high_water = 0;
  17120. /* High water mark offset in window for initialized bytes -- bytes above
  17121. * this are set to zero in order to avoid memory check warnings when
  17122. * longest match routines access bytes past the input. This is then
  17123. * updated to the new high water mark.
  17124. */
  17125. }
  17126. function deflateResetKeep(strm) {
  17127. var s;
  17128. if (!strm || !strm.state) {
  17129. return err(strm, Z_STREAM_ERROR);
  17130. }
  17131. strm.total_in = strm.total_out = 0;
  17132. strm.data_type = Z_UNKNOWN;
  17133. s = strm.state;
  17134. s.pending = 0;
  17135. s.pending_out = 0;
  17136. if (s.wrap < 0) {
  17137. s.wrap = -s.wrap;
  17138. /* was made negative by deflate(..., Z_FINISH); */
  17139. }
  17140. s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
  17141. strm.adler = (s.wrap === 2) ?
  17142. 0 // crc32(0, Z_NULL, 0)
  17143. :
  17144. 1; // adler32(0, Z_NULL, 0)
  17145. s.last_flush = Z_NO_FLUSH;
  17146. trees._tr_init(s);
  17147. return Z_OK;
  17148. }
  17149. function deflateReset(strm) {
  17150. var ret = deflateResetKeep(strm);
  17151. if (ret === Z_OK) {
  17152. lm_init(strm.state);
  17153. }
  17154. return ret;
  17155. }
  17156. function deflateSetHeader(strm, head) {
  17157. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  17158. if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
  17159. strm.state.gzhead = head;
  17160. return Z_OK;
  17161. }
  17162. function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
  17163. if (!strm) { // === Z_NULL
  17164. return Z_STREAM_ERROR;
  17165. }
  17166. var wrap = 1;
  17167. if (level === Z_DEFAULT_COMPRESSION) {
  17168. level = 6;
  17169. }
  17170. if (windowBits < 0) { /* suppress zlib wrapper */
  17171. wrap = 0;
  17172. windowBits = -windowBits;
  17173. }
  17174. else if (windowBits > 15) {
  17175. wrap = 2; /* write gzip wrapper instead */
  17176. windowBits -= 16;
  17177. }
  17178. if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
  17179. windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
  17180. strategy < 0 || strategy > Z_FIXED) {
  17181. return err(strm, Z_STREAM_ERROR);
  17182. }
  17183. if (windowBits === 8) {
  17184. windowBits = 9;
  17185. }
  17186. /* until 256-byte window bug fixed */
  17187. var s = new DeflateState();
  17188. strm.state = s;
  17189. s.strm = strm;
  17190. s.wrap = wrap;
  17191. s.gzhead = null;
  17192. s.w_bits = windowBits;
  17193. s.w_size = 1 << s.w_bits;
  17194. s.w_mask = s.w_size - 1;
  17195. s.hash_bits = memLevel + 7;
  17196. s.hash_size = 1 << s.hash_bits;
  17197. s.hash_mask = s.hash_size - 1;
  17198. s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
  17199. s.window = new utils.Buf8(s.w_size * 2);
  17200. s.head = new utils.Buf16(s.hash_size);
  17201. s.prev = new utils.Buf16(s.w_size);
  17202. // Don't need mem init magic for JS.
  17203. //s.high_water = 0; /* nothing written to s->window yet */
  17204. s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
  17205. s.pending_buf_size = s.lit_bufsize * 4;
  17206. //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
  17207. //s->pending_buf = (uchf *) overlay;
  17208. s.pending_buf = new utils.Buf8(s.pending_buf_size);
  17209. // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
  17210. //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
  17211. s.d_buf = 1 * s.lit_bufsize;
  17212. //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
  17213. s.l_buf = (1 + 2) * s.lit_bufsize;
  17214. s.level = level;
  17215. s.strategy = strategy;
  17216. s.method = method;
  17217. return deflateReset(strm);
  17218. }
  17219. function deflateInit(strm, level) {
  17220. return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
  17221. }
  17222. function deflate(strm, flush) {
  17223. var old_flush, s;
  17224. var beg, val; // for gzip header write only
  17225. if (!strm || !strm.state ||
  17226. flush > Z_BLOCK || flush < 0) {
  17227. return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
  17228. }
  17229. s = strm.state;
  17230. if (!strm.output ||
  17231. (!strm.input && strm.avail_in !== 0) ||
  17232. (s.status === FINISH_STATE && flush !== Z_FINISH)) {
  17233. return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
  17234. }
  17235. s.strm = strm; /* just in case */
  17236. old_flush = s.last_flush;
  17237. s.last_flush = flush;
  17238. /* Write the header */
  17239. if (s.status === INIT_STATE) {
  17240. if (s.wrap === 2) { // GZIP header
  17241. strm.adler = 0; //crc32(0L, Z_NULL, 0);
  17242. put_byte(s, 31);
  17243. put_byte(s, 139);
  17244. put_byte(s, 8);
  17245. if (!s.gzhead) { // s->gzhead == Z_NULL
  17246. put_byte(s, 0);
  17247. put_byte(s, 0);
  17248. put_byte(s, 0);
  17249. put_byte(s, 0);
  17250. put_byte(s, 0);
  17251. put_byte(s, s.level === 9 ? 2 :
  17252. (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
  17253. 4 : 0));
  17254. put_byte(s, OS_CODE);
  17255. s.status = BUSY_STATE;
  17256. }
  17257. else {
  17258. put_byte(s, (s.gzhead.text ? 1 : 0) +
  17259. (s.gzhead.hcrc ? 2 : 0) +
  17260. (!s.gzhead.extra ? 0 : 4) +
  17261. (!s.gzhead.name ? 0 : 8) +
  17262. (!s.gzhead.comment ? 0 : 16)
  17263. );
  17264. put_byte(s, s.gzhead.time & 0xff);
  17265. put_byte(s, (s.gzhead.time >> 8) & 0xff);
  17266. put_byte(s, (s.gzhead.time >> 16) & 0xff);
  17267. put_byte(s, (s.gzhead.time >> 24) & 0xff);
  17268. put_byte(s, s.level === 9 ? 2 :
  17269. (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
  17270. 4 : 0));
  17271. put_byte(s, s.gzhead.os & 0xff);
  17272. if (s.gzhead.extra && s.gzhead.extra.length) {
  17273. put_byte(s, s.gzhead.extra.length & 0xff);
  17274. put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
  17275. }
  17276. if (s.gzhead.hcrc) {
  17277. strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
  17278. }
  17279. s.gzindex = 0;
  17280. s.status = EXTRA_STATE;
  17281. }
  17282. }
  17283. else // DEFLATE header
  17284. {
  17285. var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
  17286. var level_flags = -1;
  17287. if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
  17288. level_flags = 0;
  17289. } else if (s.level < 6) {
  17290. level_flags = 1;
  17291. } else if (s.level === 6) {
  17292. level_flags = 2;
  17293. } else {
  17294. level_flags = 3;
  17295. }
  17296. header |= (level_flags << 6);
  17297. if (s.strstart !== 0) { header |= PRESET_DICT; }
  17298. header += 31 - (header % 31);
  17299. s.status = BUSY_STATE;
  17300. putShortMSB(s, header);
  17301. /* Save the adler32 of the preset dictionary: */
  17302. if (s.strstart !== 0) {
  17303. putShortMSB(s, strm.adler >>> 16);
  17304. putShortMSB(s, strm.adler & 0xffff);
  17305. }
  17306. strm.adler = 1; // adler32(0L, Z_NULL, 0);
  17307. }
  17308. }
  17309. //#ifdef GZIP
  17310. if (s.status === EXTRA_STATE) {
  17311. if (s.gzhead.extra/* != Z_NULL*/) {
  17312. beg = s.pending; /* start of bytes to update crc */
  17313. while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
  17314. if (s.pending === s.pending_buf_size) {
  17315. if (s.gzhead.hcrc && s.pending > beg) {
  17316. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  17317. }
  17318. flush_pending(strm);
  17319. beg = s.pending;
  17320. if (s.pending === s.pending_buf_size) {
  17321. break;
  17322. }
  17323. }
  17324. put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
  17325. s.gzindex++;
  17326. }
  17327. if (s.gzhead.hcrc && s.pending > beg) {
  17328. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  17329. }
  17330. if (s.gzindex === s.gzhead.extra.length) {
  17331. s.gzindex = 0;
  17332. s.status = NAME_STATE;
  17333. }
  17334. }
  17335. else {
  17336. s.status = NAME_STATE;
  17337. }
  17338. }
  17339. if (s.status === NAME_STATE) {
  17340. if (s.gzhead.name/* != Z_NULL*/) {
  17341. beg = s.pending; /* start of bytes to update crc */
  17342. //int val;
  17343. do {
  17344. if (s.pending === s.pending_buf_size) {
  17345. if (s.gzhead.hcrc && s.pending > beg) {
  17346. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  17347. }
  17348. flush_pending(strm);
  17349. beg = s.pending;
  17350. if (s.pending === s.pending_buf_size) {
  17351. val = 1;
  17352. break;
  17353. }
  17354. }
  17355. // JS specific: little magic to add zero terminator to end of string
  17356. if (s.gzindex < s.gzhead.name.length) {
  17357. val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
  17358. } else {
  17359. val = 0;
  17360. }
  17361. put_byte(s, val);
  17362. } while (val !== 0);
  17363. if (s.gzhead.hcrc && s.pending > beg) {
  17364. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  17365. }
  17366. if (val === 0) {
  17367. s.gzindex = 0;
  17368. s.status = COMMENT_STATE;
  17369. }
  17370. }
  17371. else {
  17372. s.status = COMMENT_STATE;
  17373. }
  17374. }
  17375. if (s.status === COMMENT_STATE) {
  17376. if (s.gzhead.comment/* != Z_NULL*/) {
  17377. beg = s.pending; /* start of bytes to update crc */
  17378. //int val;
  17379. do {
  17380. if (s.pending === s.pending_buf_size) {
  17381. if (s.gzhead.hcrc && s.pending > beg) {
  17382. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  17383. }
  17384. flush_pending(strm);
  17385. beg = s.pending;
  17386. if (s.pending === s.pending_buf_size) {
  17387. val = 1;
  17388. break;
  17389. }
  17390. }
  17391. // JS specific: little magic to add zero terminator to end of string
  17392. if (s.gzindex < s.gzhead.comment.length) {
  17393. val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
  17394. } else {
  17395. val = 0;
  17396. }
  17397. put_byte(s, val);
  17398. } while (val !== 0);
  17399. if (s.gzhead.hcrc && s.pending > beg) {
  17400. strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
  17401. }
  17402. if (val === 0) {
  17403. s.status = HCRC_STATE;
  17404. }
  17405. }
  17406. else {
  17407. s.status = HCRC_STATE;
  17408. }
  17409. }
  17410. if (s.status === HCRC_STATE) {
  17411. if (s.gzhead.hcrc) {
  17412. if (s.pending + 2 > s.pending_buf_size) {
  17413. flush_pending(strm);
  17414. }
  17415. if (s.pending + 2 <= s.pending_buf_size) {
  17416. put_byte(s, strm.adler & 0xff);
  17417. put_byte(s, (strm.adler >> 8) & 0xff);
  17418. strm.adler = 0; //crc32(0L, Z_NULL, 0);
  17419. s.status = BUSY_STATE;
  17420. }
  17421. }
  17422. else {
  17423. s.status = BUSY_STATE;
  17424. }
  17425. }
  17426. //#endif
  17427. /* Flush as much pending output as possible */
  17428. if (s.pending !== 0) {
  17429. flush_pending(strm);
  17430. if (strm.avail_out === 0) {
  17431. /* Since avail_out is 0, deflate will be called again with
  17432. * more output space, but possibly with both pending and
  17433. * avail_in equal to zero. There won't be anything to do,
  17434. * but this is not an error situation so make sure we
  17435. * return OK instead of BUF_ERROR at next call of deflate:
  17436. */
  17437. s.last_flush = -1;
  17438. return Z_OK;
  17439. }
  17440. /* Make sure there is something to do and avoid duplicate consecutive
  17441. * flushes. For repeated and useless calls with Z_FINISH, we keep
  17442. * returning Z_STREAM_END instead of Z_BUF_ERROR.
  17443. */
  17444. } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
  17445. flush !== Z_FINISH) {
  17446. return err(strm, Z_BUF_ERROR);
  17447. }
  17448. /* User must not provide more input after the first FINISH: */
  17449. if (s.status === FINISH_STATE && strm.avail_in !== 0) {
  17450. return err(strm, Z_BUF_ERROR);
  17451. }
  17452. /* Start a new block or continue the current one.
  17453. */
  17454. if (strm.avail_in !== 0 || s.lookahead !== 0 ||
  17455. (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
  17456. var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
  17457. (s.strategy === Z_RLE ? deflate_rle(s, flush) :
  17458. configuration_table[s.level].func(s, flush));
  17459. if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
  17460. s.status = FINISH_STATE;
  17461. }
  17462. if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
  17463. if (strm.avail_out === 0) {
  17464. s.last_flush = -1;
  17465. /* avoid BUF_ERROR next call, see above */
  17466. }
  17467. return Z_OK;
  17468. /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
  17469. * of deflate should use the same flush parameter to make sure
  17470. * that the flush is complete. So we don't have to output an
  17471. * empty block here, this will be done at next call. This also
  17472. * ensures that for a very small output buffer, we emit at most
  17473. * one empty block.
  17474. */
  17475. }
  17476. if (bstate === BS_BLOCK_DONE) {
  17477. if (flush === Z_PARTIAL_FLUSH) {
  17478. trees._tr_align(s);
  17479. }
  17480. else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
  17481. trees._tr_stored_block(s, 0, 0, false);
  17482. /* For a full flush, this empty block will be recognized
  17483. * as a special marker by inflate_sync().
  17484. */
  17485. if (flush === Z_FULL_FLUSH) {
  17486. /*** CLEAR_HASH(s); ***/ /* forget history */
  17487. zero(s.head); // Fill with NIL (= 0);
  17488. if (s.lookahead === 0) {
  17489. s.strstart = 0;
  17490. s.block_start = 0;
  17491. s.insert = 0;
  17492. }
  17493. }
  17494. }
  17495. flush_pending(strm);
  17496. if (strm.avail_out === 0) {
  17497. s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
  17498. return Z_OK;
  17499. }
  17500. }
  17501. }
  17502. //Assert(strm->avail_out > 0, "bug2");
  17503. //if (strm.avail_out <= 0) { throw new Error("bug2");}
  17504. if (flush !== Z_FINISH) { return Z_OK; }
  17505. if (s.wrap <= 0) { return Z_STREAM_END; }
  17506. /* Write the trailer */
  17507. if (s.wrap === 2) {
  17508. put_byte(s, strm.adler & 0xff);
  17509. put_byte(s, (strm.adler >> 8) & 0xff);
  17510. put_byte(s, (strm.adler >> 16) & 0xff);
  17511. put_byte(s, (strm.adler >> 24) & 0xff);
  17512. put_byte(s, strm.total_in & 0xff);
  17513. put_byte(s, (strm.total_in >> 8) & 0xff);
  17514. put_byte(s, (strm.total_in >> 16) & 0xff);
  17515. put_byte(s, (strm.total_in >> 24) & 0xff);
  17516. }
  17517. else
  17518. {
  17519. putShortMSB(s, strm.adler >>> 16);
  17520. putShortMSB(s, strm.adler & 0xffff);
  17521. }
  17522. flush_pending(strm);
  17523. /* If avail_out is zero, the application will call deflate again
  17524. * to flush the rest.
  17525. */
  17526. if (s.wrap > 0) { s.wrap = -s.wrap; }
  17527. /* write the trailer only once! */
  17528. return s.pending !== 0 ? Z_OK : Z_STREAM_END;
  17529. }
  17530. function deflateEnd(strm) {
  17531. var status;
  17532. if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
  17533. return Z_STREAM_ERROR;
  17534. }
  17535. status = strm.state.status;
  17536. if (status !== INIT_STATE &&
  17537. status !== EXTRA_STATE &&
  17538. status !== NAME_STATE &&
  17539. status !== COMMENT_STATE &&
  17540. status !== HCRC_STATE &&
  17541. status !== BUSY_STATE &&
  17542. status !== FINISH_STATE
  17543. ) {
  17544. return err(strm, Z_STREAM_ERROR);
  17545. }
  17546. strm.state = null;
  17547. return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
  17548. }
  17549. /* =========================================================================
  17550. * Initializes the compression dictionary from the given byte
  17551. * sequence without producing any compressed output.
  17552. */
  17553. function deflateSetDictionary(strm, dictionary) {
  17554. var dictLength = dictionary.length;
  17555. var s;
  17556. var str, n;
  17557. var wrap;
  17558. var avail;
  17559. var next;
  17560. var input;
  17561. var tmpDict;
  17562. if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
  17563. return Z_STREAM_ERROR;
  17564. }
  17565. s = strm.state;
  17566. wrap = s.wrap;
  17567. if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {
  17568. return Z_STREAM_ERROR;
  17569. }
  17570. /* when using zlib wrappers, compute Adler-32 for provided dictionary */
  17571. if (wrap === 1) {
  17572. /* adler32(strm->adler, dictionary, dictLength); */
  17573. strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
  17574. }
  17575. s.wrap = 0; /* avoid computing Adler-32 in read_buf */
  17576. /* if dictionary would fill window, just replace the history */
  17577. if (dictLength >= s.w_size) {
  17578. if (wrap === 0) { /* already empty otherwise */
  17579. /*** CLEAR_HASH(s); ***/
  17580. zero(s.head); // Fill with NIL (= 0);
  17581. s.strstart = 0;
  17582. s.block_start = 0;
  17583. s.insert = 0;
  17584. }
  17585. /* use the tail */
  17586. // dictionary = dictionary.slice(dictLength - s.w_size);
  17587. tmpDict = new utils.Buf8(s.w_size);
  17588. utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
  17589. dictionary = tmpDict;
  17590. dictLength = s.w_size;
  17591. }
  17592. /* insert dictionary into window and hash */
  17593. avail = strm.avail_in;
  17594. next = strm.next_in;
  17595. input = strm.input;
  17596. strm.avail_in = dictLength;
  17597. strm.next_in = 0;
  17598. strm.input = dictionary;
  17599. fill_window(s);
  17600. while (s.lookahead >= MIN_MATCH) {
  17601. str = s.strstart;
  17602. n = s.lookahead - (MIN_MATCH - 1);
  17603. do {
  17604. /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
  17605. s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
  17606. s.prev[str & s.w_mask] = s.head[s.ins_h];
  17607. s.head[s.ins_h] = str;
  17608. str++;
  17609. } while (--n);
  17610. s.strstart = str;
  17611. s.lookahead = MIN_MATCH - 1;
  17612. fill_window(s);
  17613. }
  17614. s.strstart += s.lookahead;
  17615. s.block_start = s.strstart;
  17616. s.insert = s.lookahead;
  17617. s.lookahead = 0;
  17618. s.match_length = s.prev_length = MIN_MATCH - 1;
  17619. s.match_available = 0;
  17620. strm.next_in = next;
  17621. strm.input = input;
  17622. strm.avail_in = avail;
  17623. s.wrap = wrap;
  17624. return Z_OK;
  17625. }
  17626. exports.deflateInit = deflateInit;
  17627. exports.deflateInit2 = deflateInit2;
  17628. exports.deflateReset = deflateReset;
  17629. exports.deflateResetKeep = deflateResetKeep;
  17630. exports.deflateSetHeader = deflateSetHeader;
  17631. exports.deflate = deflate;
  17632. exports.deflateEnd = deflateEnd;
  17633. exports.deflateSetDictionary = deflateSetDictionary;
  17634. exports.deflateInfo = 'pako deflate (from Nodeca project)';
  17635. /* Not implemented
  17636. exports.deflateBound = deflateBound;
  17637. exports.deflateCopy = deflateCopy;
  17638. exports.deflateParams = deflateParams;
  17639. exports.deflatePending = deflatePending;
  17640. exports.deflatePrime = deflatePrime;
  17641. exports.deflateTune = deflateTune;
  17642. */
  17643. /***/ }),
  17644. /***/ 76438:
  17645. /***/ ((module) => {
  17646. "use strict";
  17647. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  17648. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  17649. //
  17650. // This software is provided 'as-is', without any express or implied
  17651. // warranty. In no event will the authors be held liable for any damages
  17652. // arising from the use of this software.
  17653. //
  17654. // Permission is granted to anyone to use this software for any purpose,
  17655. // including commercial applications, and to alter it and redistribute it
  17656. // freely, subject to the following restrictions:
  17657. //
  17658. // 1. The origin of this software must not be misrepresented; you must not
  17659. // claim that you wrote the original software. If you use this software
  17660. // in a product, an acknowledgment in the product documentation would be
  17661. // appreciated but is not required.
  17662. // 2. Altered source versions must be plainly marked as such, and must not be
  17663. // misrepresented as being the original software.
  17664. // 3. This notice may not be removed or altered from any source distribution.
  17665. // See state defs from inflate.js
  17666. var BAD = 30; /* got a data error -- remain here until reset */
  17667. var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
  17668. /*
  17669. Decode literal, length, and distance codes and write out the resulting
  17670. literal and match bytes until either not enough input or output is
  17671. available, an end-of-block is encountered, or a data error is encountered.
  17672. When large enough input and output buffers are supplied to inflate(), for
  17673. example, a 16K input buffer and a 64K output buffer, more than 95% of the
  17674. inflate execution time is spent in this routine.
  17675. Entry assumptions:
  17676. state.mode === LEN
  17677. strm.avail_in >= 6
  17678. strm.avail_out >= 258
  17679. start >= strm.avail_out
  17680. state.bits < 8
  17681. On return, state.mode is one of:
  17682. LEN -- ran out of enough output space or enough available input
  17683. TYPE -- reached end of block code, inflate() to interpret next block
  17684. BAD -- error in block data
  17685. Notes:
  17686. - The maximum input bits used by a length/distance pair is 15 bits for the
  17687. length code, 5 bits for the length extra, 15 bits for the distance code,
  17688. and 13 bits for the distance extra. This totals 48 bits, or six bytes.
  17689. Therefore if strm.avail_in >= 6, then there is enough input to avoid
  17690. checking for available input while decoding.
  17691. - The maximum bytes that a single length/distance pair can output is 258
  17692. bytes, which is the maximum length that can be coded. inflate_fast()
  17693. requires strm.avail_out >= 258 for each loop to avoid checking for
  17694. output space.
  17695. */
  17696. module.exports = function inflate_fast(strm, start) {
  17697. var state;
  17698. var _in; /* local strm.input */
  17699. var last; /* have enough input while in < last */
  17700. var _out; /* local strm.output */
  17701. var beg; /* inflate()'s initial strm.output */
  17702. var end; /* while out < end, enough space available */
  17703. //#ifdef INFLATE_STRICT
  17704. var dmax; /* maximum distance from zlib header */
  17705. //#endif
  17706. var wsize; /* window size or zero if not using window */
  17707. var whave; /* valid bytes in the window */
  17708. var wnext; /* window write index */
  17709. // Use `s_window` instead `window`, avoid conflict with instrumentation tools
  17710. var s_window; /* allocated sliding window, if wsize != 0 */
  17711. var hold; /* local strm.hold */
  17712. var bits; /* local strm.bits */
  17713. var lcode; /* local strm.lencode */
  17714. var dcode; /* local strm.distcode */
  17715. var lmask; /* mask for first level of length codes */
  17716. var dmask; /* mask for first level of distance codes */
  17717. var here; /* retrieved table entry */
  17718. var op; /* code bits, operation, extra bits, or */
  17719. /* window position, window bytes to copy */
  17720. var len; /* match length, unused bytes */
  17721. var dist; /* match distance */
  17722. var from; /* where to copy match from */
  17723. var from_source;
  17724. var input, output; // JS specific, because we have no pointers
  17725. /* copy state to local variables */
  17726. state = strm.state;
  17727. //here = state.here;
  17728. _in = strm.next_in;
  17729. input = strm.input;
  17730. last = _in + (strm.avail_in - 5);
  17731. _out = strm.next_out;
  17732. output = strm.output;
  17733. beg = _out - (start - strm.avail_out);
  17734. end = _out + (strm.avail_out - 257);
  17735. //#ifdef INFLATE_STRICT
  17736. dmax = state.dmax;
  17737. //#endif
  17738. wsize = state.wsize;
  17739. whave = state.whave;
  17740. wnext = state.wnext;
  17741. s_window = state.window;
  17742. hold = state.hold;
  17743. bits = state.bits;
  17744. lcode = state.lencode;
  17745. dcode = state.distcode;
  17746. lmask = (1 << state.lenbits) - 1;
  17747. dmask = (1 << state.distbits) - 1;
  17748. /* decode literals and length/distances until end-of-block or not enough
  17749. input data or output space */
  17750. top:
  17751. do {
  17752. if (bits < 15) {
  17753. hold += input[_in++] << bits;
  17754. bits += 8;
  17755. hold += input[_in++] << bits;
  17756. bits += 8;
  17757. }
  17758. here = lcode[hold & lmask];
  17759. dolen:
  17760. for (;;) { // Goto emulation
  17761. op = here >>> 24/*here.bits*/;
  17762. hold >>>= op;
  17763. bits -= op;
  17764. op = (here >>> 16) & 0xff/*here.op*/;
  17765. if (op === 0) { /* literal */
  17766. //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
  17767. // "inflate: literal '%c'\n" :
  17768. // "inflate: literal 0x%02x\n", here.val));
  17769. output[_out++] = here & 0xffff/*here.val*/;
  17770. }
  17771. else if (op & 16) { /* length base */
  17772. len = here & 0xffff/*here.val*/;
  17773. op &= 15; /* number of extra bits */
  17774. if (op) {
  17775. if (bits < op) {
  17776. hold += input[_in++] << bits;
  17777. bits += 8;
  17778. }
  17779. len += hold & ((1 << op) - 1);
  17780. hold >>>= op;
  17781. bits -= op;
  17782. }
  17783. //Tracevv((stderr, "inflate: length %u\n", len));
  17784. if (bits < 15) {
  17785. hold += input[_in++] << bits;
  17786. bits += 8;
  17787. hold += input[_in++] << bits;
  17788. bits += 8;
  17789. }
  17790. here = dcode[hold & dmask];
  17791. dodist:
  17792. for (;;) { // goto emulation
  17793. op = here >>> 24/*here.bits*/;
  17794. hold >>>= op;
  17795. bits -= op;
  17796. op = (here >>> 16) & 0xff/*here.op*/;
  17797. if (op & 16) { /* distance base */
  17798. dist = here & 0xffff/*here.val*/;
  17799. op &= 15; /* number of extra bits */
  17800. if (bits < op) {
  17801. hold += input[_in++] << bits;
  17802. bits += 8;
  17803. if (bits < op) {
  17804. hold += input[_in++] << bits;
  17805. bits += 8;
  17806. }
  17807. }
  17808. dist += hold & ((1 << op) - 1);
  17809. //#ifdef INFLATE_STRICT
  17810. if (dist > dmax) {
  17811. strm.msg = 'invalid distance too far back';
  17812. state.mode = BAD;
  17813. break top;
  17814. }
  17815. //#endif
  17816. hold >>>= op;
  17817. bits -= op;
  17818. //Tracevv((stderr, "inflate: distance %u\n", dist));
  17819. op = _out - beg; /* max distance in output */
  17820. if (dist > op) { /* see if copy from window */
  17821. op = dist - op; /* distance back in window */
  17822. if (op > whave) {
  17823. if (state.sane) {
  17824. strm.msg = 'invalid distance too far back';
  17825. state.mode = BAD;
  17826. break top;
  17827. }
  17828. // (!) This block is disabled in zlib defaults,
  17829. // don't enable it for binary compatibility
  17830. //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
  17831. // if (len <= op - whave) {
  17832. // do {
  17833. // output[_out++] = 0;
  17834. // } while (--len);
  17835. // continue top;
  17836. // }
  17837. // len -= op - whave;
  17838. // do {
  17839. // output[_out++] = 0;
  17840. // } while (--op > whave);
  17841. // if (op === 0) {
  17842. // from = _out - dist;
  17843. // do {
  17844. // output[_out++] = output[from++];
  17845. // } while (--len);
  17846. // continue top;
  17847. // }
  17848. //#endif
  17849. }
  17850. from = 0; // window index
  17851. from_source = s_window;
  17852. if (wnext === 0) { /* very common case */
  17853. from += wsize - op;
  17854. if (op < len) { /* some from window */
  17855. len -= op;
  17856. do {
  17857. output[_out++] = s_window[from++];
  17858. } while (--op);
  17859. from = _out - dist; /* rest from output */
  17860. from_source = output;
  17861. }
  17862. }
  17863. else if (wnext < op) { /* wrap around window */
  17864. from += wsize + wnext - op;
  17865. op -= wnext;
  17866. if (op < len) { /* some from end of window */
  17867. len -= op;
  17868. do {
  17869. output[_out++] = s_window[from++];
  17870. } while (--op);
  17871. from = 0;
  17872. if (wnext < len) { /* some from start of window */
  17873. op = wnext;
  17874. len -= op;
  17875. do {
  17876. output[_out++] = s_window[from++];
  17877. } while (--op);
  17878. from = _out - dist; /* rest from output */
  17879. from_source = output;
  17880. }
  17881. }
  17882. }
  17883. else { /* contiguous in window */
  17884. from += wnext - op;
  17885. if (op < len) { /* some from window */
  17886. len -= op;
  17887. do {
  17888. output[_out++] = s_window[from++];
  17889. } while (--op);
  17890. from = _out - dist; /* rest from output */
  17891. from_source = output;
  17892. }
  17893. }
  17894. while (len > 2) {
  17895. output[_out++] = from_source[from++];
  17896. output[_out++] = from_source[from++];
  17897. output[_out++] = from_source[from++];
  17898. len -= 3;
  17899. }
  17900. if (len) {
  17901. output[_out++] = from_source[from++];
  17902. if (len > 1) {
  17903. output[_out++] = from_source[from++];
  17904. }
  17905. }
  17906. }
  17907. else {
  17908. from = _out - dist; /* copy direct from output */
  17909. do { /* minimum length is three */
  17910. output[_out++] = output[from++];
  17911. output[_out++] = output[from++];
  17912. output[_out++] = output[from++];
  17913. len -= 3;
  17914. } while (len > 2);
  17915. if (len) {
  17916. output[_out++] = output[from++];
  17917. if (len > 1) {
  17918. output[_out++] = output[from++];
  17919. }
  17920. }
  17921. }
  17922. }
  17923. else if ((op & 64) === 0) { /* 2nd level distance code */
  17924. here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
  17925. continue dodist;
  17926. }
  17927. else {
  17928. strm.msg = 'invalid distance code';
  17929. state.mode = BAD;
  17930. break top;
  17931. }
  17932. break; // need to emulate goto via "continue"
  17933. }
  17934. }
  17935. else if ((op & 64) === 0) { /* 2nd level length code */
  17936. here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
  17937. continue dolen;
  17938. }
  17939. else if (op & 32) { /* end-of-block */
  17940. //Tracevv((stderr, "inflate: end of block\n"));
  17941. state.mode = TYPE;
  17942. break top;
  17943. }
  17944. else {
  17945. strm.msg = 'invalid literal/length code';
  17946. state.mode = BAD;
  17947. break top;
  17948. }
  17949. break; // need to emulate goto via "continue"
  17950. }
  17951. } while (_in < last && _out < end);
  17952. /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
  17953. len = bits >> 3;
  17954. _in -= len;
  17955. bits -= len << 3;
  17956. hold &= (1 << bits) - 1;
  17957. /* update state and return */
  17958. strm.next_in = _in;
  17959. strm.next_out = _out;
  17960. strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
  17961. strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
  17962. state.hold = hold;
  17963. state.bits = bits;
  17964. return;
  17965. };
  17966. /***/ }),
  17967. /***/ 23001:
  17968. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  17969. "use strict";
  17970. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  17971. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  17972. //
  17973. // This software is provided 'as-is', without any express or implied
  17974. // warranty. In no event will the authors be held liable for any damages
  17975. // arising from the use of this software.
  17976. //
  17977. // Permission is granted to anyone to use this software for any purpose,
  17978. // including commercial applications, and to alter it and redistribute it
  17979. // freely, subject to the following restrictions:
  17980. //
  17981. // 1. The origin of this software must not be misrepresented; you must not
  17982. // claim that you wrote the original software. If you use this software
  17983. // in a product, an acknowledgment in the product documentation would be
  17984. // appreciated but is not required.
  17985. // 2. Altered source versions must be plainly marked as such, and must not be
  17986. // misrepresented as being the original software.
  17987. // 3. This notice may not be removed or altered from any source distribution.
  17988. var utils = __webpack_require__(6907);
  17989. var adler32 = __webpack_require__(47575);
  17990. var crc32 = __webpack_require__(13415);
  17991. var inflate_fast = __webpack_require__(76438);
  17992. var inflate_table = __webpack_require__(11375);
  17993. var CODES = 0;
  17994. var LENS = 1;
  17995. var DISTS = 2;
  17996. /* Public constants ==========================================================*/
  17997. /* ===========================================================================*/
  17998. /* Allowed flush values; see deflate() and inflate() below for details */
  17999. //var Z_NO_FLUSH = 0;
  18000. //var Z_PARTIAL_FLUSH = 1;
  18001. //var Z_SYNC_FLUSH = 2;
  18002. //var Z_FULL_FLUSH = 3;
  18003. var Z_FINISH = 4;
  18004. var Z_BLOCK = 5;
  18005. var Z_TREES = 6;
  18006. /* Return codes for the compression/decompression functions. Negative values
  18007. * are errors, positive values are used for special but normal events.
  18008. */
  18009. var Z_OK = 0;
  18010. var Z_STREAM_END = 1;
  18011. var Z_NEED_DICT = 2;
  18012. //var Z_ERRNO = -1;
  18013. var Z_STREAM_ERROR = -2;
  18014. var Z_DATA_ERROR = -3;
  18015. var Z_MEM_ERROR = -4;
  18016. var Z_BUF_ERROR = -5;
  18017. //var Z_VERSION_ERROR = -6;
  18018. /* The deflate compression method */
  18019. var Z_DEFLATED = 8;
  18020. /* STATES ====================================================================*/
  18021. /* ===========================================================================*/
  18022. var HEAD = 1; /* i: waiting for magic header */
  18023. var FLAGS = 2; /* i: waiting for method and flags (gzip) */
  18024. var TIME = 3; /* i: waiting for modification time (gzip) */
  18025. var OS = 4; /* i: waiting for extra flags and operating system (gzip) */
  18026. var EXLEN = 5; /* i: waiting for extra length (gzip) */
  18027. var EXTRA = 6; /* i: waiting for extra bytes (gzip) */
  18028. var NAME = 7; /* i: waiting for end of file name (gzip) */
  18029. var COMMENT = 8; /* i: waiting for end of comment (gzip) */
  18030. var HCRC = 9; /* i: waiting for header crc (gzip) */
  18031. var DICTID = 10; /* i: waiting for dictionary check value */
  18032. var DICT = 11; /* waiting for inflateSetDictionary() call */
  18033. var TYPE = 12; /* i: waiting for type bits, including last-flag bit */
  18034. var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */
  18035. var STORED = 14; /* i: waiting for stored size (length and complement) */
  18036. var COPY_ = 15; /* i/o: same as COPY below, but only first time in */
  18037. var COPY = 16; /* i/o: waiting for input or output to copy stored block */
  18038. var TABLE = 17; /* i: waiting for dynamic block table lengths */
  18039. var LENLENS = 18; /* i: waiting for code length code lengths */
  18040. var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */
  18041. var LEN_ = 20; /* i: same as LEN below, but only first time in */
  18042. var LEN = 21; /* i: waiting for length/lit/eob code */
  18043. var LENEXT = 22; /* i: waiting for length extra bits */
  18044. var DIST = 23; /* i: waiting for distance code */
  18045. var DISTEXT = 24; /* i: waiting for distance extra bits */
  18046. var MATCH = 25; /* o: waiting for output space to copy string */
  18047. var LIT = 26; /* o: waiting for output space to write literal */
  18048. var CHECK = 27; /* i: waiting for 32-bit check value */
  18049. var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */
  18050. var DONE = 29; /* finished check, done -- remain here until reset */
  18051. var BAD = 30; /* got a data error -- remain here until reset */
  18052. var MEM = 31; /* got an inflate() memory error -- remain here until reset */
  18053. var SYNC = 32; /* looking for synchronization bytes to restart inflate() */
  18054. /* ===========================================================================*/
  18055. var ENOUGH_LENS = 852;
  18056. var ENOUGH_DISTS = 592;
  18057. //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
  18058. var MAX_WBITS = 15;
  18059. /* 32K LZ77 window */
  18060. var DEF_WBITS = MAX_WBITS;
  18061. function zswap32(q) {
  18062. return (((q >>> 24) & 0xff) +
  18063. ((q >>> 8) & 0xff00) +
  18064. ((q & 0xff00) << 8) +
  18065. ((q & 0xff) << 24));
  18066. }
  18067. function InflateState() {
  18068. this.mode = 0; /* current inflate mode */
  18069. this.last = false; /* true if processing last block */
  18070. this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
  18071. this.havedict = false; /* true if dictionary provided */
  18072. this.flags = 0; /* gzip header method and flags (0 if zlib) */
  18073. this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */
  18074. this.check = 0; /* protected copy of check value */
  18075. this.total = 0; /* protected copy of output count */
  18076. // TODO: may be {}
  18077. this.head = null; /* where to save gzip header information */
  18078. /* sliding window */
  18079. this.wbits = 0; /* log base 2 of requested window size */
  18080. this.wsize = 0; /* window size or zero if not using window */
  18081. this.whave = 0; /* valid bytes in the window */
  18082. this.wnext = 0; /* window write index */
  18083. this.window = null; /* allocated sliding window, if needed */
  18084. /* bit accumulator */
  18085. this.hold = 0; /* input bit accumulator */
  18086. this.bits = 0; /* number of bits in "in" */
  18087. /* for string and stored block copying */
  18088. this.length = 0; /* literal or length of data to copy */
  18089. this.offset = 0; /* distance back to copy string from */
  18090. /* for table and code decoding */
  18091. this.extra = 0; /* extra bits needed */
  18092. /* fixed and dynamic code tables */
  18093. this.lencode = null; /* starting table for length/literal codes */
  18094. this.distcode = null; /* starting table for distance codes */
  18095. this.lenbits = 0; /* index bits for lencode */
  18096. this.distbits = 0; /* index bits for distcode */
  18097. /* dynamic table building */
  18098. this.ncode = 0; /* number of code length code lengths */
  18099. this.nlen = 0; /* number of length code lengths */
  18100. this.ndist = 0; /* number of distance code lengths */
  18101. this.have = 0; /* number of code lengths in lens[] */
  18102. this.next = null; /* next available space in codes[] */
  18103. this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
  18104. this.work = new utils.Buf16(288); /* work area for code table building */
  18105. /*
  18106. because we don't have pointers in js, we use lencode and distcode directly
  18107. as buffers so we don't need codes
  18108. */
  18109. //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */
  18110. this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */
  18111. this.distdyn = null; /* dynamic table for distance codes (JS specific) */
  18112. this.sane = 0; /* if false, allow invalid distance too far */
  18113. this.back = 0; /* bits back of last unprocessed length/lit */
  18114. this.was = 0; /* initial length of match */
  18115. }
  18116. function inflateResetKeep(strm) {
  18117. var state;
  18118. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  18119. state = strm.state;
  18120. strm.total_in = strm.total_out = state.total = 0;
  18121. strm.msg = ''; /*Z_NULL*/
  18122. if (state.wrap) { /* to support ill-conceived Java test suite */
  18123. strm.adler = state.wrap & 1;
  18124. }
  18125. state.mode = HEAD;
  18126. state.last = 0;
  18127. state.havedict = 0;
  18128. state.dmax = 32768;
  18129. state.head = null/*Z_NULL*/;
  18130. state.hold = 0;
  18131. state.bits = 0;
  18132. //state.lencode = state.distcode = state.next = state.codes;
  18133. state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
  18134. state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
  18135. state.sane = 1;
  18136. state.back = -1;
  18137. //Tracev((stderr, "inflate: reset\n"));
  18138. return Z_OK;
  18139. }
  18140. function inflateReset(strm) {
  18141. var state;
  18142. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  18143. state = strm.state;
  18144. state.wsize = 0;
  18145. state.whave = 0;
  18146. state.wnext = 0;
  18147. return inflateResetKeep(strm);
  18148. }
  18149. function inflateReset2(strm, windowBits) {
  18150. var wrap;
  18151. var state;
  18152. /* get the state */
  18153. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  18154. state = strm.state;
  18155. /* extract wrap request from windowBits parameter */
  18156. if (windowBits < 0) {
  18157. wrap = 0;
  18158. windowBits = -windowBits;
  18159. }
  18160. else {
  18161. wrap = (windowBits >> 4) + 1;
  18162. if (windowBits < 48) {
  18163. windowBits &= 15;
  18164. }
  18165. }
  18166. /* set number of window bits, free window if different */
  18167. if (windowBits && (windowBits < 8 || windowBits > 15)) {
  18168. return Z_STREAM_ERROR;
  18169. }
  18170. if (state.window !== null && state.wbits !== windowBits) {
  18171. state.window = null;
  18172. }
  18173. /* update state and reset the rest of it */
  18174. state.wrap = wrap;
  18175. state.wbits = windowBits;
  18176. return inflateReset(strm);
  18177. }
  18178. function inflateInit2(strm, windowBits) {
  18179. var ret;
  18180. var state;
  18181. if (!strm) { return Z_STREAM_ERROR; }
  18182. //strm.msg = Z_NULL; /* in case we return an error */
  18183. state = new InflateState();
  18184. //if (state === Z_NULL) return Z_MEM_ERROR;
  18185. //Tracev((stderr, "inflate: allocated\n"));
  18186. strm.state = state;
  18187. state.window = null/*Z_NULL*/;
  18188. ret = inflateReset2(strm, windowBits);
  18189. if (ret !== Z_OK) {
  18190. strm.state = null/*Z_NULL*/;
  18191. }
  18192. return ret;
  18193. }
  18194. function inflateInit(strm) {
  18195. return inflateInit2(strm, DEF_WBITS);
  18196. }
  18197. /*
  18198. Return state with length and distance decoding tables and index sizes set to
  18199. fixed code decoding. Normally this returns fixed tables from inffixed.h.
  18200. If BUILDFIXED is defined, then instead this routine builds the tables the
  18201. first time it's called, and returns those tables the first time and
  18202. thereafter. This reduces the size of the code by about 2K bytes, in
  18203. exchange for a little execution time. However, BUILDFIXED should not be
  18204. used for threaded applications, since the rewriting of the tables and virgin
  18205. may not be thread-safe.
  18206. */
  18207. var virgin = true;
  18208. var lenfix, distfix; // We have no pointers in JS, so keep tables separate
  18209. function fixedtables(state) {
  18210. /* build fixed huffman tables if first call (may not be thread safe) */
  18211. if (virgin) {
  18212. var sym;
  18213. lenfix = new utils.Buf32(512);
  18214. distfix = new utils.Buf32(32);
  18215. /* literal/length table */
  18216. sym = 0;
  18217. while (sym < 144) { state.lens[sym++] = 8; }
  18218. while (sym < 256) { state.lens[sym++] = 9; }
  18219. while (sym < 280) { state.lens[sym++] = 7; }
  18220. while (sym < 288) { state.lens[sym++] = 8; }
  18221. inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });
  18222. /* distance table */
  18223. sym = 0;
  18224. while (sym < 32) { state.lens[sym++] = 5; }
  18225. inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });
  18226. /* do this just once */
  18227. virgin = false;
  18228. }
  18229. state.lencode = lenfix;
  18230. state.lenbits = 9;
  18231. state.distcode = distfix;
  18232. state.distbits = 5;
  18233. }
  18234. /*
  18235. Update the window with the last wsize (normally 32K) bytes written before
  18236. returning. If window does not exist yet, create it. This is only called
  18237. when a window is already in use, or when output has been written during this
  18238. inflate call, but the end of the deflate stream has not been reached yet.
  18239. It is also called to create a window for dictionary data when a dictionary
  18240. is loaded.
  18241. Providing output buffers larger than 32K to inflate() should provide a speed
  18242. advantage, since only the last 32K of output is copied to the sliding window
  18243. upon return from inflate(), and since all distances after the first 32K of
  18244. output will fall in the output data, making match copies simpler and faster.
  18245. The advantage may be dependent on the size of the processor's data caches.
  18246. */
  18247. function updatewindow(strm, src, end, copy) {
  18248. var dist;
  18249. var state = strm.state;
  18250. /* if it hasn't been done already, allocate space for the window */
  18251. if (state.window === null) {
  18252. state.wsize = 1 << state.wbits;
  18253. state.wnext = 0;
  18254. state.whave = 0;
  18255. state.window = new utils.Buf8(state.wsize);
  18256. }
  18257. /* copy state->wsize or less output bytes into the circular window */
  18258. if (copy >= state.wsize) {
  18259. utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
  18260. state.wnext = 0;
  18261. state.whave = state.wsize;
  18262. }
  18263. else {
  18264. dist = state.wsize - state.wnext;
  18265. if (dist > copy) {
  18266. dist = copy;
  18267. }
  18268. //zmemcpy(state->window + state->wnext, end - copy, dist);
  18269. utils.arraySet(state.window, src, end - copy, dist, state.wnext);
  18270. copy -= dist;
  18271. if (copy) {
  18272. //zmemcpy(state->window, end - copy, copy);
  18273. utils.arraySet(state.window, src, end - copy, copy, 0);
  18274. state.wnext = copy;
  18275. state.whave = state.wsize;
  18276. }
  18277. else {
  18278. state.wnext += dist;
  18279. if (state.wnext === state.wsize) { state.wnext = 0; }
  18280. if (state.whave < state.wsize) { state.whave += dist; }
  18281. }
  18282. }
  18283. return 0;
  18284. }
  18285. function inflate(strm, flush) {
  18286. var state;
  18287. var input, output; // input/output buffers
  18288. var next; /* next input INDEX */
  18289. var put; /* next output INDEX */
  18290. var have, left; /* available input and output */
  18291. var hold; /* bit buffer */
  18292. var bits; /* bits in bit buffer */
  18293. var _in, _out; /* save starting available input and output */
  18294. var copy; /* number of stored or match bytes to copy */
  18295. var from; /* where to copy match bytes from */
  18296. var from_source;
  18297. var here = 0; /* current decoding table entry */
  18298. var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
  18299. //var last; /* parent table entry */
  18300. var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
  18301. var len; /* length to copy for repeats, bits to drop */
  18302. var ret; /* return code */
  18303. var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */
  18304. var opts;
  18305. var n; // temporary var for NEED_BITS
  18306. var order = /* permutation of code lengths */
  18307. [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];
  18308. if (!strm || !strm.state || !strm.output ||
  18309. (!strm.input && strm.avail_in !== 0)) {
  18310. return Z_STREAM_ERROR;
  18311. }
  18312. state = strm.state;
  18313. if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */
  18314. //--- LOAD() ---
  18315. put = strm.next_out;
  18316. output = strm.output;
  18317. left = strm.avail_out;
  18318. next = strm.next_in;
  18319. input = strm.input;
  18320. have = strm.avail_in;
  18321. hold = state.hold;
  18322. bits = state.bits;
  18323. //---
  18324. _in = have;
  18325. _out = left;
  18326. ret = Z_OK;
  18327. inf_leave: // goto emulation
  18328. for (;;) {
  18329. switch (state.mode) {
  18330. case HEAD:
  18331. if (state.wrap === 0) {
  18332. state.mode = TYPEDO;
  18333. break;
  18334. }
  18335. //=== NEEDBITS(16);
  18336. while (bits < 16) {
  18337. if (have === 0) { break inf_leave; }
  18338. have--;
  18339. hold += input[next++] << bits;
  18340. bits += 8;
  18341. }
  18342. //===//
  18343. if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */
  18344. state.check = 0/*crc32(0L, Z_NULL, 0)*/;
  18345. //=== CRC2(state.check, hold);
  18346. hbuf[0] = hold & 0xff;
  18347. hbuf[1] = (hold >>> 8) & 0xff;
  18348. state.check = crc32(state.check, hbuf, 2, 0);
  18349. //===//
  18350. //=== INITBITS();
  18351. hold = 0;
  18352. bits = 0;
  18353. //===//
  18354. state.mode = FLAGS;
  18355. break;
  18356. }
  18357. state.flags = 0; /* expect zlib header */
  18358. if (state.head) {
  18359. state.head.done = false;
  18360. }
  18361. if (!(state.wrap & 1) || /* check if zlib header allowed */
  18362. (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
  18363. strm.msg = 'incorrect header check';
  18364. state.mode = BAD;
  18365. break;
  18366. }
  18367. if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
  18368. strm.msg = 'unknown compression method';
  18369. state.mode = BAD;
  18370. break;
  18371. }
  18372. //--- DROPBITS(4) ---//
  18373. hold >>>= 4;
  18374. bits -= 4;
  18375. //---//
  18376. len = (hold & 0x0f)/*BITS(4)*/ + 8;
  18377. if (state.wbits === 0) {
  18378. state.wbits = len;
  18379. }
  18380. else if (len > state.wbits) {
  18381. strm.msg = 'invalid window size';
  18382. state.mode = BAD;
  18383. break;
  18384. }
  18385. state.dmax = 1 << len;
  18386. //Tracev((stderr, "inflate: zlib header ok\n"));
  18387. strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
  18388. state.mode = hold & 0x200 ? DICTID : TYPE;
  18389. //=== INITBITS();
  18390. hold = 0;
  18391. bits = 0;
  18392. //===//
  18393. break;
  18394. case FLAGS:
  18395. //=== NEEDBITS(16); */
  18396. while (bits < 16) {
  18397. if (have === 0) { break inf_leave; }
  18398. have--;
  18399. hold += input[next++] << bits;
  18400. bits += 8;
  18401. }
  18402. //===//
  18403. state.flags = hold;
  18404. if ((state.flags & 0xff) !== Z_DEFLATED) {
  18405. strm.msg = 'unknown compression method';
  18406. state.mode = BAD;
  18407. break;
  18408. }
  18409. if (state.flags & 0xe000) {
  18410. strm.msg = 'unknown header flags set';
  18411. state.mode = BAD;
  18412. break;
  18413. }
  18414. if (state.head) {
  18415. state.head.text = ((hold >> 8) & 1);
  18416. }
  18417. if (state.flags & 0x0200) {
  18418. //=== CRC2(state.check, hold);
  18419. hbuf[0] = hold & 0xff;
  18420. hbuf[1] = (hold >>> 8) & 0xff;
  18421. state.check = crc32(state.check, hbuf, 2, 0);
  18422. //===//
  18423. }
  18424. //=== INITBITS();
  18425. hold = 0;
  18426. bits = 0;
  18427. //===//
  18428. state.mode = TIME;
  18429. /* falls through */
  18430. case TIME:
  18431. //=== NEEDBITS(32); */
  18432. while (bits < 32) {
  18433. if (have === 0) { break inf_leave; }
  18434. have--;
  18435. hold += input[next++] << bits;
  18436. bits += 8;
  18437. }
  18438. //===//
  18439. if (state.head) {
  18440. state.head.time = hold;
  18441. }
  18442. if (state.flags & 0x0200) {
  18443. //=== CRC4(state.check, hold)
  18444. hbuf[0] = hold & 0xff;
  18445. hbuf[1] = (hold >>> 8) & 0xff;
  18446. hbuf[2] = (hold >>> 16) & 0xff;
  18447. hbuf[3] = (hold >>> 24) & 0xff;
  18448. state.check = crc32(state.check, hbuf, 4, 0);
  18449. //===
  18450. }
  18451. //=== INITBITS();
  18452. hold = 0;
  18453. bits = 0;
  18454. //===//
  18455. state.mode = OS;
  18456. /* falls through */
  18457. case OS:
  18458. //=== NEEDBITS(16); */
  18459. while (bits < 16) {
  18460. if (have === 0) { break inf_leave; }
  18461. have--;
  18462. hold += input[next++] << bits;
  18463. bits += 8;
  18464. }
  18465. //===//
  18466. if (state.head) {
  18467. state.head.xflags = (hold & 0xff);
  18468. state.head.os = (hold >> 8);
  18469. }
  18470. if (state.flags & 0x0200) {
  18471. //=== CRC2(state.check, hold);
  18472. hbuf[0] = hold & 0xff;
  18473. hbuf[1] = (hold >>> 8) & 0xff;
  18474. state.check = crc32(state.check, hbuf, 2, 0);
  18475. //===//
  18476. }
  18477. //=== INITBITS();
  18478. hold = 0;
  18479. bits = 0;
  18480. //===//
  18481. state.mode = EXLEN;
  18482. /* falls through */
  18483. case EXLEN:
  18484. if (state.flags & 0x0400) {
  18485. //=== NEEDBITS(16); */
  18486. while (bits < 16) {
  18487. if (have === 0) { break inf_leave; }
  18488. have--;
  18489. hold += input[next++] << bits;
  18490. bits += 8;
  18491. }
  18492. //===//
  18493. state.length = hold;
  18494. if (state.head) {
  18495. state.head.extra_len = hold;
  18496. }
  18497. if (state.flags & 0x0200) {
  18498. //=== CRC2(state.check, hold);
  18499. hbuf[0] = hold & 0xff;
  18500. hbuf[1] = (hold >>> 8) & 0xff;
  18501. state.check = crc32(state.check, hbuf, 2, 0);
  18502. //===//
  18503. }
  18504. //=== INITBITS();
  18505. hold = 0;
  18506. bits = 0;
  18507. //===//
  18508. }
  18509. else if (state.head) {
  18510. state.head.extra = null/*Z_NULL*/;
  18511. }
  18512. state.mode = EXTRA;
  18513. /* falls through */
  18514. case EXTRA:
  18515. if (state.flags & 0x0400) {
  18516. copy = state.length;
  18517. if (copy > have) { copy = have; }
  18518. if (copy) {
  18519. if (state.head) {
  18520. len = state.head.extra_len - state.length;
  18521. if (!state.head.extra) {
  18522. // Use untyped array for more convenient processing later
  18523. state.head.extra = new Array(state.head.extra_len);
  18524. }
  18525. utils.arraySet(
  18526. state.head.extra,
  18527. input,
  18528. next,
  18529. // extra field is limited to 65536 bytes
  18530. // - no need for additional size check
  18531. copy,
  18532. /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
  18533. len
  18534. );
  18535. //zmemcpy(state.head.extra + len, next,
  18536. // len + copy > state.head.extra_max ?
  18537. // state.head.extra_max - len : copy);
  18538. }
  18539. if (state.flags & 0x0200) {
  18540. state.check = crc32(state.check, input, copy, next);
  18541. }
  18542. have -= copy;
  18543. next += copy;
  18544. state.length -= copy;
  18545. }
  18546. if (state.length) { break inf_leave; }
  18547. }
  18548. state.length = 0;
  18549. state.mode = NAME;
  18550. /* falls through */
  18551. case NAME:
  18552. if (state.flags & 0x0800) {
  18553. if (have === 0) { break inf_leave; }
  18554. copy = 0;
  18555. do {
  18556. // TODO: 2 or 1 bytes?
  18557. len = input[next + copy++];
  18558. /* use constant limit because in js we should not preallocate memory */
  18559. if (state.head && len &&
  18560. (state.length < 65536 /*state.head.name_max*/)) {
  18561. state.head.name += String.fromCharCode(len);
  18562. }
  18563. } while (len && copy < have);
  18564. if (state.flags & 0x0200) {
  18565. state.check = crc32(state.check, input, copy, next);
  18566. }
  18567. have -= copy;
  18568. next += copy;
  18569. if (len) { break inf_leave; }
  18570. }
  18571. else if (state.head) {
  18572. state.head.name = null;
  18573. }
  18574. state.length = 0;
  18575. state.mode = COMMENT;
  18576. /* falls through */
  18577. case COMMENT:
  18578. if (state.flags & 0x1000) {
  18579. if (have === 0) { break inf_leave; }
  18580. copy = 0;
  18581. do {
  18582. len = input[next + copy++];
  18583. /* use constant limit because in js we should not preallocate memory */
  18584. if (state.head && len &&
  18585. (state.length < 65536 /*state.head.comm_max*/)) {
  18586. state.head.comment += String.fromCharCode(len);
  18587. }
  18588. } while (len && copy < have);
  18589. if (state.flags & 0x0200) {
  18590. state.check = crc32(state.check, input, copy, next);
  18591. }
  18592. have -= copy;
  18593. next += copy;
  18594. if (len) { break inf_leave; }
  18595. }
  18596. else if (state.head) {
  18597. state.head.comment = null;
  18598. }
  18599. state.mode = HCRC;
  18600. /* falls through */
  18601. case HCRC:
  18602. if (state.flags & 0x0200) {
  18603. //=== NEEDBITS(16); */
  18604. while (bits < 16) {
  18605. if (have === 0) { break inf_leave; }
  18606. have--;
  18607. hold += input[next++] << bits;
  18608. bits += 8;
  18609. }
  18610. //===//
  18611. if (hold !== (state.check & 0xffff)) {
  18612. strm.msg = 'header crc mismatch';
  18613. state.mode = BAD;
  18614. break;
  18615. }
  18616. //=== INITBITS();
  18617. hold = 0;
  18618. bits = 0;
  18619. //===//
  18620. }
  18621. if (state.head) {
  18622. state.head.hcrc = ((state.flags >> 9) & 1);
  18623. state.head.done = true;
  18624. }
  18625. strm.adler = state.check = 0;
  18626. state.mode = TYPE;
  18627. break;
  18628. case DICTID:
  18629. //=== NEEDBITS(32); */
  18630. while (bits < 32) {
  18631. if (have === 0) { break inf_leave; }
  18632. have--;
  18633. hold += input[next++] << bits;
  18634. bits += 8;
  18635. }
  18636. //===//
  18637. strm.adler = state.check = zswap32(hold);
  18638. //=== INITBITS();
  18639. hold = 0;
  18640. bits = 0;
  18641. //===//
  18642. state.mode = DICT;
  18643. /* falls through */
  18644. case DICT:
  18645. if (state.havedict === 0) {
  18646. //--- RESTORE() ---
  18647. strm.next_out = put;
  18648. strm.avail_out = left;
  18649. strm.next_in = next;
  18650. strm.avail_in = have;
  18651. state.hold = hold;
  18652. state.bits = bits;
  18653. //---
  18654. return Z_NEED_DICT;
  18655. }
  18656. strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
  18657. state.mode = TYPE;
  18658. /* falls through */
  18659. case TYPE:
  18660. if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
  18661. /* falls through */
  18662. case TYPEDO:
  18663. if (state.last) {
  18664. //--- BYTEBITS() ---//
  18665. hold >>>= bits & 7;
  18666. bits -= bits & 7;
  18667. //---//
  18668. state.mode = CHECK;
  18669. break;
  18670. }
  18671. //=== NEEDBITS(3); */
  18672. while (bits < 3) {
  18673. if (have === 0) { break inf_leave; }
  18674. have--;
  18675. hold += input[next++] << bits;
  18676. bits += 8;
  18677. }
  18678. //===//
  18679. state.last = (hold & 0x01)/*BITS(1)*/;
  18680. //--- DROPBITS(1) ---//
  18681. hold >>>= 1;
  18682. bits -= 1;
  18683. //---//
  18684. switch ((hold & 0x03)/*BITS(2)*/) {
  18685. case 0: /* stored block */
  18686. //Tracev((stderr, "inflate: stored block%s\n",
  18687. // state.last ? " (last)" : ""));
  18688. state.mode = STORED;
  18689. break;
  18690. case 1: /* fixed block */
  18691. fixedtables(state);
  18692. //Tracev((stderr, "inflate: fixed codes block%s\n",
  18693. // state.last ? " (last)" : ""));
  18694. state.mode = LEN_; /* decode codes */
  18695. if (flush === Z_TREES) {
  18696. //--- DROPBITS(2) ---//
  18697. hold >>>= 2;
  18698. bits -= 2;
  18699. //---//
  18700. break inf_leave;
  18701. }
  18702. break;
  18703. case 2: /* dynamic block */
  18704. //Tracev((stderr, "inflate: dynamic codes block%s\n",
  18705. // state.last ? " (last)" : ""));
  18706. state.mode = TABLE;
  18707. break;
  18708. case 3:
  18709. strm.msg = 'invalid block type';
  18710. state.mode = BAD;
  18711. }
  18712. //--- DROPBITS(2) ---//
  18713. hold >>>= 2;
  18714. bits -= 2;
  18715. //---//
  18716. break;
  18717. case STORED:
  18718. //--- BYTEBITS() ---// /* go to byte boundary */
  18719. hold >>>= bits & 7;
  18720. bits -= bits & 7;
  18721. //---//
  18722. //=== NEEDBITS(32); */
  18723. while (bits < 32) {
  18724. if (have === 0) { break inf_leave; }
  18725. have--;
  18726. hold += input[next++] << bits;
  18727. bits += 8;
  18728. }
  18729. //===//
  18730. if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
  18731. strm.msg = 'invalid stored block lengths';
  18732. state.mode = BAD;
  18733. break;
  18734. }
  18735. state.length = hold & 0xffff;
  18736. //Tracev((stderr, "inflate: stored length %u\n",
  18737. // state.length));
  18738. //=== INITBITS();
  18739. hold = 0;
  18740. bits = 0;
  18741. //===//
  18742. state.mode = COPY_;
  18743. if (flush === Z_TREES) { break inf_leave; }
  18744. /* falls through */
  18745. case COPY_:
  18746. state.mode = COPY;
  18747. /* falls through */
  18748. case COPY:
  18749. copy = state.length;
  18750. if (copy) {
  18751. if (copy > have) { copy = have; }
  18752. if (copy > left) { copy = left; }
  18753. if (copy === 0) { break inf_leave; }
  18754. //--- zmemcpy(put, next, copy); ---
  18755. utils.arraySet(output, input, next, copy, put);
  18756. //---//
  18757. have -= copy;
  18758. next += copy;
  18759. left -= copy;
  18760. put += copy;
  18761. state.length -= copy;
  18762. break;
  18763. }
  18764. //Tracev((stderr, "inflate: stored end\n"));
  18765. state.mode = TYPE;
  18766. break;
  18767. case TABLE:
  18768. //=== NEEDBITS(14); */
  18769. while (bits < 14) {
  18770. if (have === 0) { break inf_leave; }
  18771. have--;
  18772. hold += input[next++] << bits;
  18773. bits += 8;
  18774. }
  18775. //===//
  18776. state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
  18777. //--- DROPBITS(5) ---//
  18778. hold >>>= 5;
  18779. bits -= 5;
  18780. //---//
  18781. state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
  18782. //--- DROPBITS(5) ---//
  18783. hold >>>= 5;
  18784. bits -= 5;
  18785. //---//
  18786. state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
  18787. //--- DROPBITS(4) ---//
  18788. hold >>>= 4;
  18789. bits -= 4;
  18790. //---//
  18791. //#ifndef PKZIP_BUG_WORKAROUND
  18792. if (state.nlen > 286 || state.ndist > 30) {
  18793. strm.msg = 'too many length or distance symbols';
  18794. state.mode = BAD;
  18795. break;
  18796. }
  18797. //#endif
  18798. //Tracev((stderr, "inflate: table sizes ok\n"));
  18799. state.have = 0;
  18800. state.mode = LENLENS;
  18801. /* falls through */
  18802. case LENLENS:
  18803. while (state.have < state.ncode) {
  18804. //=== NEEDBITS(3);
  18805. while (bits < 3) {
  18806. if (have === 0) { break inf_leave; }
  18807. have--;
  18808. hold += input[next++] << bits;
  18809. bits += 8;
  18810. }
  18811. //===//
  18812. state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
  18813. //--- DROPBITS(3) ---//
  18814. hold >>>= 3;
  18815. bits -= 3;
  18816. //---//
  18817. }
  18818. while (state.have < 19) {
  18819. state.lens[order[state.have++]] = 0;
  18820. }
  18821. // We have separate tables & no pointers. 2 commented lines below not needed.
  18822. //state.next = state.codes;
  18823. //state.lencode = state.next;
  18824. // Switch to use dynamic table
  18825. state.lencode = state.lendyn;
  18826. state.lenbits = 7;
  18827. opts = { bits: state.lenbits };
  18828. ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
  18829. state.lenbits = opts.bits;
  18830. if (ret) {
  18831. strm.msg = 'invalid code lengths set';
  18832. state.mode = BAD;
  18833. break;
  18834. }
  18835. //Tracev((stderr, "inflate: code lengths ok\n"));
  18836. state.have = 0;
  18837. state.mode = CODELENS;
  18838. /* falls through */
  18839. case CODELENS:
  18840. while (state.have < state.nlen + state.ndist) {
  18841. for (;;) {
  18842. here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
  18843. here_bits = here >>> 24;
  18844. here_op = (here >>> 16) & 0xff;
  18845. here_val = here & 0xffff;
  18846. if ((here_bits) <= bits) { break; }
  18847. //--- PULLBYTE() ---//
  18848. if (have === 0) { break inf_leave; }
  18849. have--;
  18850. hold += input[next++] << bits;
  18851. bits += 8;
  18852. //---//
  18853. }
  18854. if (here_val < 16) {
  18855. //--- DROPBITS(here.bits) ---//
  18856. hold >>>= here_bits;
  18857. bits -= here_bits;
  18858. //---//
  18859. state.lens[state.have++] = here_val;
  18860. }
  18861. else {
  18862. if (here_val === 16) {
  18863. //=== NEEDBITS(here.bits + 2);
  18864. n = here_bits + 2;
  18865. while (bits < n) {
  18866. if (have === 0) { break inf_leave; }
  18867. have--;
  18868. hold += input[next++] << bits;
  18869. bits += 8;
  18870. }
  18871. //===//
  18872. //--- DROPBITS(here.bits) ---//
  18873. hold >>>= here_bits;
  18874. bits -= here_bits;
  18875. //---//
  18876. if (state.have === 0) {
  18877. strm.msg = 'invalid bit length repeat';
  18878. state.mode = BAD;
  18879. break;
  18880. }
  18881. len = state.lens[state.have - 1];
  18882. copy = 3 + (hold & 0x03);//BITS(2);
  18883. //--- DROPBITS(2) ---//
  18884. hold >>>= 2;
  18885. bits -= 2;
  18886. //---//
  18887. }
  18888. else if (here_val === 17) {
  18889. //=== NEEDBITS(here.bits + 3);
  18890. n = here_bits + 3;
  18891. while (bits < n) {
  18892. if (have === 0) { break inf_leave; }
  18893. have--;
  18894. hold += input[next++] << bits;
  18895. bits += 8;
  18896. }
  18897. //===//
  18898. //--- DROPBITS(here.bits) ---//
  18899. hold >>>= here_bits;
  18900. bits -= here_bits;
  18901. //---//
  18902. len = 0;
  18903. copy = 3 + (hold & 0x07);//BITS(3);
  18904. //--- DROPBITS(3) ---//
  18905. hold >>>= 3;
  18906. bits -= 3;
  18907. //---//
  18908. }
  18909. else {
  18910. //=== NEEDBITS(here.bits + 7);
  18911. n = here_bits + 7;
  18912. while (bits < n) {
  18913. if (have === 0) { break inf_leave; }
  18914. have--;
  18915. hold += input[next++] << bits;
  18916. bits += 8;
  18917. }
  18918. //===//
  18919. //--- DROPBITS(here.bits) ---//
  18920. hold >>>= here_bits;
  18921. bits -= here_bits;
  18922. //---//
  18923. len = 0;
  18924. copy = 11 + (hold & 0x7f);//BITS(7);
  18925. //--- DROPBITS(7) ---//
  18926. hold >>>= 7;
  18927. bits -= 7;
  18928. //---//
  18929. }
  18930. if (state.have + copy > state.nlen + state.ndist) {
  18931. strm.msg = 'invalid bit length repeat';
  18932. state.mode = BAD;
  18933. break;
  18934. }
  18935. while (copy--) {
  18936. state.lens[state.have++] = len;
  18937. }
  18938. }
  18939. }
  18940. /* handle error breaks in while */
  18941. if (state.mode === BAD) { break; }
  18942. /* check for end-of-block code (better have one) */
  18943. if (state.lens[256] === 0) {
  18944. strm.msg = 'invalid code -- missing end-of-block';
  18945. state.mode = BAD;
  18946. break;
  18947. }
  18948. /* build code tables -- note: do not change the lenbits or distbits
  18949. values here (9 and 6) without reading the comments in inftrees.h
  18950. concerning the ENOUGH constants, which depend on those values */
  18951. state.lenbits = 9;
  18952. opts = { bits: state.lenbits };
  18953. ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
  18954. // We have separate tables & no pointers. 2 commented lines below not needed.
  18955. // state.next_index = opts.table_index;
  18956. state.lenbits = opts.bits;
  18957. // state.lencode = state.next;
  18958. if (ret) {
  18959. strm.msg = 'invalid literal/lengths set';
  18960. state.mode = BAD;
  18961. break;
  18962. }
  18963. state.distbits = 6;
  18964. //state.distcode.copy(state.codes);
  18965. // Switch to use dynamic table
  18966. state.distcode = state.distdyn;
  18967. opts = { bits: state.distbits };
  18968. ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
  18969. // We have separate tables & no pointers. 2 commented lines below not needed.
  18970. // state.next_index = opts.table_index;
  18971. state.distbits = opts.bits;
  18972. // state.distcode = state.next;
  18973. if (ret) {
  18974. strm.msg = 'invalid distances set';
  18975. state.mode = BAD;
  18976. break;
  18977. }
  18978. //Tracev((stderr, 'inflate: codes ok\n'));
  18979. state.mode = LEN_;
  18980. if (flush === Z_TREES) { break inf_leave; }
  18981. /* falls through */
  18982. case LEN_:
  18983. state.mode = LEN;
  18984. /* falls through */
  18985. case LEN:
  18986. if (have >= 6 && left >= 258) {
  18987. //--- RESTORE() ---
  18988. strm.next_out = put;
  18989. strm.avail_out = left;
  18990. strm.next_in = next;
  18991. strm.avail_in = have;
  18992. state.hold = hold;
  18993. state.bits = bits;
  18994. //---
  18995. inflate_fast(strm, _out);
  18996. //--- LOAD() ---
  18997. put = strm.next_out;
  18998. output = strm.output;
  18999. left = strm.avail_out;
  19000. next = strm.next_in;
  19001. input = strm.input;
  19002. have = strm.avail_in;
  19003. hold = state.hold;
  19004. bits = state.bits;
  19005. //---
  19006. if (state.mode === TYPE) {
  19007. state.back = -1;
  19008. }
  19009. break;
  19010. }
  19011. state.back = 0;
  19012. for (;;) {
  19013. here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/
  19014. here_bits = here >>> 24;
  19015. here_op = (here >>> 16) & 0xff;
  19016. here_val = here & 0xffff;
  19017. if (here_bits <= bits) { break; }
  19018. //--- PULLBYTE() ---//
  19019. if (have === 0) { break inf_leave; }
  19020. have--;
  19021. hold += input[next++] << bits;
  19022. bits += 8;
  19023. //---//
  19024. }
  19025. if (here_op && (here_op & 0xf0) === 0) {
  19026. last_bits = here_bits;
  19027. last_op = here_op;
  19028. last_val = here_val;
  19029. for (;;) {
  19030. here = state.lencode[last_val +
  19031. ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
  19032. here_bits = here >>> 24;
  19033. here_op = (here >>> 16) & 0xff;
  19034. here_val = here & 0xffff;
  19035. if ((last_bits + here_bits) <= bits) { break; }
  19036. //--- PULLBYTE() ---//
  19037. if (have === 0) { break inf_leave; }
  19038. have--;
  19039. hold += input[next++] << bits;
  19040. bits += 8;
  19041. //---//
  19042. }
  19043. //--- DROPBITS(last.bits) ---//
  19044. hold >>>= last_bits;
  19045. bits -= last_bits;
  19046. //---//
  19047. state.back += last_bits;
  19048. }
  19049. //--- DROPBITS(here.bits) ---//
  19050. hold >>>= here_bits;
  19051. bits -= here_bits;
  19052. //---//
  19053. state.back += here_bits;
  19054. state.length = here_val;
  19055. if (here_op === 0) {
  19056. //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
  19057. // "inflate: literal '%c'\n" :
  19058. // "inflate: literal 0x%02x\n", here.val));
  19059. state.mode = LIT;
  19060. break;
  19061. }
  19062. if (here_op & 32) {
  19063. //Tracevv((stderr, "inflate: end of block\n"));
  19064. state.back = -1;
  19065. state.mode = TYPE;
  19066. break;
  19067. }
  19068. if (here_op & 64) {
  19069. strm.msg = 'invalid literal/length code';
  19070. state.mode = BAD;
  19071. break;
  19072. }
  19073. state.extra = here_op & 15;
  19074. state.mode = LENEXT;
  19075. /* falls through */
  19076. case LENEXT:
  19077. if (state.extra) {
  19078. //=== NEEDBITS(state.extra);
  19079. n = state.extra;
  19080. while (bits < n) {
  19081. if (have === 0) { break inf_leave; }
  19082. have--;
  19083. hold += input[next++] << bits;
  19084. bits += 8;
  19085. }
  19086. //===//
  19087. state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
  19088. //--- DROPBITS(state.extra) ---//
  19089. hold >>>= state.extra;
  19090. bits -= state.extra;
  19091. //---//
  19092. state.back += state.extra;
  19093. }
  19094. //Tracevv((stderr, "inflate: length %u\n", state.length));
  19095. state.was = state.length;
  19096. state.mode = DIST;
  19097. /* falls through */
  19098. case DIST:
  19099. for (;;) {
  19100. here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
  19101. here_bits = here >>> 24;
  19102. here_op = (here >>> 16) & 0xff;
  19103. here_val = here & 0xffff;
  19104. if ((here_bits) <= bits) { break; }
  19105. //--- PULLBYTE() ---//
  19106. if (have === 0) { break inf_leave; }
  19107. have--;
  19108. hold += input[next++] << bits;
  19109. bits += 8;
  19110. //---//
  19111. }
  19112. if ((here_op & 0xf0) === 0) {
  19113. last_bits = here_bits;
  19114. last_op = here_op;
  19115. last_val = here_val;
  19116. for (;;) {
  19117. here = state.distcode[last_val +
  19118. ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
  19119. here_bits = here >>> 24;
  19120. here_op = (here >>> 16) & 0xff;
  19121. here_val = here & 0xffff;
  19122. if ((last_bits + here_bits) <= bits) { break; }
  19123. //--- PULLBYTE() ---//
  19124. if (have === 0) { break inf_leave; }
  19125. have--;
  19126. hold += input[next++] << bits;
  19127. bits += 8;
  19128. //---//
  19129. }
  19130. //--- DROPBITS(last.bits) ---//
  19131. hold >>>= last_bits;
  19132. bits -= last_bits;
  19133. //---//
  19134. state.back += last_bits;
  19135. }
  19136. //--- DROPBITS(here.bits) ---//
  19137. hold >>>= here_bits;
  19138. bits -= here_bits;
  19139. //---//
  19140. state.back += here_bits;
  19141. if (here_op & 64) {
  19142. strm.msg = 'invalid distance code';
  19143. state.mode = BAD;
  19144. break;
  19145. }
  19146. state.offset = here_val;
  19147. state.extra = (here_op) & 15;
  19148. state.mode = DISTEXT;
  19149. /* falls through */
  19150. case DISTEXT:
  19151. if (state.extra) {
  19152. //=== NEEDBITS(state.extra);
  19153. n = state.extra;
  19154. while (bits < n) {
  19155. if (have === 0) { break inf_leave; }
  19156. have--;
  19157. hold += input[next++] << bits;
  19158. bits += 8;
  19159. }
  19160. //===//
  19161. state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
  19162. //--- DROPBITS(state.extra) ---//
  19163. hold >>>= state.extra;
  19164. bits -= state.extra;
  19165. //---//
  19166. state.back += state.extra;
  19167. }
  19168. //#ifdef INFLATE_STRICT
  19169. if (state.offset > state.dmax) {
  19170. strm.msg = 'invalid distance too far back';
  19171. state.mode = BAD;
  19172. break;
  19173. }
  19174. //#endif
  19175. //Tracevv((stderr, "inflate: distance %u\n", state.offset));
  19176. state.mode = MATCH;
  19177. /* falls through */
  19178. case MATCH:
  19179. if (left === 0) { break inf_leave; }
  19180. copy = _out - left;
  19181. if (state.offset > copy) { /* copy from window */
  19182. copy = state.offset - copy;
  19183. if (copy > state.whave) {
  19184. if (state.sane) {
  19185. strm.msg = 'invalid distance too far back';
  19186. state.mode = BAD;
  19187. break;
  19188. }
  19189. // (!) This block is disabled in zlib defaults,
  19190. // don't enable it for binary compatibility
  19191. //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
  19192. // Trace((stderr, "inflate.c too far\n"));
  19193. // copy -= state.whave;
  19194. // if (copy > state.length) { copy = state.length; }
  19195. // if (copy > left) { copy = left; }
  19196. // left -= copy;
  19197. // state.length -= copy;
  19198. // do {
  19199. // output[put++] = 0;
  19200. // } while (--copy);
  19201. // if (state.length === 0) { state.mode = LEN; }
  19202. // break;
  19203. //#endif
  19204. }
  19205. if (copy > state.wnext) {
  19206. copy -= state.wnext;
  19207. from = state.wsize - copy;
  19208. }
  19209. else {
  19210. from = state.wnext - copy;
  19211. }
  19212. if (copy > state.length) { copy = state.length; }
  19213. from_source = state.window;
  19214. }
  19215. else { /* copy from output */
  19216. from_source = output;
  19217. from = put - state.offset;
  19218. copy = state.length;
  19219. }
  19220. if (copy > left) { copy = left; }
  19221. left -= copy;
  19222. state.length -= copy;
  19223. do {
  19224. output[put++] = from_source[from++];
  19225. } while (--copy);
  19226. if (state.length === 0) { state.mode = LEN; }
  19227. break;
  19228. case LIT:
  19229. if (left === 0) { break inf_leave; }
  19230. output[put++] = state.length;
  19231. left--;
  19232. state.mode = LEN;
  19233. break;
  19234. case CHECK:
  19235. if (state.wrap) {
  19236. //=== NEEDBITS(32);
  19237. while (bits < 32) {
  19238. if (have === 0) { break inf_leave; }
  19239. have--;
  19240. // Use '|' instead of '+' to make sure that result is signed
  19241. hold |= input[next++] << bits;
  19242. bits += 8;
  19243. }
  19244. //===//
  19245. _out -= left;
  19246. strm.total_out += _out;
  19247. state.total += _out;
  19248. if (_out) {
  19249. strm.adler = state.check =
  19250. /*UPDATE(state.check, put - _out, _out);*/
  19251. (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
  19252. }
  19253. _out = left;
  19254. // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
  19255. if ((state.flags ? hold : zswap32(hold)) !== state.check) {
  19256. strm.msg = 'incorrect data check';
  19257. state.mode = BAD;
  19258. break;
  19259. }
  19260. //=== INITBITS();
  19261. hold = 0;
  19262. bits = 0;
  19263. //===//
  19264. //Tracev((stderr, "inflate: check matches trailer\n"));
  19265. }
  19266. state.mode = LENGTH;
  19267. /* falls through */
  19268. case LENGTH:
  19269. if (state.wrap && state.flags) {
  19270. //=== NEEDBITS(32);
  19271. while (bits < 32) {
  19272. if (have === 0) { break inf_leave; }
  19273. have--;
  19274. hold += input[next++] << bits;
  19275. bits += 8;
  19276. }
  19277. //===//
  19278. if (hold !== (state.total & 0xffffffff)) {
  19279. strm.msg = 'incorrect length check';
  19280. state.mode = BAD;
  19281. break;
  19282. }
  19283. //=== INITBITS();
  19284. hold = 0;
  19285. bits = 0;
  19286. //===//
  19287. //Tracev((stderr, "inflate: length matches trailer\n"));
  19288. }
  19289. state.mode = DONE;
  19290. /* falls through */
  19291. case DONE:
  19292. ret = Z_STREAM_END;
  19293. break inf_leave;
  19294. case BAD:
  19295. ret = Z_DATA_ERROR;
  19296. break inf_leave;
  19297. case MEM:
  19298. return Z_MEM_ERROR;
  19299. case SYNC:
  19300. /* falls through */
  19301. default:
  19302. return Z_STREAM_ERROR;
  19303. }
  19304. }
  19305. // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
  19306. /*
  19307. Return from inflate(), updating the total counts and the check value.
  19308. If there was no progress during the inflate() call, return a buffer
  19309. error. Call updatewindow() to create and/or update the window state.
  19310. Note: a memory error from inflate() is non-recoverable.
  19311. */
  19312. //--- RESTORE() ---
  19313. strm.next_out = put;
  19314. strm.avail_out = left;
  19315. strm.next_in = next;
  19316. strm.avail_in = have;
  19317. state.hold = hold;
  19318. state.bits = bits;
  19319. //---
  19320. if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
  19321. (state.mode < CHECK || flush !== Z_FINISH))) {
  19322. if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
  19323. state.mode = MEM;
  19324. return Z_MEM_ERROR;
  19325. }
  19326. }
  19327. _in -= strm.avail_in;
  19328. _out -= strm.avail_out;
  19329. strm.total_in += _in;
  19330. strm.total_out += _out;
  19331. state.total += _out;
  19332. if (state.wrap && _out) {
  19333. strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
  19334. (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
  19335. }
  19336. strm.data_type = state.bits + (state.last ? 64 : 0) +
  19337. (state.mode === TYPE ? 128 : 0) +
  19338. (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
  19339. if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
  19340. ret = Z_BUF_ERROR;
  19341. }
  19342. return ret;
  19343. }
  19344. function inflateEnd(strm) {
  19345. if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
  19346. return Z_STREAM_ERROR;
  19347. }
  19348. var state = strm.state;
  19349. if (state.window) {
  19350. state.window = null;
  19351. }
  19352. strm.state = null;
  19353. return Z_OK;
  19354. }
  19355. function inflateGetHeader(strm, head) {
  19356. var state;
  19357. /* check state */
  19358. if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  19359. state = strm.state;
  19360. if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
  19361. /* save header structure */
  19362. state.head = head;
  19363. head.done = false;
  19364. return Z_OK;
  19365. }
  19366. function inflateSetDictionary(strm, dictionary) {
  19367. var dictLength = dictionary.length;
  19368. var state;
  19369. var dictid;
  19370. var ret;
  19371. /* check state */
  19372. if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }
  19373. state = strm.state;
  19374. if (state.wrap !== 0 && state.mode !== DICT) {
  19375. return Z_STREAM_ERROR;
  19376. }
  19377. /* check for correct dictionary identifier */
  19378. if (state.mode === DICT) {
  19379. dictid = 1; /* adler32(0, null, 0)*/
  19380. /* dictid = adler32(dictid, dictionary, dictLength); */
  19381. dictid = adler32(dictid, dictionary, dictLength, 0);
  19382. if (dictid !== state.check) {
  19383. return Z_DATA_ERROR;
  19384. }
  19385. }
  19386. /* copy dictionary to window using updatewindow(), which will amend the
  19387. existing dictionary if appropriate */
  19388. ret = updatewindow(strm, dictionary, dictLength, dictLength);
  19389. if (ret) {
  19390. state.mode = MEM;
  19391. return Z_MEM_ERROR;
  19392. }
  19393. state.havedict = 1;
  19394. // Tracev((stderr, "inflate: dictionary set\n"));
  19395. return Z_OK;
  19396. }
  19397. exports.inflateReset = inflateReset;
  19398. exports.inflateReset2 = inflateReset2;
  19399. exports.inflateResetKeep = inflateResetKeep;
  19400. exports.inflateInit = inflateInit;
  19401. exports.inflateInit2 = inflateInit2;
  19402. exports.inflate = inflate;
  19403. exports.inflateEnd = inflateEnd;
  19404. exports.inflateGetHeader = inflateGetHeader;
  19405. exports.inflateSetDictionary = inflateSetDictionary;
  19406. exports.inflateInfo = 'pako inflate (from Nodeca project)';
  19407. /* Not implemented
  19408. exports.inflateCopy = inflateCopy;
  19409. exports.inflateGetDictionary = inflateGetDictionary;
  19410. exports.inflateMark = inflateMark;
  19411. exports.inflatePrime = inflatePrime;
  19412. exports.inflateSync = inflateSync;
  19413. exports.inflateSyncPoint = inflateSyncPoint;
  19414. exports.inflateUndermine = inflateUndermine;
  19415. */
  19416. /***/ }),
  19417. /***/ 11375:
  19418. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  19419. "use strict";
  19420. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  19421. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  19422. //
  19423. // This software is provided 'as-is', without any express or implied
  19424. // warranty. In no event will the authors be held liable for any damages
  19425. // arising from the use of this software.
  19426. //
  19427. // Permission is granted to anyone to use this software for any purpose,
  19428. // including commercial applications, and to alter it and redistribute it
  19429. // freely, subject to the following restrictions:
  19430. //
  19431. // 1. The origin of this software must not be misrepresented; you must not
  19432. // claim that you wrote the original software. If you use this software
  19433. // in a product, an acknowledgment in the product documentation would be
  19434. // appreciated but is not required.
  19435. // 2. Altered source versions must be plainly marked as such, and must not be
  19436. // misrepresented as being the original software.
  19437. // 3. This notice may not be removed or altered from any source distribution.
  19438. var utils = __webpack_require__(6907);
  19439. var MAXBITS = 15;
  19440. var ENOUGH_LENS = 852;
  19441. var ENOUGH_DISTS = 592;
  19442. //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
  19443. var CODES = 0;
  19444. var LENS = 1;
  19445. var DISTS = 2;
  19446. var lbase = [ /* Length codes 257..285 base */
  19447. 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
  19448. 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
  19449. ];
  19450. var lext = [ /* Length codes 257..285 extra */
  19451. 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
  19452. 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
  19453. ];
  19454. var dbase = [ /* Distance codes 0..29 base */
  19455. 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
  19456. 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
  19457. 8193, 12289, 16385, 24577, 0, 0
  19458. ];
  19459. var dext = [ /* Distance codes 0..29 extra */
  19460. 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
  19461. 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
  19462. 28, 28, 29, 29, 64, 64
  19463. ];
  19464. module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
  19465. {
  19466. var bits = opts.bits;
  19467. //here = opts.here; /* table entry for duplication */
  19468. var len = 0; /* a code's length in bits */
  19469. var sym = 0; /* index of code symbols */
  19470. var min = 0, max = 0; /* minimum and maximum code lengths */
  19471. var root = 0; /* number of index bits for root table */
  19472. var curr = 0; /* number of index bits for current table */
  19473. var drop = 0; /* code bits to drop for sub-table */
  19474. var left = 0; /* number of prefix codes available */
  19475. var used = 0; /* code entries in table used */
  19476. var huff = 0; /* Huffman code */
  19477. var incr; /* for incrementing code, index */
  19478. var fill; /* index for replicating entries */
  19479. var low; /* low bits for current root entry */
  19480. var mask; /* mask for low root bits */
  19481. var next; /* next available space in table */
  19482. var base = null; /* base value table to use */
  19483. var base_index = 0;
  19484. // var shoextra; /* extra bits table to use */
  19485. var end; /* use base and extra for symbol > end */
  19486. var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */
  19487. var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */
  19488. var extra = null;
  19489. var extra_index = 0;
  19490. var here_bits, here_op, here_val;
  19491. /*
  19492. Process a set of code lengths to create a canonical Huffman code. The
  19493. code lengths are lens[0..codes-1]. Each length corresponds to the
  19494. symbols 0..codes-1. The Huffman code is generated by first sorting the
  19495. symbols by length from short to long, and retaining the symbol order
  19496. for codes with equal lengths. Then the code starts with all zero bits
  19497. for the first code of the shortest length, and the codes are integer
  19498. increments for the same length, and zeros are appended as the length
  19499. increases. For the deflate format, these bits are stored backwards
  19500. from their more natural integer increment ordering, and so when the
  19501. decoding tables are built in the large loop below, the integer codes
  19502. are incremented backwards.
  19503. This routine assumes, but does not check, that all of the entries in
  19504. lens[] are in the range 0..MAXBITS. The caller must assure this.
  19505. 1..MAXBITS is interpreted as that code length. zero means that that
  19506. symbol does not occur in this code.
  19507. The codes are sorted by computing a count of codes for each length,
  19508. creating from that a table of starting indices for each length in the
  19509. sorted table, and then entering the symbols in order in the sorted
  19510. table. The sorted table is work[], with that space being provided by
  19511. the caller.
  19512. The length counts are used for other purposes as well, i.e. finding
  19513. the minimum and maximum length codes, determining if there are any
  19514. codes at all, checking for a valid set of lengths, and looking ahead
  19515. at length counts to determine sub-table sizes when building the
  19516. decoding tables.
  19517. */
  19518. /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
  19519. for (len = 0; len <= MAXBITS; len++) {
  19520. count[len] = 0;
  19521. }
  19522. for (sym = 0; sym < codes; sym++) {
  19523. count[lens[lens_index + sym]]++;
  19524. }
  19525. /* bound code lengths, force root to be within code lengths */
  19526. root = bits;
  19527. for (max = MAXBITS; max >= 1; max--) {
  19528. if (count[max] !== 0) { break; }
  19529. }
  19530. if (root > max) {
  19531. root = max;
  19532. }
  19533. if (max === 0) { /* no symbols to code at all */
  19534. //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */
  19535. //table.bits[opts.table_index] = 1; //here.bits = (var char)1;
  19536. //table.val[opts.table_index++] = 0; //here.val = (var short)0;
  19537. table[table_index++] = (1 << 24) | (64 << 16) | 0;
  19538. //table.op[opts.table_index] = 64;
  19539. //table.bits[opts.table_index] = 1;
  19540. //table.val[opts.table_index++] = 0;
  19541. table[table_index++] = (1 << 24) | (64 << 16) | 0;
  19542. opts.bits = 1;
  19543. return 0; /* no symbols, but wait for decoding to report error */
  19544. }
  19545. for (min = 1; min < max; min++) {
  19546. if (count[min] !== 0) { break; }
  19547. }
  19548. if (root < min) {
  19549. root = min;
  19550. }
  19551. /* check for an over-subscribed or incomplete set of lengths */
  19552. left = 1;
  19553. for (len = 1; len <= MAXBITS; len++) {
  19554. left <<= 1;
  19555. left -= count[len];
  19556. if (left < 0) {
  19557. return -1;
  19558. } /* over-subscribed */
  19559. }
  19560. if (left > 0 && (type === CODES || max !== 1)) {
  19561. return -1; /* incomplete set */
  19562. }
  19563. /* generate offsets into symbol table for each length for sorting */
  19564. offs[1] = 0;
  19565. for (len = 1; len < MAXBITS; len++) {
  19566. offs[len + 1] = offs[len] + count[len];
  19567. }
  19568. /* sort symbols by length, by symbol order within each length */
  19569. for (sym = 0; sym < codes; sym++) {
  19570. if (lens[lens_index + sym] !== 0) {
  19571. work[offs[lens[lens_index + sym]]++] = sym;
  19572. }
  19573. }
  19574. /*
  19575. Create and fill in decoding tables. In this loop, the table being
  19576. filled is at next and has curr index bits. The code being used is huff
  19577. with length len. That code is converted to an index by dropping drop
  19578. bits off of the bottom. For codes where len is less than drop + curr,
  19579. those top drop + curr - len bits are incremented through all values to
  19580. fill the table with replicated entries.
  19581. root is the number of index bits for the root table. When len exceeds
  19582. root, sub-tables are created pointed to by the root entry with an index
  19583. of the low root bits of huff. This is saved in low to check for when a
  19584. new sub-table should be started. drop is zero when the root table is
  19585. being filled, and drop is root when sub-tables are being filled.
  19586. When a new sub-table is needed, it is necessary to look ahead in the
  19587. code lengths to determine what size sub-table is needed. The length
  19588. counts are used for this, and so count[] is decremented as codes are
  19589. entered in the tables.
  19590. used keeps track of how many table entries have been allocated from the
  19591. provided *table space. It is checked for LENS and DIST tables against
  19592. the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
  19593. the initial root table size constants. See the comments in inftrees.h
  19594. for more information.
  19595. sym increments through all symbols, and the loop terminates when
  19596. all codes of length max, i.e. all codes, have been processed. This
  19597. routine permits incomplete codes, so another loop after this one fills
  19598. in the rest of the decoding tables with invalid code markers.
  19599. */
  19600. /* set up for code type */
  19601. // poor man optimization - use if-else instead of switch,
  19602. // to avoid deopts in old v8
  19603. if (type === CODES) {
  19604. base = extra = work; /* dummy value--not used */
  19605. end = 19;
  19606. } else if (type === LENS) {
  19607. base = lbase;
  19608. base_index -= 257;
  19609. extra = lext;
  19610. extra_index -= 257;
  19611. end = 256;
  19612. } else { /* DISTS */
  19613. base = dbase;
  19614. extra = dext;
  19615. end = -1;
  19616. }
  19617. /* initialize opts for loop */
  19618. huff = 0; /* starting code */
  19619. sym = 0; /* starting code symbol */
  19620. len = min; /* starting code length */
  19621. next = table_index; /* current table to fill in */
  19622. curr = root; /* current table index bits */
  19623. drop = 0; /* current bits to drop from code for index */
  19624. low = -1; /* trigger new sub-table when len > root */
  19625. used = 1 << root; /* use root table entries */
  19626. mask = used - 1; /* mask for comparing low */
  19627. /* check available table space */
  19628. if ((type === LENS && used > ENOUGH_LENS) ||
  19629. (type === DISTS && used > ENOUGH_DISTS)) {
  19630. return 1;
  19631. }
  19632. /* process all codes and make table entries */
  19633. for (;;) {
  19634. /* create table entry */
  19635. here_bits = len - drop;
  19636. if (work[sym] < end) {
  19637. here_op = 0;
  19638. here_val = work[sym];
  19639. }
  19640. else if (work[sym] > end) {
  19641. here_op = extra[extra_index + work[sym]];
  19642. here_val = base[base_index + work[sym]];
  19643. }
  19644. else {
  19645. here_op = 32 + 64; /* end of block */
  19646. here_val = 0;
  19647. }
  19648. /* replicate for those indices with low len bits equal to huff */
  19649. incr = 1 << (len - drop);
  19650. fill = 1 << curr;
  19651. min = fill; /* save offset to next table */
  19652. do {
  19653. fill -= incr;
  19654. table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
  19655. } while (fill !== 0);
  19656. /* backwards increment the len-bit code huff */
  19657. incr = 1 << (len - 1);
  19658. while (huff & incr) {
  19659. incr >>= 1;
  19660. }
  19661. if (incr !== 0) {
  19662. huff &= incr - 1;
  19663. huff += incr;
  19664. } else {
  19665. huff = 0;
  19666. }
  19667. /* go to next symbol, update count, len */
  19668. sym++;
  19669. if (--count[len] === 0) {
  19670. if (len === max) { break; }
  19671. len = lens[lens_index + work[sym]];
  19672. }
  19673. /* create new sub-table if needed */
  19674. if (len > root && (huff & mask) !== low) {
  19675. /* if first time, transition to sub-tables */
  19676. if (drop === 0) {
  19677. drop = root;
  19678. }
  19679. /* increment past last table */
  19680. next += min; /* here min is 1 << curr */
  19681. /* determine length of next table */
  19682. curr = len - drop;
  19683. left = 1 << curr;
  19684. while (curr + drop < max) {
  19685. left -= count[curr + drop];
  19686. if (left <= 0) { break; }
  19687. curr++;
  19688. left <<= 1;
  19689. }
  19690. /* check for enough space */
  19691. used += 1 << curr;
  19692. if ((type === LENS && used > ENOUGH_LENS) ||
  19693. (type === DISTS && used > ENOUGH_DISTS)) {
  19694. return 1;
  19695. }
  19696. /* point entry in root table to sub-table */
  19697. low = huff & mask;
  19698. /*table.op[low] = curr;
  19699. table.bits[low] = root;
  19700. table.val[low] = next - opts.table_index;*/
  19701. table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
  19702. }
  19703. }
  19704. /* fill in remaining table entry if code is incomplete (guaranteed to have
  19705. at most one remaining entry, since if the code is incomplete, the
  19706. maximum code length that was allowed to get this far is one bit) */
  19707. if (huff !== 0) {
  19708. //table.op[next + huff] = 64; /* invalid code marker */
  19709. //table.bits[next + huff] = len - drop;
  19710. //table.val[next + huff] = 0;
  19711. table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
  19712. }
  19713. /* set return parameters */
  19714. //opts.table_index += used;
  19715. opts.bits = root;
  19716. return 0;
  19717. };
  19718. /***/ }),
  19719. /***/ 89364:
  19720. /***/ ((module) => {
  19721. "use strict";
  19722. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  19723. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  19724. //
  19725. // This software is provided 'as-is', without any express or implied
  19726. // warranty. In no event will the authors be held liable for any damages
  19727. // arising from the use of this software.
  19728. //
  19729. // Permission is granted to anyone to use this software for any purpose,
  19730. // including commercial applications, and to alter it and redistribute it
  19731. // freely, subject to the following restrictions:
  19732. //
  19733. // 1. The origin of this software must not be misrepresented; you must not
  19734. // claim that you wrote the original software. If you use this software
  19735. // in a product, an acknowledgment in the product documentation would be
  19736. // appreciated but is not required.
  19737. // 2. Altered source versions must be plainly marked as such, and must not be
  19738. // misrepresented as being the original software.
  19739. // 3. This notice may not be removed or altered from any source distribution.
  19740. module.exports = {
  19741. 2: 'need dictionary', /* Z_NEED_DICT 2 */
  19742. 1: 'stream end', /* Z_STREAM_END 1 */
  19743. 0: '', /* Z_OK 0 */
  19744. '-1': 'file error', /* Z_ERRNO (-1) */
  19745. '-2': 'stream error', /* Z_STREAM_ERROR (-2) */
  19746. '-3': 'data error', /* Z_DATA_ERROR (-3) */
  19747. '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */
  19748. '-5': 'buffer error', /* Z_BUF_ERROR (-5) */
  19749. '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
  19750. };
  19751. /***/ }),
  19752. /***/ 81339:
  19753. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  19754. "use strict";
  19755. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  19756. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  19757. //
  19758. // This software is provided 'as-is', without any express or implied
  19759. // warranty. In no event will the authors be held liable for any damages
  19760. // arising from the use of this software.
  19761. //
  19762. // Permission is granted to anyone to use this software for any purpose,
  19763. // including commercial applications, and to alter it and redistribute it
  19764. // freely, subject to the following restrictions:
  19765. //
  19766. // 1. The origin of this software must not be misrepresented; you must not
  19767. // claim that you wrote the original software. If you use this software
  19768. // in a product, an acknowledgment in the product documentation would be
  19769. // appreciated but is not required.
  19770. // 2. Altered source versions must be plainly marked as such, and must not be
  19771. // misrepresented as being the original software.
  19772. // 3. This notice may not be removed or altered from any source distribution.
  19773. /* eslint-disable space-unary-ops */
  19774. var utils = __webpack_require__(6907);
  19775. /* Public constants ==========================================================*/
  19776. /* ===========================================================================*/
  19777. //var Z_FILTERED = 1;
  19778. //var Z_HUFFMAN_ONLY = 2;
  19779. //var Z_RLE = 3;
  19780. var Z_FIXED = 4;
  19781. //var Z_DEFAULT_STRATEGY = 0;
  19782. /* Possible values of the data_type field (though see inflate()) */
  19783. var Z_BINARY = 0;
  19784. var Z_TEXT = 1;
  19785. //var Z_ASCII = 1; // = Z_TEXT
  19786. var Z_UNKNOWN = 2;
  19787. /*============================================================================*/
  19788. function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
  19789. // From zutil.h
  19790. var STORED_BLOCK = 0;
  19791. var STATIC_TREES = 1;
  19792. var DYN_TREES = 2;
  19793. /* The three kinds of block type */
  19794. var MIN_MATCH = 3;
  19795. var MAX_MATCH = 258;
  19796. /* The minimum and maximum match lengths */
  19797. // From deflate.h
  19798. /* ===========================================================================
  19799. * Internal compression state.
  19800. */
  19801. var LENGTH_CODES = 29;
  19802. /* number of length codes, not counting the special END_BLOCK code */
  19803. var LITERALS = 256;
  19804. /* number of literal bytes 0..255 */
  19805. var L_CODES = LITERALS + 1 + LENGTH_CODES;
  19806. /* number of Literal or Length codes, including the END_BLOCK code */
  19807. var D_CODES = 30;
  19808. /* number of distance codes */
  19809. var BL_CODES = 19;
  19810. /* number of codes used to transfer the bit lengths */
  19811. var HEAP_SIZE = 2 * L_CODES + 1;
  19812. /* maximum heap size */
  19813. var MAX_BITS = 15;
  19814. /* All codes must not exceed MAX_BITS bits */
  19815. var Buf_size = 16;
  19816. /* size of bit buffer in bi_buf */
  19817. /* ===========================================================================
  19818. * Constants
  19819. */
  19820. var MAX_BL_BITS = 7;
  19821. /* Bit length codes must not exceed MAX_BL_BITS bits */
  19822. var END_BLOCK = 256;
  19823. /* end of block literal code */
  19824. var REP_3_6 = 16;
  19825. /* repeat previous bit length 3-6 times (2 bits of repeat count) */
  19826. var REPZ_3_10 = 17;
  19827. /* repeat a zero length 3-10 times (3 bits of repeat count) */
  19828. var REPZ_11_138 = 18;
  19829. /* repeat a zero length 11-138 times (7 bits of repeat count) */
  19830. /* eslint-disable comma-spacing,array-bracket-spacing */
  19831. var extra_lbits = /* extra bits for each length code */
  19832. [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
  19833. var extra_dbits = /* extra bits for each distance code */
  19834. [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
  19835. var extra_blbits = /* extra bits for each bit length code */
  19836. [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
  19837. var bl_order =
  19838. [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
  19839. /* eslint-enable comma-spacing,array-bracket-spacing */
  19840. /* The lengths of the bit length codes are sent in order of decreasing
  19841. * probability, to avoid transmitting the lengths for unused bit length codes.
  19842. */
  19843. /* ===========================================================================
  19844. * Local data. These are initialized only once.
  19845. */
  19846. // We pre-fill arrays with 0 to avoid uninitialized gaps
  19847. var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
  19848. // !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
  19849. var static_ltree = new Array((L_CODES + 2) * 2);
  19850. zero(static_ltree);
  19851. /* The static literal tree. Since the bit lengths are imposed, there is no
  19852. * need for the L_CODES extra codes used during heap construction. However
  19853. * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
  19854. * below).
  19855. */
  19856. var static_dtree = new Array(D_CODES * 2);
  19857. zero(static_dtree);
  19858. /* The static distance tree. (Actually a trivial tree since all codes use
  19859. * 5 bits.)
  19860. */
  19861. var _dist_code = new Array(DIST_CODE_LEN);
  19862. zero(_dist_code);
  19863. /* Distance codes. The first 256 values correspond to the distances
  19864. * 3 .. 258, the last 256 values correspond to the top 8 bits of
  19865. * the 15 bit distances.
  19866. */
  19867. var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
  19868. zero(_length_code);
  19869. /* length code for each normalized match length (0 == MIN_MATCH) */
  19870. var base_length = new Array(LENGTH_CODES);
  19871. zero(base_length);
  19872. /* First normalized length for each code (0 = MIN_MATCH) */
  19873. var base_dist = new Array(D_CODES);
  19874. zero(base_dist);
  19875. /* First normalized distance for each code (0 = distance of 1) */
  19876. function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
  19877. this.static_tree = static_tree; /* static tree or NULL */
  19878. this.extra_bits = extra_bits; /* extra bits for each code or NULL */
  19879. this.extra_base = extra_base; /* base index for extra_bits */
  19880. this.elems = elems; /* max number of elements in the tree */
  19881. this.max_length = max_length; /* max bit length for the codes */
  19882. // show if `static_tree` has data or dummy - needed for monomorphic objects
  19883. this.has_stree = static_tree && static_tree.length;
  19884. }
  19885. var static_l_desc;
  19886. var static_d_desc;
  19887. var static_bl_desc;
  19888. function TreeDesc(dyn_tree, stat_desc) {
  19889. this.dyn_tree = dyn_tree; /* the dynamic tree */
  19890. this.max_code = 0; /* largest code with non zero frequency */
  19891. this.stat_desc = stat_desc; /* the corresponding static tree */
  19892. }
  19893. function d_code(dist) {
  19894. return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
  19895. }
  19896. /* ===========================================================================
  19897. * Output a short LSB first on the stream.
  19898. * IN assertion: there is enough room in pendingBuf.
  19899. */
  19900. function put_short(s, w) {
  19901. // put_byte(s, (uch)((w) & 0xff));
  19902. // put_byte(s, (uch)((ush)(w) >> 8));
  19903. s.pending_buf[s.pending++] = (w) & 0xff;
  19904. s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
  19905. }
  19906. /* ===========================================================================
  19907. * Send a value on a given number of bits.
  19908. * IN assertion: length <= 16 and value fits in length bits.
  19909. */
  19910. function send_bits(s, value, length) {
  19911. if (s.bi_valid > (Buf_size - length)) {
  19912. s.bi_buf |= (value << s.bi_valid) & 0xffff;
  19913. put_short(s, s.bi_buf);
  19914. s.bi_buf = value >> (Buf_size - s.bi_valid);
  19915. s.bi_valid += length - Buf_size;
  19916. } else {
  19917. s.bi_buf |= (value << s.bi_valid) & 0xffff;
  19918. s.bi_valid += length;
  19919. }
  19920. }
  19921. function send_code(s, c, tree) {
  19922. send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);
  19923. }
  19924. /* ===========================================================================
  19925. * Reverse the first len bits of a code, using straightforward code (a faster
  19926. * method would use a table)
  19927. * IN assertion: 1 <= len <= 15
  19928. */
  19929. function bi_reverse(code, len) {
  19930. var res = 0;
  19931. do {
  19932. res |= code & 1;
  19933. code >>>= 1;
  19934. res <<= 1;
  19935. } while (--len > 0);
  19936. return res >>> 1;
  19937. }
  19938. /* ===========================================================================
  19939. * Flush the bit buffer, keeping at most 7 bits in it.
  19940. */
  19941. function bi_flush(s) {
  19942. if (s.bi_valid === 16) {
  19943. put_short(s, s.bi_buf);
  19944. s.bi_buf = 0;
  19945. s.bi_valid = 0;
  19946. } else if (s.bi_valid >= 8) {
  19947. s.pending_buf[s.pending++] = s.bi_buf & 0xff;
  19948. s.bi_buf >>= 8;
  19949. s.bi_valid -= 8;
  19950. }
  19951. }
  19952. /* ===========================================================================
  19953. * Compute the optimal bit lengths for a tree and update the total bit length
  19954. * for the current block.
  19955. * IN assertion: the fields freq and dad are set, heap[heap_max] and
  19956. * above are the tree nodes sorted by increasing frequency.
  19957. * OUT assertions: the field len is set to the optimal bit length, the
  19958. * array bl_count contains the frequencies for each bit length.
  19959. * The length opt_len is updated; static_len is also updated if stree is
  19960. * not null.
  19961. */
  19962. function gen_bitlen(s, desc)
  19963. // deflate_state *s;
  19964. // tree_desc *desc; /* the tree descriptor */
  19965. {
  19966. var tree = desc.dyn_tree;
  19967. var max_code = desc.max_code;
  19968. var stree = desc.stat_desc.static_tree;
  19969. var has_stree = desc.stat_desc.has_stree;
  19970. var extra = desc.stat_desc.extra_bits;
  19971. var base = desc.stat_desc.extra_base;
  19972. var max_length = desc.stat_desc.max_length;
  19973. var h; /* heap index */
  19974. var n, m; /* iterate over the tree elements */
  19975. var bits; /* bit length */
  19976. var xbits; /* extra bits */
  19977. var f; /* frequency */
  19978. var overflow = 0; /* number of elements with bit length too large */
  19979. for (bits = 0; bits <= MAX_BITS; bits++) {
  19980. s.bl_count[bits] = 0;
  19981. }
  19982. /* In a first pass, compute the optimal bit lengths (which may
  19983. * overflow in the case of the bit length tree).
  19984. */
  19985. tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */
  19986. for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
  19987. n = s.heap[h];
  19988. bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
  19989. if (bits > max_length) {
  19990. bits = max_length;
  19991. overflow++;
  19992. }
  19993. tree[n * 2 + 1]/*.Len*/ = bits;
  19994. /* We overwrite tree[n].Dad which is no longer needed */
  19995. if (n > max_code) { continue; } /* not a leaf node */
  19996. s.bl_count[bits]++;
  19997. xbits = 0;
  19998. if (n >= base) {
  19999. xbits = extra[n - base];
  20000. }
  20001. f = tree[n * 2]/*.Freq*/;
  20002. s.opt_len += f * (bits + xbits);
  20003. if (has_stree) {
  20004. s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);
  20005. }
  20006. }
  20007. if (overflow === 0) { return; }
  20008. // Trace((stderr,"\nbit length overflow\n"));
  20009. /* This happens for example on obj2 and pic of the Calgary corpus */
  20010. /* Find the first bit length which could increase: */
  20011. do {
  20012. bits = max_length - 1;
  20013. while (s.bl_count[bits] === 0) { bits--; }
  20014. s.bl_count[bits]--; /* move one leaf down the tree */
  20015. s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */
  20016. s.bl_count[max_length]--;
  20017. /* The brother of the overflow item also moves one step up,
  20018. * but this does not affect bl_count[max_length]
  20019. */
  20020. overflow -= 2;
  20021. } while (overflow > 0);
  20022. /* Now recompute all bit lengths, scanning in increasing frequency.
  20023. * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
  20024. * lengths instead of fixing only the wrong ones. This idea is taken
  20025. * from 'ar' written by Haruhiko Okumura.)
  20026. */
  20027. for (bits = max_length; bits !== 0; bits--) {
  20028. n = s.bl_count[bits];
  20029. while (n !== 0) {
  20030. m = s.heap[--h];
  20031. if (m > max_code) { continue; }
  20032. if (tree[m * 2 + 1]/*.Len*/ !== bits) {
  20033. // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
  20034. s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;
  20035. tree[m * 2 + 1]/*.Len*/ = bits;
  20036. }
  20037. n--;
  20038. }
  20039. }
  20040. }
  20041. /* ===========================================================================
  20042. * Generate the codes for a given tree and bit counts (which need not be
  20043. * optimal).
  20044. * IN assertion: the array bl_count contains the bit length statistics for
  20045. * the given tree and the field len is set for all tree elements.
  20046. * OUT assertion: the field code is set for all tree elements of non
  20047. * zero code length.
  20048. */
  20049. function gen_codes(tree, max_code, bl_count)
  20050. // ct_data *tree; /* the tree to decorate */
  20051. // int max_code; /* largest code with non zero frequency */
  20052. // ushf *bl_count; /* number of codes at each bit length */
  20053. {
  20054. var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */
  20055. var code = 0; /* running code value */
  20056. var bits; /* bit index */
  20057. var n; /* code index */
  20058. /* The distribution counts are first used to generate the code values
  20059. * without bit reversal.
  20060. */
  20061. for (bits = 1; bits <= MAX_BITS; bits++) {
  20062. next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
  20063. }
  20064. /* Check that the bit counts in bl_count are consistent. The last code
  20065. * must be all ones.
  20066. */
  20067. //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
  20068. // "inconsistent bit counts");
  20069. //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
  20070. for (n = 0; n <= max_code; n++) {
  20071. var len = tree[n * 2 + 1]/*.Len*/;
  20072. if (len === 0) { continue; }
  20073. /* Now reverse the bits */
  20074. tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);
  20075. //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
  20076. // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
  20077. }
  20078. }
  20079. /* ===========================================================================
  20080. * Initialize the various 'constant' tables.
  20081. */
  20082. function tr_static_init() {
  20083. var n; /* iterates over tree elements */
  20084. var bits; /* bit counter */
  20085. var length; /* length value */
  20086. var code; /* code value */
  20087. var dist; /* distance index */
  20088. var bl_count = new Array(MAX_BITS + 1);
  20089. /* number of codes at each bit length for an optimal tree */
  20090. // do check in _tr_init()
  20091. //if (static_init_done) return;
  20092. /* For some embedded targets, global variables are not initialized: */
  20093. /*#ifdef NO_INIT_GLOBAL_POINTERS
  20094. static_l_desc.static_tree = static_ltree;
  20095. static_l_desc.extra_bits = extra_lbits;
  20096. static_d_desc.static_tree = static_dtree;
  20097. static_d_desc.extra_bits = extra_dbits;
  20098. static_bl_desc.extra_bits = extra_blbits;
  20099. #endif*/
  20100. /* Initialize the mapping length (0..255) -> length code (0..28) */
  20101. length = 0;
  20102. for (code = 0; code < LENGTH_CODES - 1; code++) {
  20103. base_length[code] = length;
  20104. for (n = 0; n < (1 << extra_lbits[code]); n++) {
  20105. _length_code[length++] = code;
  20106. }
  20107. }
  20108. //Assert (length == 256, "tr_static_init: length != 256");
  20109. /* Note that the length 255 (match length 258) can be represented
  20110. * in two different ways: code 284 + 5 bits or code 285, so we
  20111. * overwrite length_code[255] to use the best encoding:
  20112. */
  20113. _length_code[length - 1] = code;
  20114. /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
  20115. dist = 0;
  20116. for (code = 0; code < 16; code++) {
  20117. base_dist[code] = dist;
  20118. for (n = 0; n < (1 << extra_dbits[code]); n++) {
  20119. _dist_code[dist++] = code;
  20120. }
  20121. }
  20122. //Assert (dist == 256, "tr_static_init: dist != 256");
  20123. dist >>= 7; /* from now on, all distances are divided by 128 */
  20124. for (; code < D_CODES; code++) {
  20125. base_dist[code] = dist << 7;
  20126. for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
  20127. _dist_code[256 + dist++] = code;
  20128. }
  20129. }
  20130. //Assert (dist == 256, "tr_static_init: 256+dist != 512");
  20131. /* Construct the codes of the static literal tree */
  20132. for (bits = 0; bits <= MAX_BITS; bits++) {
  20133. bl_count[bits] = 0;
  20134. }
  20135. n = 0;
  20136. while (n <= 143) {
  20137. static_ltree[n * 2 + 1]/*.Len*/ = 8;
  20138. n++;
  20139. bl_count[8]++;
  20140. }
  20141. while (n <= 255) {
  20142. static_ltree[n * 2 + 1]/*.Len*/ = 9;
  20143. n++;
  20144. bl_count[9]++;
  20145. }
  20146. while (n <= 279) {
  20147. static_ltree[n * 2 + 1]/*.Len*/ = 7;
  20148. n++;
  20149. bl_count[7]++;
  20150. }
  20151. while (n <= 287) {
  20152. static_ltree[n * 2 + 1]/*.Len*/ = 8;
  20153. n++;
  20154. bl_count[8]++;
  20155. }
  20156. /* Codes 286 and 287 do not exist, but we must include them in the
  20157. * tree construction to get a canonical Huffman tree (longest code
  20158. * all ones)
  20159. */
  20160. gen_codes(static_ltree, L_CODES + 1, bl_count);
  20161. /* The static distance tree is trivial: */
  20162. for (n = 0; n < D_CODES; n++) {
  20163. static_dtree[n * 2 + 1]/*.Len*/ = 5;
  20164. static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);
  20165. }
  20166. // Now data ready and we can init static trees
  20167. static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
  20168. static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);
  20169. static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);
  20170. //static_init_done = true;
  20171. }
  20172. /* ===========================================================================
  20173. * Initialize a new block.
  20174. */
  20175. function init_block(s) {
  20176. var n; /* iterates over tree elements */
  20177. /* Initialize the trees. */
  20178. for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }
  20179. for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }
  20180. for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }
  20181. s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;
  20182. s.opt_len = s.static_len = 0;
  20183. s.last_lit = s.matches = 0;
  20184. }
  20185. /* ===========================================================================
  20186. * Flush the bit buffer and align the output on a byte boundary
  20187. */
  20188. function bi_windup(s)
  20189. {
  20190. if (s.bi_valid > 8) {
  20191. put_short(s, s.bi_buf);
  20192. } else if (s.bi_valid > 0) {
  20193. //put_byte(s, (Byte)s->bi_buf);
  20194. s.pending_buf[s.pending++] = s.bi_buf;
  20195. }
  20196. s.bi_buf = 0;
  20197. s.bi_valid = 0;
  20198. }
  20199. /* ===========================================================================
  20200. * Copy a stored block, storing first the length and its
  20201. * one's complement if requested.
  20202. */
  20203. function copy_block(s, buf, len, header)
  20204. //DeflateState *s;
  20205. //charf *buf; /* the input data */
  20206. //unsigned len; /* its length */
  20207. //int header; /* true if block header must be written */
  20208. {
  20209. bi_windup(s); /* align on byte boundary */
  20210. if (header) {
  20211. put_short(s, len);
  20212. put_short(s, ~len);
  20213. }
  20214. // while (len--) {
  20215. // put_byte(s, *buf++);
  20216. // }
  20217. utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
  20218. s.pending += len;
  20219. }
  20220. /* ===========================================================================
  20221. * Compares to subtrees, using the tree depth as tie breaker when
  20222. * the subtrees have equal frequency. This minimizes the worst case length.
  20223. */
  20224. function smaller(tree, n, m, depth) {
  20225. var _n2 = n * 2;
  20226. var _m2 = m * 2;
  20227. return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
  20228. (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
  20229. }
  20230. /* ===========================================================================
  20231. * Restore the heap property by moving down the tree starting at node k,
  20232. * exchanging a node with the smallest of its two sons if necessary, stopping
  20233. * when the heap property is re-established (each father smaller than its
  20234. * two sons).
  20235. */
  20236. function pqdownheap(s, tree, k)
  20237. // deflate_state *s;
  20238. // ct_data *tree; /* the tree to restore */
  20239. // int k; /* node to move down */
  20240. {
  20241. var v = s.heap[k];
  20242. var j = k << 1; /* left son of k */
  20243. while (j <= s.heap_len) {
  20244. /* Set j to the smallest of the two sons: */
  20245. if (j < s.heap_len &&
  20246. smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
  20247. j++;
  20248. }
  20249. /* Exit if v is smaller than both sons */
  20250. if (smaller(tree, v, s.heap[j], s.depth)) { break; }
  20251. /* Exchange v with the smallest son */
  20252. s.heap[k] = s.heap[j];
  20253. k = j;
  20254. /* And continue down the tree, setting j to the left son of k */
  20255. j <<= 1;
  20256. }
  20257. s.heap[k] = v;
  20258. }
  20259. // inlined manually
  20260. // var SMALLEST = 1;
  20261. /* ===========================================================================
  20262. * Send the block data compressed using the given Huffman trees
  20263. */
  20264. function compress_block(s, ltree, dtree)
  20265. // deflate_state *s;
  20266. // const ct_data *ltree; /* literal tree */
  20267. // const ct_data *dtree; /* distance tree */
  20268. {
  20269. var dist; /* distance of matched string */
  20270. var lc; /* match length or unmatched char (if dist == 0) */
  20271. var lx = 0; /* running index in l_buf */
  20272. var code; /* the code to send */
  20273. var extra; /* number of extra bits to send */
  20274. if (s.last_lit !== 0) {
  20275. do {
  20276. dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);
  20277. lc = s.pending_buf[s.l_buf + lx];
  20278. lx++;
  20279. if (dist === 0) {
  20280. send_code(s, lc, ltree); /* send a literal byte */
  20281. //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
  20282. } else {
  20283. /* Here, lc is the match length - MIN_MATCH */
  20284. code = _length_code[lc];
  20285. send_code(s, code + LITERALS + 1, ltree); /* send the length code */
  20286. extra = extra_lbits[code];
  20287. if (extra !== 0) {
  20288. lc -= base_length[code];
  20289. send_bits(s, lc, extra); /* send the extra length bits */
  20290. }
  20291. dist--; /* dist is now the match distance - 1 */
  20292. code = d_code(dist);
  20293. //Assert (code < D_CODES, "bad d_code");
  20294. send_code(s, code, dtree); /* send the distance code */
  20295. extra = extra_dbits[code];
  20296. if (extra !== 0) {
  20297. dist -= base_dist[code];
  20298. send_bits(s, dist, extra); /* send the extra distance bits */
  20299. }
  20300. } /* literal or match pair ? */
  20301. /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
  20302. //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
  20303. // "pendingBuf overflow");
  20304. } while (lx < s.last_lit);
  20305. }
  20306. send_code(s, END_BLOCK, ltree);
  20307. }
  20308. /* ===========================================================================
  20309. * Construct one Huffman tree and assigns the code bit strings and lengths.
  20310. * Update the total bit length for the current block.
  20311. * IN assertion: the field freq is set for all tree elements.
  20312. * OUT assertions: the fields len and code are set to the optimal bit length
  20313. * and corresponding code. The length opt_len is updated; static_len is
  20314. * also updated if stree is not null. The field max_code is set.
  20315. */
  20316. function build_tree(s, desc)
  20317. // deflate_state *s;
  20318. // tree_desc *desc; /* the tree descriptor */
  20319. {
  20320. var tree = desc.dyn_tree;
  20321. var stree = desc.stat_desc.static_tree;
  20322. var has_stree = desc.stat_desc.has_stree;
  20323. var elems = desc.stat_desc.elems;
  20324. var n, m; /* iterate over heap elements */
  20325. var max_code = -1; /* largest code with non zero frequency */
  20326. var node; /* new node being created */
  20327. /* Construct the initial heap, with least frequent element in
  20328. * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
  20329. * heap[0] is not used.
  20330. */
  20331. s.heap_len = 0;
  20332. s.heap_max = HEAP_SIZE;
  20333. for (n = 0; n < elems; n++) {
  20334. if (tree[n * 2]/*.Freq*/ !== 0) {
  20335. s.heap[++s.heap_len] = max_code = n;
  20336. s.depth[n] = 0;
  20337. } else {
  20338. tree[n * 2 + 1]/*.Len*/ = 0;
  20339. }
  20340. }
  20341. /* The pkzip format requires that at least one distance code exists,
  20342. * and that at least one bit should be sent even if there is only one
  20343. * possible code. So to avoid special checks later on we force at least
  20344. * two codes of non zero frequency.
  20345. */
  20346. while (s.heap_len < 2) {
  20347. node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
  20348. tree[node * 2]/*.Freq*/ = 1;
  20349. s.depth[node] = 0;
  20350. s.opt_len--;
  20351. if (has_stree) {
  20352. s.static_len -= stree[node * 2 + 1]/*.Len*/;
  20353. }
  20354. /* node is 0 or 1 so it does not have extra bits */
  20355. }
  20356. desc.max_code = max_code;
  20357. /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
  20358. * establish sub-heaps of increasing lengths:
  20359. */
  20360. for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
  20361. /* Construct the Huffman tree by repeatedly combining the least two
  20362. * frequent nodes.
  20363. */
  20364. node = elems; /* next internal node of the tree */
  20365. do {
  20366. //pqremove(s, tree, n); /* n = node of least frequency */
  20367. /*** pqremove ***/
  20368. n = s.heap[1/*SMALLEST*/];
  20369. s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
  20370. pqdownheap(s, tree, 1/*SMALLEST*/);
  20371. /***/
  20372. m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
  20373. s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
  20374. s.heap[--s.heap_max] = m;
  20375. /* Create a new node father of n and m */
  20376. tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
  20377. s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
  20378. tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;
  20379. /* and insert the new node in the heap */
  20380. s.heap[1/*SMALLEST*/] = node++;
  20381. pqdownheap(s, tree, 1/*SMALLEST*/);
  20382. } while (s.heap_len >= 2);
  20383. s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
  20384. /* At this point, the fields freq and dad are set. We can now
  20385. * generate the bit lengths.
  20386. */
  20387. gen_bitlen(s, desc);
  20388. /* The field len is now set, we can generate the bit codes */
  20389. gen_codes(tree, max_code, s.bl_count);
  20390. }
  20391. /* ===========================================================================
  20392. * Scan a literal or distance tree to determine the frequencies of the codes
  20393. * in the bit length tree.
  20394. */
  20395. function scan_tree(s, tree, max_code)
  20396. // deflate_state *s;
  20397. // ct_data *tree; /* the tree to be scanned */
  20398. // int max_code; /* and its largest code of non zero frequency */
  20399. {
  20400. var n; /* iterates over all tree elements */
  20401. var prevlen = -1; /* last emitted length */
  20402. var curlen; /* length of current code */
  20403. var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
  20404. var count = 0; /* repeat count of the current code */
  20405. var max_count = 7; /* max repeat count */
  20406. var min_count = 4; /* min repeat count */
  20407. if (nextlen === 0) {
  20408. max_count = 138;
  20409. min_count = 3;
  20410. }
  20411. tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */
  20412. for (n = 0; n <= max_code; n++) {
  20413. curlen = nextlen;
  20414. nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
  20415. if (++count < max_count && curlen === nextlen) {
  20416. continue;
  20417. } else if (count < min_count) {
  20418. s.bl_tree[curlen * 2]/*.Freq*/ += count;
  20419. } else if (curlen !== 0) {
  20420. if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
  20421. s.bl_tree[REP_3_6 * 2]/*.Freq*/++;
  20422. } else if (count <= 10) {
  20423. s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;
  20424. } else {
  20425. s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;
  20426. }
  20427. count = 0;
  20428. prevlen = curlen;
  20429. if (nextlen === 0) {
  20430. max_count = 138;
  20431. min_count = 3;
  20432. } else if (curlen === nextlen) {
  20433. max_count = 6;
  20434. min_count = 3;
  20435. } else {
  20436. max_count = 7;
  20437. min_count = 4;
  20438. }
  20439. }
  20440. }
  20441. /* ===========================================================================
  20442. * Send a literal or distance tree in compressed form, using the codes in
  20443. * bl_tree.
  20444. */
  20445. function send_tree(s, tree, max_code)
  20446. // deflate_state *s;
  20447. // ct_data *tree; /* the tree to be scanned */
  20448. // int max_code; /* and its largest code of non zero frequency */
  20449. {
  20450. var n; /* iterates over all tree elements */
  20451. var prevlen = -1; /* last emitted length */
  20452. var curlen; /* length of current code */
  20453. var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
  20454. var count = 0; /* repeat count of the current code */
  20455. var max_count = 7; /* max repeat count */
  20456. var min_count = 4; /* min repeat count */
  20457. /* tree[max_code+1].Len = -1; */ /* guard already set */
  20458. if (nextlen === 0) {
  20459. max_count = 138;
  20460. min_count = 3;
  20461. }
  20462. for (n = 0; n <= max_code; n++) {
  20463. curlen = nextlen;
  20464. nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
  20465. if (++count < max_count && curlen === nextlen) {
  20466. continue;
  20467. } else if (count < min_count) {
  20468. do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
  20469. } else if (curlen !== 0) {
  20470. if (curlen !== prevlen) {
  20471. send_code(s, curlen, s.bl_tree);
  20472. count--;
  20473. }
  20474. //Assert(count >= 3 && count <= 6, " 3_6?");
  20475. send_code(s, REP_3_6, s.bl_tree);
  20476. send_bits(s, count - 3, 2);
  20477. } else if (count <= 10) {
  20478. send_code(s, REPZ_3_10, s.bl_tree);
  20479. send_bits(s, count - 3, 3);
  20480. } else {
  20481. send_code(s, REPZ_11_138, s.bl_tree);
  20482. send_bits(s, count - 11, 7);
  20483. }
  20484. count = 0;
  20485. prevlen = curlen;
  20486. if (nextlen === 0) {
  20487. max_count = 138;
  20488. min_count = 3;
  20489. } else if (curlen === nextlen) {
  20490. max_count = 6;
  20491. min_count = 3;
  20492. } else {
  20493. max_count = 7;
  20494. min_count = 4;
  20495. }
  20496. }
  20497. }
  20498. /* ===========================================================================
  20499. * Construct the Huffman tree for the bit lengths and return the index in
  20500. * bl_order of the last bit length code to send.
  20501. */
  20502. function build_bl_tree(s) {
  20503. var max_blindex; /* index of last bit length code of non zero freq */
  20504. /* Determine the bit length frequencies for literal and distance trees */
  20505. scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
  20506. scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
  20507. /* Build the bit length tree: */
  20508. build_tree(s, s.bl_desc);
  20509. /* opt_len now includes the length of the tree representations, except
  20510. * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
  20511. */
  20512. /* Determine the number of bit length codes to send. The pkzip format
  20513. * requires that at least 4 bit length codes be sent. (appnote.txt says
  20514. * 3 but the actual value used is 4.)
  20515. */
  20516. for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
  20517. if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {
  20518. break;
  20519. }
  20520. }
  20521. /* Update opt_len to include the bit length tree and counts */
  20522. s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
  20523. //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
  20524. // s->opt_len, s->static_len));
  20525. return max_blindex;
  20526. }
  20527. /* ===========================================================================
  20528. * Send the header for a block using dynamic Huffman trees: the counts, the
  20529. * lengths of the bit length codes, the literal tree and the distance tree.
  20530. * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
  20531. */
  20532. function send_all_trees(s, lcodes, dcodes, blcodes)
  20533. // deflate_state *s;
  20534. // int lcodes, dcodes, blcodes; /* number of codes for each tree */
  20535. {
  20536. var rank; /* index in bl_order */
  20537. //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
  20538. //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
  20539. // "too many codes");
  20540. //Tracev((stderr, "\nbl counts: "));
  20541. send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */
  20542. send_bits(s, dcodes - 1, 5);
  20543. send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */
  20544. for (rank = 0; rank < blcodes; rank++) {
  20545. //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
  20546. send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);
  20547. }
  20548. //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
  20549. send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
  20550. //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
  20551. send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
  20552. //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
  20553. }
  20554. /* ===========================================================================
  20555. * Check if the data type is TEXT or BINARY, using the following algorithm:
  20556. * - TEXT if the two conditions below are satisfied:
  20557. * a) There are no non-portable control characters belonging to the
  20558. * "black list" (0..6, 14..25, 28..31).
  20559. * b) There is at least one printable character belonging to the
  20560. * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
  20561. * - BINARY otherwise.
  20562. * - The following partially-portable control characters form a
  20563. * "gray list" that is ignored in this detection algorithm:
  20564. * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
  20565. * IN assertion: the fields Freq of dyn_ltree are set.
  20566. */
  20567. function detect_data_type(s) {
  20568. /* black_mask is the bit mask of black-listed bytes
  20569. * set bits 0..6, 14..25, and 28..31
  20570. * 0xf3ffc07f = binary 11110011111111111100000001111111
  20571. */
  20572. var black_mask = 0xf3ffc07f;
  20573. var n;
  20574. /* Check for non-textual ("black-listed") bytes. */
  20575. for (n = 0; n <= 31; n++, black_mask >>>= 1) {
  20576. if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {
  20577. return Z_BINARY;
  20578. }
  20579. }
  20580. /* Check for textual ("white-listed") bytes. */
  20581. if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
  20582. s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
  20583. return Z_TEXT;
  20584. }
  20585. for (n = 32; n < LITERALS; n++) {
  20586. if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
  20587. return Z_TEXT;
  20588. }
  20589. }
  20590. /* There are no "black-listed" or "white-listed" bytes:
  20591. * this stream either is empty or has tolerated ("gray-listed") bytes only.
  20592. */
  20593. return Z_BINARY;
  20594. }
  20595. var static_init_done = false;
  20596. /* ===========================================================================
  20597. * Initialize the tree data structures for a new zlib stream.
  20598. */
  20599. function _tr_init(s)
  20600. {
  20601. if (!static_init_done) {
  20602. tr_static_init();
  20603. static_init_done = true;
  20604. }
  20605. s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
  20606. s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
  20607. s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
  20608. s.bi_buf = 0;
  20609. s.bi_valid = 0;
  20610. /* Initialize the first block of the first file: */
  20611. init_block(s);
  20612. }
  20613. /* ===========================================================================
  20614. * Send a stored block
  20615. */
  20616. function _tr_stored_block(s, buf, stored_len, last)
  20617. //DeflateState *s;
  20618. //charf *buf; /* input block */
  20619. //ulg stored_len; /* length of input block */
  20620. //int last; /* one if this is the last block for a file */
  20621. {
  20622. send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */
  20623. copy_block(s, buf, stored_len, true); /* with header */
  20624. }
  20625. /* ===========================================================================
  20626. * Send one empty static block to give enough lookahead for inflate.
  20627. * This takes 10 bits, of which 7 may remain in the bit buffer.
  20628. */
  20629. function _tr_align(s) {
  20630. send_bits(s, STATIC_TREES << 1, 3);
  20631. send_code(s, END_BLOCK, static_ltree);
  20632. bi_flush(s);
  20633. }
  20634. /* ===========================================================================
  20635. * Determine the best encoding for the current block: dynamic trees, static
  20636. * trees or store, and output the encoded block to the zip file.
  20637. */
  20638. function _tr_flush_block(s, buf, stored_len, last)
  20639. //DeflateState *s;
  20640. //charf *buf; /* input block, or NULL if too old */
  20641. //ulg stored_len; /* length of input block */
  20642. //int last; /* one if this is the last block for a file */
  20643. {
  20644. var opt_lenb, static_lenb; /* opt_len and static_len in bytes */
  20645. var max_blindex = 0; /* index of last bit length code of non zero freq */
  20646. /* Build the Huffman trees unless a stored block is forced */
  20647. if (s.level > 0) {
  20648. /* Check if the file is binary or text */
  20649. if (s.strm.data_type === Z_UNKNOWN) {
  20650. s.strm.data_type = detect_data_type(s);
  20651. }
  20652. /* Construct the literal and distance trees */
  20653. build_tree(s, s.l_desc);
  20654. // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
  20655. // s->static_len));
  20656. build_tree(s, s.d_desc);
  20657. // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
  20658. // s->static_len));
  20659. /* At this point, opt_len and static_len are the total bit lengths of
  20660. * the compressed block data, excluding the tree representations.
  20661. */
  20662. /* Build the bit length tree for the above two trees, and get the index
  20663. * in bl_order of the last bit length code to send.
  20664. */
  20665. max_blindex = build_bl_tree(s);
  20666. /* Determine the best encoding. Compute the block lengths in bytes. */
  20667. opt_lenb = (s.opt_len + 3 + 7) >>> 3;
  20668. static_lenb = (s.static_len + 3 + 7) >>> 3;
  20669. // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
  20670. // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
  20671. // s->last_lit));
  20672. if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
  20673. } else {
  20674. // Assert(buf != (char*)0, "lost buf");
  20675. opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
  20676. }
  20677. if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {
  20678. /* 4: two words for the lengths */
  20679. /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
  20680. * Otherwise we can't have processed more than WSIZE input bytes since
  20681. * the last block flush, because compression would have been
  20682. * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
  20683. * transform a block into a stored block.
  20684. */
  20685. _tr_stored_block(s, buf, stored_len, last);
  20686. } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
  20687. send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
  20688. compress_block(s, static_ltree, static_dtree);
  20689. } else {
  20690. send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
  20691. send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
  20692. compress_block(s, s.dyn_ltree, s.dyn_dtree);
  20693. }
  20694. // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
  20695. /* The above check is made mod 2^32, for files larger than 512 MB
  20696. * and uLong implemented on 32 bits.
  20697. */
  20698. init_block(s);
  20699. if (last) {
  20700. bi_windup(s);
  20701. }
  20702. // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
  20703. // s->compressed_len-7*last));
  20704. }
  20705. /* ===========================================================================
  20706. * Save the match info and tally the frequency counts. Return true if
  20707. * the current block must be flushed.
  20708. */
  20709. function _tr_tally(s, dist, lc)
  20710. // deflate_state *s;
  20711. // unsigned dist; /* distance of matched string */
  20712. // unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
  20713. {
  20714. //var out_length, in_length, dcode;
  20715. s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;
  20716. s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
  20717. s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
  20718. s.last_lit++;
  20719. if (dist === 0) {
  20720. /* lc is the unmatched char */
  20721. s.dyn_ltree[lc * 2]/*.Freq*/++;
  20722. } else {
  20723. s.matches++;
  20724. /* Here, lc is the match length - MIN_MATCH */
  20725. dist--; /* dist = match distance - 1 */
  20726. //Assert((ush)dist < (ush)MAX_DIST(s) &&
  20727. // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
  20728. // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
  20729. s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;
  20730. s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
  20731. }
  20732. // (!) This block is disabled in zlib defaults,
  20733. // don't enable it for binary compatibility
  20734. //#ifdef TRUNCATE_BLOCK
  20735. // /* Try to guess if it is profitable to stop the current block here */
  20736. // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
  20737. // /* Compute an upper bound for the compressed length */
  20738. // out_length = s.last_lit*8;
  20739. // in_length = s.strstart - s.block_start;
  20740. //
  20741. // for (dcode = 0; dcode < D_CODES; dcode++) {
  20742. // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
  20743. // }
  20744. // out_length >>>= 3;
  20745. // //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
  20746. // // s->last_lit, in_length, out_length,
  20747. // // 100L - out_length*100L/in_length));
  20748. // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
  20749. // return true;
  20750. // }
  20751. // }
  20752. //#endif
  20753. return (s.last_lit === s.lit_bufsize - 1);
  20754. /* We avoid equality with lit_bufsize because of wraparound at 64K
  20755. * on 16 bit machines and because stored blocks are restricted to
  20756. * 64K-1 bytes.
  20757. */
  20758. }
  20759. exports._tr_init = _tr_init;
  20760. exports._tr_stored_block = _tr_stored_block;
  20761. exports._tr_flush_block = _tr_flush_block;
  20762. exports._tr_tally = _tr_tally;
  20763. exports._tr_align = _tr_align;
  20764. /***/ }),
  20765. /***/ 54860:
  20766. /***/ ((module) => {
  20767. "use strict";
  20768. // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  20769. // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  20770. //
  20771. // This software is provided 'as-is', without any express or implied
  20772. // warranty. In no event will the authors be held liable for any damages
  20773. // arising from the use of this software.
  20774. //
  20775. // Permission is granted to anyone to use this software for any purpose,
  20776. // including commercial applications, and to alter it and redistribute it
  20777. // freely, subject to the following restrictions:
  20778. //
  20779. // 1. The origin of this software must not be misrepresented; you must not
  20780. // claim that you wrote the original software. If you use this software
  20781. // in a product, an acknowledgment in the product documentation would be
  20782. // appreciated but is not required.
  20783. // 2. Altered source versions must be plainly marked as such, and must not be
  20784. // misrepresented as being the original software.
  20785. // 3. This notice may not be removed or altered from any source distribution.
  20786. function ZStream() {
  20787. /* next input byte */
  20788. this.input = null; // JS specific, because we have no pointers
  20789. this.next_in = 0;
  20790. /* number of bytes available at input */
  20791. this.avail_in = 0;
  20792. /* total number of input bytes read so far */
  20793. this.total_in = 0;
  20794. /* next output byte should be put there */
  20795. this.output = null; // JS specific, because we have no pointers
  20796. this.next_out = 0;
  20797. /* remaining free space at output */
  20798. this.avail_out = 0;
  20799. /* total number of bytes output so far */
  20800. this.total_out = 0;
  20801. /* last error message, NULL if no error */
  20802. this.msg = ''/*Z_NULL*/;
  20803. /* not visible by applications */
  20804. this.state = null;
  20805. /* best guess about the data type: binary or text */
  20806. this.data_type = 2/*Z_UNKNOWN*/;
  20807. /* adler32 value of the uncompressed data */
  20808. this.adler = 0;
  20809. }
  20810. module.exports = ZStream;
  20811. /***/ }),
  20812. /***/ 77191:
  20813. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  20814. var basex = __webpack_require__(58162)
  20815. var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
  20816. module.exports = basex(ALPHABET)
  20817. /***/ }),
  20818. /***/ 53310:
  20819. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  20820. "use strict";
  20821. var base58 = __webpack_require__(77191)
  20822. var Buffer = (__webpack_require__(89509).Buffer)
  20823. module.exports = function (checksumFn) {
  20824. // Encode a buffer as a base58-check encoded string
  20825. function encode (payload) {
  20826. var checksum = checksumFn(payload)
  20827. return base58.encode(Buffer.concat([
  20828. payload,
  20829. checksum
  20830. ], payload.length + 4))
  20831. }
  20832. function decodeRaw (buffer) {
  20833. var payload = buffer.slice(0, -4)
  20834. var checksum = buffer.slice(-4)
  20835. var newChecksum = checksumFn(payload)
  20836. if (checksum[0] ^ newChecksum[0] |
  20837. checksum[1] ^ newChecksum[1] |
  20838. checksum[2] ^ newChecksum[2] |
  20839. checksum[3] ^ newChecksum[3]) return
  20840. return payload
  20841. }
  20842. // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
  20843. function decodeUnsafe (string) {
  20844. var buffer = base58.decodeUnsafe(string)
  20845. if (!buffer) return
  20846. return decodeRaw(buffer)
  20847. }
  20848. function decode (string) {
  20849. var buffer = base58.decode(string)
  20850. var payload = decodeRaw(buffer, checksumFn)
  20851. if (!payload) throw new Error('Invalid checksum')
  20852. return payload
  20853. }
  20854. return {
  20855. encode: encode,
  20856. decode: decode,
  20857. decodeUnsafe: decodeUnsafe
  20858. }
  20859. }
  20860. /***/ }),
  20861. /***/ 58334:
  20862. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  20863. "use strict";
  20864. var createHash = __webpack_require__(23482)
  20865. var bs58checkBase = __webpack_require__(53310)
  20866. // SHA256(SHA256(buffer))
  20867. function sha256x2 (buffer) {
  20868. var tmp = createHash('sha256').update(buffer).digest()
  20869. return createHash('sha256').update(tmp).digest()
  20870. }
  20871. module.exports = bs58checkBase(sha256x2)
  20872. /***/ }),
  20873. /***/ 67295:
  20874. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  20875. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  20876. module.exports = function xor (a, b) {
  20877. var length = Math.min(a.length, b.length)
  20878. var buffer = new Buffer(length)
  20879. for (var i = 0; i < length; ++i) {
  20880. buffer[i] = a[i] ^ b[i]
  20881. }
  20882. return buffer
  20883. }
  20884. /***/ }),
  20885. /***/ 48764:
  20886. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  20887. "use strict";
  20888. /*!
  20889. * The buffer module from node.js, for the browser.
  20890. *
  20891. * @author Feross Aboukhadijeh <https://feross.org>
  20892. * @license MIT
  20893. */
  20894. /* eslint-disable no-proto */
  20895. const base64 = __webpack_require__(79742)
  20896. const ieee754 = __webpack_require__(80645)
  20897. const customInspectSymbol =
  20898. (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation
  20899. ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation
  20900. : null
  20901. exports.Buffer = Buffer
  20902. exports.SlowBuffer = SlowBuffer
  20903. exports.INSPECT_MAX_BYTES = 50
  20904. const K_MAX_LENGTH = 0x7fffffff
  20905. exports.kMaxLength = K_MAX_LENGTH
  20906. /**
  20907. * If `Buffer.TYPED_ARRAY_SUPPORT`:
  20908. * === true Use Uint8Array implementation (fastest)
  20909. * === false Print warning and recommend using `buffer` v4.x which has an Object
  20910. * implementation (most compatible, even IE6)
  20911. *
  20912. * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
  20913. * Opera 11.6+, iOS 4.2+.
  20914. *
  20915. * We report that the browser does not support typed arrays if the are not subclassable
  20916. * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
  20917. * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
  20918. * for __proto__ and has a buggy typed array implementation.
  20919. */
  20920. Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
  20921. if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
  20922. typeof console.error === 'function') {
  20923. console.error(
  20924. 'This browser lacks typed array (Uint8Array) support which is required by ' +
  20925. '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
  20926. )
  20927. }
  20928. function typedArraySupport () {
  20929. // Can typed array instances can be augmented?
  20930. try {
  20931. const arr = new Uint8Array(1)
  20932. const proto = { foo: function () { return 42 } }
  20933. Object.setPrototypeOf(proto, Uint8Array.prototype)
  20934. Object.setPrototypeOf(arr, proto)
  20935. return arr.foo() === 42
  20936. } catch (e) {
  20937. return false
  20938. }
  20939. }
  20940. Object.defineProperty(Buffer.prototype, 'parent', {
  20941. enumerable: true,
  20942. get: function () {
  20943. if (!Buffer.isBuffer(this)) return undefined
  20944. return this.buffer
  20945. }
  20946. })
  20947. Object.defineProperty(Buffer.prototype, 'offset', {
  20948. enumerable: true,
  20949. get: function () {
  20950. if (!Buffer.isBuffer(this)) return undefined
  20951. return this.byteOffset
  20952. }
  20953. })
  20954. function createBuffer (length) {
  20955. if (length > K_MAX_LENGTH) {
  20956. throw new RangeError('The value "' + length + '" is invalid for option "size"')
  20957. }
  20958. // Return an augmented `Uint8Array` instance
  20959. const buf = new Uint8Array(length)
  20960. Object.setPrototypeOf(buf, Buffer.prototype)
  20961. return buf
  20962. }
  20963. /**
  20964. * The Buffer constructor returns instances of `Uint8Array` that have their
  20965. * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
  20966. * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
  20967. * and the `Uint8Array` methods. Square bracket notation works as expected -- it
  20968. * returns a single octet.
  20969. *
  20970. * The `Uint8Array` prototype remains unmodified.
  20971. */
  20972. function Buffer (arg, encodingOrOffset, length) {
  20973. // Common case.
  20974. if (typeof arg === 'number') {
  20975. if (typeof encodingOrOffset === 'string') {
  20976. throw new TypeError(
  20977. 'The "string" argument must be of type string. Received type number'
  20978. )
  20979. }
  20980. return allocUnsafe(arg)
  20981. }
  20982. return from(arg, encodingOrOffset, length)
  20983. }
  20984. Buffer.poolSize = 8192 // not used by this implementation
  20985. function from (value, encodingOrOffset, length) {
  20986. if (typeof value === 'string') {
  20987. return fromString(value, encodingOrOffset)
  20988. }
  20989. if (ArrayBuffer.isView(value)) {
  20990. return fromArrayView(value)
  20991. }
  20992. if (value == null) {
  20993. throw new TypeError(
  20994. 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
  20995. 'or Array-like Object. Received type ' + (typeof value)
  20996. )
  20997. }
  20998. if (isInstance(value, ArrayBuffer) ||
  20999. (value && isInstance(value.buffer, ArrayBuffer))) {
  21000. return fromArrayBuffer(value, encodingOrOffset, length)
  21001. }
  21002. if (typeof SharedArrayBuffer !== 'undefined' &&
  21003. (isInstance(value, SharedArrayBuffer) ||
  21004. (value && isInstance(value.buffer, SharedArrayBuffer)))) {
  21005. return fromArrayBuffer(value, encodingOrOffset, length)
  21006. }
  21007. if (typeof value === 'number') {
  21008. throw new TypeError(
  21009. 'The "value" argument must not be of type number. Received type number'
  21010. )
  21011. }
  21012. const valueOf = value.valueOf && value.valueOf()
  21013. if (valueOf != null && valueOf !== value) {
  21014. return Buffer.from(valueOf, encodingOrOffset, length)
  21015. }
  21016. const b = fromObject(value)
  21017. if (b) return b
  21018. if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
  21019. typeof value[Symbol.toPrimitive] === 'function') {
  21020. return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)
  21021. }
  21022. throw new TypeError(
  21023. 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
  21024. 'or Array-like Object. Received type ' + (typeof value)
  21025. )
  21026. }
  21027. /**
  21028. * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
  21029. * if value is a number.
  21030. * Buffer.from(str[, encoding])
  21031. * Buffer.from(array)
  21032. * Buffer.from(buffer)
  21033. * Buffer.from(arrayBuffer[, byteOffset[, length]])
  21034. **/
  21035. Buffer.from = function (value, encodingOrOffset, length) {
  21036. return from(value, encodingOrOffset, length)
  21037. }
  21038. // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
  21039. // https://github.com/feross/buffer/pull/148
  21040. Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)
  21041. Object.setPrototypeOf(Buffer, Uint8Array)
  21042. function assertSize (size) {
  21043. if (typeof size !== 'number') {
  21044. throw new TypeError('"size" argument must be of type number')
  21045. } else if (size < 0) {
  21046. throw new RangeError('The value "' + size + '" is invalid for option "size"')
  21047. }
  21048. }
  21049. function alloc (size, fill, encoding) {
  21050. assertSize(size)
  21051. if (size <= 0) {
  21052. return createBuffer(size)
  21053. }
  21054. if (fill !== undefined) {
  21055. // Only pay attention to encoding if it's a string. This
  21056. // prevents accidentally sending in a number that would
  21057. // be interpreted as a start offset.
  21058. return typeof encoding === 'string'
  21059. ? createBuffer(size).fill(fill, encoding)
  21060. : createBuffer(size).fill(fill)
  21061. }
  21062. return createBuffer(size)
  21063. }
  21064. /**
  21065. * Creates a new filled Buffer instance.
  21066. * alloc(size[, fill[, encoding]])
  21067. **/
  21068. Buffer.alloc = function (size, fill, encoding) {
  21069. return alloc(size, fill, encoding)
  21070. }
  21071. function allocUnsafe (size) {
  21072. assertSize(size)
  21073. return createBuffer(size < 0 ? 0 : checked(size) | 0)
  21074. }
  21075. /**
  21076. * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
  21077. * */
  21078. Buffer.allocUnsafe = function (size) {
  21079. return allocUnsafe(size)
  21080. }
  21081. /**
  21082. * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
  21083. */
  21084. Buffer.allocUnsafeSlow = function (size) {
  21085. return allocUnsafe(size)
  21086. }
  21087. function fromString (string, encoding) {
  21088. if (typeof encoding !== 'string' || encoding === '') {
  21089. encoding = 'utf8'
  21090. }
  21091. if (!Buffer.isEncoding(encoding)) {
  21092. throw new TypeError('Unknown encoding: ' + encoding)
  21093. }
  21094. const length = byteLength(string, encoding) | 0
  21095. let buf = createBuffer(length)
  21096. const actual = buf.write(string, encoding)
  21097. if (actual !== length) {
  21098. // Writing a hex string, for example, that contains invalid characters will
  21099. // cause everything after the first invalid character to be ignored. (e.g.
  21100. // 'abxxcd' will be treated as 'ab')
  21101. buf = buf.slice(0, actual)
  21102. }
  21103. return buf
  21104. }
  21105. function fromArrayLike (array) {
  21106. const length = array.length < 0 ? 0 : checked(array.length) | 0
  21107. const buf = createBuffer(length)
  21108. for (let i = 0; i < length; i += 1) {
  21109. buf[i] = array[i] & 255
  21110. }
  21111. return buf
  21112. }
  21113. function fromArrayView (arrayView) {
  21114. if (isInstance(arrayView, Uint8Array)) {
  21115. const copy = new Uint8Array(arrayView)
  21116. return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)
  21117. }
  21118. return fromArrayLike(arrayView)
  21119. }
  21120. function fromArrayBuffer (array, byteOffset, length) {
  21121. if (byteOffset < 0 || array.byteLength < byteOffset) {
  21122. throw new RangeError('"offset" is outside of buffer bounds')
  21123. }
  21124. if (array.byteLength < byteOffset + (length || 0)) {
  21125. throw new RangeError('"length" is outside of buffer bounds')
  21126. }
  21127. let buf
  21128. if (byteOffset === undefined && length === undefined) {
  21129. buf = new Uint8Array(array)
  21130. } else if (length === undefined) {
  21131. buf = new Uint8Array(array, byteOffset)
  21132. } else {
  21133. buf = new Uint8Array(array, byteOffset, length)
  21134. }
  21135. // Return an augmented `Uint8Array` instance
  21136. Object.setPrototypeOf(buf, Buffer.prototype)
  21137. return buf
  21138. }
  21139. function fromObject (obj) {
  21140. if (Buffer.isBuffer(obj)) {
  21141. const len = checked(obj.length) | 0
  21142. const buf = createBuffer(len)
  21143. if (buf.length === 0) {
  21144. return buf
  21145. }
  21146. obj.copy(buf, 0, 0, len)
  21147. return buf
  21148. }
  21149. if (obj.length !== undefined) {
  21150. if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
  21151. return createBuffer(0)
  21152. }
  21153. return fromArrayLike(obj)
  21154. }
  21155. if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
  21156. return fromArrayLike(obj.data)
  21157. }
  21158. }
  21159. function checked (length) {
  21160. // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  21161. // length is NaN (which is otherwise coerced to zero.)
  21162. if (length >= K_MAX_LENGTH) {
  21163. throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
  21164. 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
  21165. }
  21166. return length | 0
  21167. }
  21168. function SlowBuffer (length) {
  21169. if (+length != length) { // eslint-disable-line eqeqeq
  21170. length = 0
  21171. }
  21172. return Buffer.alloc(+length)
  21173. }
  21174. Buffer.isBuffer = function isBuffer (b) {
  21175. return b != null && b._isBuffer === true &&
  21176. b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
  21177. }
  21178. Buffer.compare = function compare (a, b) {
  21179. if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
  21180. if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
  21181. if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
  21182. throw new TypeError(
  21183. 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
  21184. )
  21185. }
  21186. if (a === b) return 0
  21187. let x = a.length
  21188. let y = b.length
  21189. for (let i = 0, len = Math.min(x, y); i < len; ++i) {
  21190. if (a[i] !== b[i]) {
  21191. x = a[i]
  21192. y = b[i]
  21193. break
  21194. }
  21195. }
  21196. if (x < y) return -1
  21197. if (y < x) return 1
  21198. return 0
  21199. }
  21200. Buffer.isEncoding = function isEncoding (encoding) {
  21201. switch (String(encoding).toLowerCase()) {
  21202. case 'hex':
  21203. case 'utf8':
  21204. case 'utf-8':
  21205. case 'ascii':
  21206. case 'latin1':
  21207. case 'binary':
  21208. case 'base64':
  21209. case 'ucs2':
  21210. case 'ucs-2':
  21211. case 'utf16le':
  21212. case 'utf-16le':
  21213. return true
  21214. default:
  21215. return false
  21216. }
  21217. }
  21218. Buffer.concat = function concat (list, length) {
  21219. if (!Array.isArray(list)) {
  21220. throw new TypeError('"list" argument must be an Array of Buffers')
  21221. }
  21222. if (list.length === 0) {
  21223. return Buffer.alloc(0)
  21224. }
  21225. let i
  21226. if (length === undefined) {
  21227. length = 0
  21228. for (i = 0; i < list.length; ++i) {
  21229. length += list[i].length
  21230. }
  21231. }
  21232. const buffer = Buffer.allocUnsafe(length)
  21233. let pos = 0
  21234. for (i = 0; i < list.length; ++i) {
  21235. let buf = list[i]
  21236. if (isInstance(buf, Uint8Array)) {
  21237. if (pos + buf.length > buffer.length) {
  21238. if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
  21239. buf.copy(buffer, pos)
  21240. } else {
  21241. Uint8Array.prototype.set.call(
  21242. buffer,
  21243. buf,
  21244. pos
  21245. )
  21246. }
  21247. } else if (!Buffer.isBuffer(buf)) {
  21248. throw new TypeError('"list" argument must be an Array of Buffers')
  21249. } else {
  21250. buf.copy(buffer, pos)
  21251. }
  21252. pos += buf.length
  21253. }
  21254. return buffer
  21255. }
  21256. function byteLength (string, encoding) {
  21257. if (Buffer.isBuffer(string)) {
  21258. return string.length
  21259. }
  21260. if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
  21261. return string.byteLength
  21262. }
  21263. if (typeof string !== 'string') {
  21264. throw new TypeError(
  21265. 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
  21266. 'Received type ' + typeof string
  21267. )
  21268. }
  21269. const len = string.length
  21270. const mustMatch = (arguments.length > 2 && arguments[2] === true)
  21271. if (!mustMatch && len === 0) return 0
  21272. // Use a for loop to avoid recursion
  21273. let loweredCase = false
  21274. for (;;) {
  21275. switch (encoding) {
  21276. case 'ascii':
  21277. case 'latin1':
  21278. case 'binary':
  21279. return len
  21280. case 'utf8':
  21281. case 'utf-8':
  21282. return utf8ToBytes(string).length
  21283. case 'ucs2':
  21284. case 'ucs-2':
  21285. case 'utf16le':
  21286. case 'utf-16le':
  21287. return len * 2
  21288. case 'hex':
  21289. return len >>> 1
  21290. case 'base64':
  21291. return base64ToBytes(string).length
  21292. default:
  21293. if (loweredCase) {
  21294. return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
  21295. }
  21296. encoding = ('' + encoding).toLowerCase()
  21297. loweredCase = true
  21298. }
  21299. }
  21300. }
  21301. Buffer.byteLength = byteLength
  21302. function slowToString (encoding, start, end) {
  21303. let loweredCase = false
  21304. // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  21305. // property of a typed array.
  21306. // This behaves neither like String nor Uint8Array in that we set start/end
  21307. // to their upper/lower bounds if the value passed is out of range.
  21308. // undefined is handled specially as per ECMA-262 6th Edition,
  21309. // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
  21310. if (start === undefined || start < 0) {
  21311. start = 0
  21312. }
  21313. // Return early if start > this.length. Done here to prevent potential uint32
  21314. // coercion fail below.
  21315. if (start > this.length) {
  21316. return ''
  21317. }
  21318. if (end === undefined || end > this.length) {
  21319. end = this.length
  21320. }
  21321. if (end <= 0) {
  21322. return ''
  21323. }
  21324. // Force coercion to uint32. This will also coerce falsey/NaN values to 0.
  21325. end >>>= 0
  21326. start >>>= 0
  21327. if (end <= start) {
  21328. return ''
  21329. }
  21330. if (!encoding) encoding = 'utf8'
  21331. while (true) {
  21332. switch (encoding) {
  21333. case 'hex':
  21334. return hexSlice(this, start, end)
  21335. case 'utf8':
  21336. case 'utf-8':
  21337. return utf8Slice(this, start, end)
  21338. case 'ascii':
  21339. return asciiSlice(this, start, end)
  21340. case 'latin1':
  21341. case 'binary':
  21342. return latin1Slice(this, start, end)
  21343. case 'base64':
  21344. return base64Slice(this, start, end)
  21345. case 'ucs2':
  21346. case 'ucs-2':
  21347. case 'utf16le':
  21348. case 'utf-16le':
  21349. return utf16leSlice(this, start, end)
  21350. default:
  21351. if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
  21352. encoding = (encoding + '').toLowerCase()
  21353. loweredCase = true
  21354. }
  21355. }
  21356. }
  21357. // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
  21358. // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
  21359. // reliably in a browserify context because there could be multiple different
  21360. // copies of the 'buffer' package in use. This method works even for Buffer
  21361. // instances that were created from another copy of the `buffer` package.
  21362. // See: https://github.com/feross/buffer/issues/154
  21363. Buffer.prototype._isBuffer = true
  21364. function swap (b, n, m) {
  21365. const i = b[n]
  21366. b[n] = b[m]
  21367. b[m] = i
  21368. }
  21369. Buffer.prototype.swap16 = function swap16 () {
  21370. const len = this.length
  21371. if (len % 2 !== 0) {
  21372. throw new RangeError('Buffer size must be a multiple of 16-bits')
  21373. }
  21374. for (let i = 0; i < len; i += 2) {
  21375. swap(this, i, i + 1)
  21376. }
  21377. return this
  21378. }
  21379. Buffer.prototype.swap32 = function swap32 () {
  21380. const len = this.length
  21381. if (len % 4 !== 0) {
  21382. throw new RangeError('Buffer size must be a multiple of 32-bits')
  21383. }
  21384. for (let i = 0; i < len; i += 4) {
  21385. swap(this, i, i + 3)
  21386. swap(this, i + 1, i + 2)
  21387. }
  21388. return this
  21389. }
  21390. Buffer.prototype.swap64 = function swap64 () {
  21391. const len = this.length
  21392. if (len % 8 !== 0) {
  21393. throw new RangeError('Buffer size must be a multiple of 64-bits')
  21394. }
  21395. for (let i = 0; i < len; i += 8) {
  21396. swap(this, i, i + 7)
  21397. swap(this, i + 1, i + 6)
  21398. swap(this, i + 2, i + 5)
  21399. swap(this, i + 3, i + 4)
  21400. }
  21401. return this
  21402. }
  21403. Buffer.prototype.toString = function toString () {
  21404. const length = this.length
  21405. if (length === 0) return ''
  21406. if (arguments.length === 0) return utf8Slice(this, 0, length)
  21407. return slowToString.apply(this, arguments)
  21408. }
  21409. Buffer.prototype.toLocaleString = Buffer.prototype.toString
  21410. Buffer.prototype.equals = function equals (b) {
  21411. if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  21412. if (this === b) return true
  21413. return Buffer.compare(this, b) === 0
  21414. }
  21415. Buffer.prototype.inspect = function inspect () {
  21416. let str = ''
  21417. const max = exports.INSPECT_MAX_BYTES
  21418. str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
  21419. if (this.length > max) str += ' ... '
  21420. return '<Buffer ' + str + '>'
  21421. }
  21422. if (customInspectSymbol) {
  21423. Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect
  21424. }
  21425. Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
  21426. if (isInstance(target, Uint8Array)) {
  21427. target = Buffer.from(target, target.offset, target.byteLength)
  21428. }
  21429. if (!Buffer.isBuffer(target)) {
  21430. throw new TypeError(
  21431. 'The "target" argument must be one of type Buffer or Uint8Array. ' +
  21432. 'Received type ' + (typeof target)
  21433. )
  21434. }
  21435. if (start === undefined) {
  21436. start = 0
  21437. }
  21438. if (end === undefined) {
  21439. end = target ? target.length : 0
  21440. }
  21441. if (thisStart === undefined) {
  21442. thisStart = 0
  21443. }
  21444. if (thisEnd === undefined) {
  21445. thisEnd = this.length
  21446. }
  21447. if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
  21448. throw new RangeError('out of range index')
  21449. }
  21450. if (thisStart >= thisEnd && start >= end) {
  21451. return 0
  21452. }
  21453. if (thisStart >= thisEnd) {
  21454. return -1
  21455. }
  21456. if (start >= end) {
  21457. return 1
  21458. }
  21459. start >>>= 0
  21460. end >>>= 0
  21461. thisStart >>>= 0
  21462. thisEnd >>>= 0
  21463. if (this === target) return 0
  21464. let x = thisEnd - thisStart
  21465. let y = end - start
  21466. const len = Math.min(x, y)
  21467. const thisCopy = this.slice(thisStart, thisEnd)
  21468. const targetCopy = target.slice(start, end)
  21469. for (let i = 0; i < len; ++i) {
  21470. if (thisCopy[i] !== targetCopy[i]) {
  21471. x = thisCopy[i]
  21472. y = targetCopy[i]
  21473. break
  21474. }
  21475. }
  21476. if (x < y) return -1
  21477. if (y < x) return 1
  21478. return 0
  21479. }
  21480. // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
  21481. // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
  21482. //
  21483. // Arguments:
  21484. // - buffer - a Buffer to search
  21485. // - val - a string, Buffer, or number
  21486. // - byteOffset - an index into `buffer`; will be clamped to an int32
  21487. // - encoding - an optional encoding, relevant is val is a string
  21488. // - dir - true for indexOf, false for lastIndexOf
  21489. function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
  21490. // Empty buffer means no match
  21491. if (buffer.length === 0) return -1
  21492. // Normalize byteOffset
  21493. if (typeof byteOffset === 'string') {
  21494. encoding = byteOffset
  21495. byteOffset = 0
  21496. } else if (byteOffset > 0x7fffffff) {
  21497. byteOffset = 0x7fffffff
  21498. } else if (byteOffset < -0x80000000) {
  21499. byteOffset = -0x80000000
  21500. }
  21501. byteOffset = +byteOffset // Coerce to Number.
  21502. if (numberIsNaN(byteOffset)) {
  21503. // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
  21504. byteOffset = dir ? 0 : (buffer.length - 1)
  21505. }
  21506. // Normalize byteOffset: negative offsets start from the end of the buffer
  21507. if (byteOffset < 0) byteOffset = buffer.length + byteOffset
  21508. if (byteOffset >= buffer.length) {
  21509. if (dir) return -1
  21510. else byteOffset = buffer.length - 1
  21511. } else if (byteOffset < 0) {
  21512. if (dir) byteOffset = 0
  21513. else return -1
  21514. }
  21515. // Normalize val
  21516. if (typeof val === 'string') {
  21517. val = Buffer.from(val, encoding)
  21518. }
  21519. // Finally, search either indexOf (if dir is true) or lastIndexOf
  21520. if (Buffer.isBuffer(val)) {
  21521. // Special case: looking for empty string/buffer always fails
  21522. if (val.length === 0) {
  21523. return -1
  21524. }
  21525. return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
  21526. } else if (typeof val === 'number') {
  21527. val = val & 0xFF // Search for a byte value [0-255]
  21528. if (typeof Uint8Array.prototype.indexOf === 'function') {
  21529. if (dir) {
  21530. return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
  21531. } else {
  21532. return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
  21533. }
  21534. }
  21535. return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)
  21536. }
  21537. throw new TypeError('val must be string, number or Buffer')
  21538. }
  21539. function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
  21540. let indexSize = 1
  21541. let arrLength = arr.length
  21542. let valLength = val.length
  21543. if (encoding !== undefined) {
  21544. encoding = String(encoding).toLowerCase()
  21545. if (encoding === 'ucs2' || encoding === 'ucs-2' ||
  21546. encoding === 'utf16le' || encoding === 'utf-16le') {
  21547. if (arr.length < 2 || val.length < 2) {
  21548. return -1
  21549. }
  21550. indexSize = 2
  21551. arrLength /= 2
  21552. valLength /= 2
  21553. byteOffset /= 2
  21554. }
  21555. }
  21556. function read (buf, i) {
  21557. if (indexSize === 1) {
  21558. return buf[i]
  21559. } else {
  21560. return buf.readUInt16BE(i * indexSize)
  21561. }
  21562. }
  21563. let i
  21564. if (dir) {
  21565. let foundIndex = -1
  21566. for (i = byteOffset; i < arrLength; i++) {
  21567. if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
  21568. if (foundIndex === -1) foundIndex = i
  21569. if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
  21570. } else {
  21571. if (foundIndex !== -1) i -= i - foundIndex
  21572. foundIndex = -1
  21573. }
  21574. }
  21575. } else {
  21576. if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
  21577. for (i = byteOffset; i >= 0; i--) {
  21578. let found = true
  21579. for (let j = 0; j < valLength; j++) {
  21580. if (read(arr, i + j) !== read(val, j)) {
  21581. found = false
  21582. break
  21583. }
  21584. }
  21585. if (found) return i
  21586. }
  21587. }
  21588. return -1
  21589. }
  21590. Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
  21591. return this.indexOf(val, byteOffset, encoding) !== -1
  21592. }
  21593. Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
  21594. return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
  21595. }
  21596. Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
  21597. return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
  21598. }
  21599. function hexWrite (buf, string, offset, length) {
  21600. offset = Number(offset) || 0
  21601. const remaining = buf.length - offset
  21602. if (!length) {
  21603. length = remaining
  21604. } else {
  21605. length = Number(length)
  21606. if (length > remaining) {
  21607. length = remaining
  21608. }
  21609. }
  21610. const strLen = string.length
  21611. if (length > strLen / 2) {
  21612. length = strLen / 2
  21613. }
  21614. let i
  21615. for (i = 0; i < length; ++i) {
  21616. const parsed = parseInt(string.substr(i * 2, 2), 16)
  21617. if (numberIsNaN(parsed)) return i
  21618. buf[offset + i] = parsed
  21619. }
  21620. return i
  21621. }
  21622. function utf8Write (buf, string, offset, length) {
  21623. return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
  21624. }
  21625. function asciiWrite (buf, string, offset, length) {
  21626. return blitBuffer(asciiToBytes(string), buf, offset, length)
  21627. }
  21628. function base64Write (buf, string, offset, length) {
  21629. return blitBuffer(base64ToBytes(string), buf, offset, length)
  21630. }
  21631. function ucs2Write (buf, string, offset, length) {
  21632. return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
  21633. }
  21634. Buffer.prototype.write = function write (string, offset, length, encoding) {
  21635. // Buffer#write(string)
  21636. if (offset === undefined) {
  21637. encoding = 'utf8'
  21638. length = this.length
  21639. offset = 0
  21640. // Buffer#write(string, encoding)
  21641. } else if (length === undefined && typeof offset === 'string') {
  21642. encoding = offset
  21643. length = this.length
  21644. offset = 0
  21645. // Buffer#write(string, offset[, length][, encoding])
  21646. } else if (isFinite(offset)) {
  21647. offset = offset >>> 0
  21648. if (isFinite(length)) {
  21649. length = length >>> 0
  21650. if (encoding === undefined) encoding = 'utf8'
  21651. } else {
  21652. encoding = length
  21653. length = undefined
  21654. }
  21655. } else {
  21656. throw new Error(
  21657. 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
  21658. )
  21659. }
  21660. const remaining = this.length - offset
  21661. if (length === undefined || length > remaining) length = remaining
  21662. if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
  21663. throw new RangeError('Attempt to write outside buffer bounds')
  21664. }
  21665. if (!encoding) encoding = 'utf8'
  21666. let loweredCase = false
  21667. for (;;) {
  21668. switch (encoding) {
  21669. case 'hex':
  21670. return hexWrite(this, string, offset, length)
  21671. case 'utf8':
  21672. case 'utf-8':
  21673. return utf8Write(this, string, offset, length)
  21674. case 'ascii':
  21675. case 'latin1':
  21676. case 'binary':
  21677. return asciiWrite(this, string, offset, length)
  21678. case 'base64':
  21679. // Warning: maxLength not taken into account in base64Write
  21680. return base64Write(this, string, offset, length)
  21681. case 'ucs2':
  21682. case 'ucs-2':
  21683. case 'utf16le':
  21684. case 'utf-16le':
  21685. return ucs2Write(this, string, offset, length)
  21686. default:
  21687. if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
  21688. encoding = ('' + encoding).toLowerCase()
  21689. loweredCase = true
  21690. }
  21691. }
  21692. }
  21693. Buffer.prototype.toJSON = function toJSON () {
  21694. return {
  21695. type: 'Buffer',
  21696. data: Array.prototype.slice.call(this._arr || this, 0)
  21697. }
  21698. }
  21699. function base64Slice (buf, start, end) {
  21700. if (start === 0 && end === buf.length) {
  21701. return base64.fromByteArray(buf)
  21702. } else {
  21703. return base64.fromByteArray(buf.slice(start, end))
  21704. }
  21705. }
  21706. function utf8Slice (buf, start, end) {
  21707. end = Math.min(buf.length, end)
  21708. const res = []
  21709. let i = start
  21710. while (i < end) {
  21711. const firstByte = buf[i]
  21712. let codePoint = null
  21713. let bytesPerSequence = (firstByte > 0xEF)
  21714. ? 4
  21715. : (firstByte > 0xDF)
  21716. ? 3
  21717. : (firstByte > 0xBF)
  21718. ? 2
  21719. : 1
  21720. if (i + bytesPerSequence <= end) {
  21721. let secondByte, thirdByte, fourthByte, tempCodePoint
  21722. switch (bytesPerSequence) {
  21723. case 1:
  21724. if (firstByte < 0x80) {
  21725. codePoint = firstByte
  21726. }
  21727. break
  21728. case 2:
  21729. secondByte = buf[i + 1]
  21730. if ((secondByte & 0xC0) === 0x80) {
  21731. tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
  21732. if (tempCodePoint > 0x7F) {
  21733. codePoint = tempCodePoint
  21734. }
  21735. }
  21736. break
  21737. case 3:
  21738. secondByte = buf[i + 1]
  21739. thirdByte = buf[i + 2]
  21740. if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
  21741. tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
  21742. if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
  21743. codePoint = tempCodePoint
  21744. }
  21745. }
  21746. break
  21747. case 4:
  21748. secondByte = buf[i + 1]
  21749. thirdByte = buf[i + 2]
  21750. fourthByte = buf[i + 3]
  21751. if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
  21752. tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
  21753. if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
  21754. codePoint = tempCodePoint
  21755. }
  21756. }
  21757. }
  21758. }
  21759. if (codePoint === null) {
  21760. // we did not generate a valid codePoint so insert a
  21761. // replacement char (U+FFFD) and advance only 1 byte
  21762. codePoint = 0xFFFD
  21763. bytesPerSequence = 1
  21764. } else if (codePoint > 0xFFFF) {
  21765. // encode to utf16 (surrogate pair dance)
  21766. codePoint -= 0x10000
  21767. res.push(codePoint >>> 10 & 0x3FF | 0xD800)
  21768. codePoint = 0xDC00 | codePoint & 0x3FF
  21769. }
  21770. res.push(codePoint)
  21771. i += bytesPerSequence
  21772. }
  21773. return decodeCodePointsArray(res)
  21774. }
  21775. // Based on http://stackoverflow.com/a/22747272/680742, the browser with
  21776. // the lowest limit is Chrome, with 0x10000 args.
  21777. // We go 1 magnitude less, for safety
  21778. const MAX_ARGUMENTS_LENGTH = 0x1000
  21779. function decodeCodePointsArray (codePoints) {
  21780. const len = codePoints.length
  21781. if (len <= MAX_ARGUMENTS_LENGTH) {
  21782. return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
  21783. }
  21784. // Decode in chunks to avoid "call stack size exceeded".
  21785. let res = ''
  21786. let i = 0
  21787. while (i < len) {
  21788. res += String.fromCharCode.apply(
  21789. String,
  21790. codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
  21791. )
  21792. }
  21793. return res
  21794. }
  21795. function asciiSlice (buf, start, end) {
  21796. let ret = ''
  21797. end = Math.min(buf.length, end)
  21798. for (let i = start; i < end; ++i) {
  21799. ret += String.fromCharCode(buf[i] & 0x7F)
  21800. }
  21801. return ret
  21802. }
  21803. function latin1Slice (buf, start, end) {
  21804. let ret = ''
  21805. end = Math.min(buf.length, end)
  21806. for (let i = start; i < end; ++i) {
  21807. ret += String.fromCharCode(buf[i])
  21808. }
  21809. return ret
  21810. }
  21811. function hexSlice (buf, start, end) {
  21812. const len = buf.length
  21813. if (!start || start < 0) start = 0
  21814. if (!end || end < 0 || end > len) end = len
  21815. let out = ''
  21816. for (let i = start; i < end; ++i) {
  21817. out += hexSliceLookupTable[buf[i]]
  21818. }
  21819. return out
  21820. }
  21821. function utf16leSlice (buf, start, end) {
  21822. const bytes = buf.slice(start, end)
  21823. let res = ''
  21824. // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)
  21825. for (let i = 0; i < bytes.length - 1; i += 2) {
  21826. res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
  21827. }
  21828. return res
  21829. }
  21830. Buffer.prototype.slice = function slice (start, end) {
  21831. const len = this.length
  21832. start = ~~start
  21833. end = end === undefined ? len : ~~end
  21834. if (start < 0) {
  21835. start += len
  21836. if (start < 0) start = 0
  21837. } else if (start > len) {
  21838. start = len
  21839. }
  21840. if (end < 0) {
  21841. end += len
  21842. if (end < 0) end = 0
  21843. } else if (end > len) {
  21844. end = len
  21845. }
  21846. if (end < start) end = start
  21847. const newBuf = this.subarray(start, end)
  21848. // Return an augmented `Uint8Array` instance
  21849. Object.setPrototypeOf(newBuf, Buffer.prototype)
  21850. return newBuf
  21851. }
  21852. /*
  21853. * Need to make sure that buffer isn't trying to write out of bounds.
  21854. */
  21855. function checkOffset (offset, ext, length) {
  21856. if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
  21857. if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
  21858. }
  21859. Buffer.prototype.readUintLE =
  21860. Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
  21861. offset = offset >>> 0
  21862. byteLength = byteLength >>> 0
  21863. if (!noAssert) checkOffset(offset, byteLength, this.length)
  21864. let val = this[offset]
  21865. let mul = 1
  21866. let i = 0
  21867. while (++i < byteLength && (mul *= 0x100)) {
  21868. val += this[offset + i] * mul
  21869. }
  21870. return val
  21871. }
  21872. Buffer.prototype.readUintBE =
  21873. Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
  21874. offset = offset >>> 0
  21875. byteLength = byteLength >>> 0
  21876. if (!noAssert) {
  21877. checkOffset(offset, byteLength, this.length)
  21878. }
  21879. let val = this[offset + --byteLength]
  21880. let mul = 1
  21881. while (byteLength > 0 && (mul *= 0x100)) {
  21882. val += this[offset + --byteLength] * mul
  21883. }
  21884. return val
  21885. }
  21886. Buffer.prototype.readUint8 =
  21887. Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
  21888. offset = offset >>> 0
  21889. if (!noAssert) checkOffset(offset, 1, this.length)
  21890. return this[offset]
  21891. }
  21892. Buffer.prototype.readUint16LE =
  21893. Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
  21894. offset = offset >>> 0
  21895. if (!noAssert) checkOffset(offset, 2, this.length)
  21896. return this[offset] | (this[offset + 1] << 8)
  21897. }
  21898. Buffer.prototype.readUint16BE =
  21899. Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
  21900. offset = offset >>> 0
  21901. if (!noAssert) checkOffset(offset, 2, this.length)
  21902. return (this[offset] << 8) | this[offset + 1]
  21903. }
  21904. Buffer.prototype.readUint32LE =
  21905. Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
  21906. offset = offset >>> 0
  21907. if (!noAssert) checkOffset(offset, 4, this.length)
  21908. return ((this[offset]) |
  21909. (this[offset + 1] << 8) |
  21910. (this[offset + 2] << 16)) +
  21911. (this[offset + 3] * 0x1000000)
  21912. }
  21913. Buffer.prototype.readUint32BE =
  21914. Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
  21915. offset = offset >>> 0
  21916. if (!noAssert) checkOffset(offset, 4, this.length)
  21917. return (this[offset] * 0x1000000) +
  21918. ((this[offset + 1] << 16) |
  21919. (this[offset + 2] << 8) |
  21920. this[offset + 3])
  21921. }
  21922. Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {
  21923. offset = offset >>> 0
  21924. validateNumber(offset, 'offset')
  21925. const first = this[offset]
  21926. const last = this[offset + 7]
  21927. if (first === undefined || last === undefined) {
  21928. boundsError(offset, this.length - 8)
  21929. }
  21930. const lo = first +
  21931. this[++offset] * 2 ** 8 +
  21932. this[++offset] * 2 ** 16 +
  21933. this[++offset] * 2 ** 24
  21934. const hi = this[++offset] +
  21935. this[++offset] * 2 ** 8 +
  21936. this[++offset] * 2 ** 16 +
  21937. last * 2 ** 24
  21938. return BigInt(lo) + (BigInt(hi) << BigInt(32))
  21939. })
  21940. Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {
  21941. offset = offset >>> 0
  21942. validateNumber(offset, 'offset')
  21943. const first = this[offset]
  21944. const last = this[offset + 7]
  21945. if (first === undefined || last === undefined) {
  21946. boundsError(offset, this.length - 8)
  21947. }
  21948. const hi = first * 2 ** 24 +
  21949. this[++offset] * 2 ** 16 +
  21950. this[++offset] * 2 ** 8 +
  21951. this[++offset]
  21952. const lo = this[++offset] * 2 ** 24 +
  21953. this[++offset] * 2 ** 16 +
  21954. this[++offset] * 2 ** 8 +
  21955. last
  21956. return (BigInt(hi) << BigInt(32)) + BigInt(lo)
  21957. })
  21958. Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
  21959. offset = offset >>> 0
  21960. byteLength = byteLength >>> 0
  21961. if (!noAssert) checkOffset(offset, byteLength, this.length)
  21962. let val = this[offset]
  21963. let mul = 1
  21964. let i = 0
  21965. while (++i < byteLength && (mul *= 0x100)) {
  21966. val += this[offset + i] * mul
  21967. }
  21968. mul *= 0x80
  21969. if (val >= mul) val -= Math.pow(2, 8 * byteLength)
  21970. return val
  21971. }
  21972. Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
  21973. offset = offset >>> 0
  21974. byteLength = byteLength >>> 0
  21975. if (!noAssert) checkOffset(offset, byteLength, this.length)
  21976. let i = byteLength
  21977. let mul = 1
  21978. let val = this[offset + --i]
  21979. while (i > 0 && (mul *= 0x100)) {
  21980. val += this[offset + --i] * mul
  21981. }
  21982. mul *= 0x80
  21983. if (val >= mul) val -= Math.pow(2, 8 * byteLength)
  21984. return val
  21985. }
  21986. Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
  21987. offset = offset >>> 0
  21988. if (!noAssert) checkOffset(offset, 1, this.length)
  21989. if (!(this[offset] & 0x80)) return (this[offset])
  21990. return ((0xff - this[offset] + 1) * -1)
  21991. }
  21992. Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
  21993. offset = offset >>> 0
  21994. if (!noAssert) checkOffset(offset, 2, this.length)
  21995. const val = this[offset] | (this[offset + 1] << 8)
  21996. return (val & 0x8000) ? val | 0xFFFF0000 : val
  21997. }
  21998. Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
  21999. offset = offset >>> 0
  22000. if (!noAssert) checkOffset(offset, 2, this.length)
  22001. const val = this[offset + 1] | (this[offset] << 8)
  22002. return (val & 0x8000) ? val | 0xFFFF0000 : val
  22003. }
  22004. Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
  22005. offset = offset >>> 0
  22006. if (!noAssert) checkOffset(offset, 4, this.length)
  22007. return (this[offset]) |
  22008. (this[offset + 1] << 8) |
  22009. (this[offset + 2] << 16) |
  22010. (this[offset + 3] << 24)
  22011. }
  22012. Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
  22013. offset = offset >>> 0
  22014. if (!noAssert) checkOffset(offset, 4, this.length)
  22015. return (this[offset] << 24) |
  22016. (this[offset + 1] << 16) |
  22017. (this[offset + 2] << 8) |
  22018. (this[offset + 3])
  22019. }
  22020. Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {
  22021. offset = offset >>> 0
  22022. validateNumber(offset, 'offset')
  22023. const first = this[offset]
  22024. const last = this[offset + 7]
  22025. if (first === undefined || last === undefined) {
  22026. boundsError(offset, this.length - 8)
  22027. }
  22028. const val = this[offset + 4] +
  22029. this[offset + 5] * 2 ** 8 +
  22030. this[offset + 6] * 2 ** 16 +
  22031. (last << 24) // Overflow
  22032. return (BigInt(val) << BigInt(32)) +
  22033. BigInt(first +
  22034. this[++offset] * 2 ** 8 +
  22035. this[++offset] * 2 ** 16 +
  22036. this[++offset] * 2 ** 24)
  22037. })
  22038. Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {
  22039. offset = offset >>> 0
  22040. validateNumber(offset, 'offset')
  22041. const first = this[offset]
  22042. const last = this[offset + 7]
  22043. if (first === undefined || last === undefined) {
  22044. boundsError(offset, this.length - 8)
  22045. }
  22046. const val = (first << 24) + // Overflow
  22047. this[++offset] * 2 ** 16 +
  22048. this[++offset] * 2 ** 8 +
  22049. this[++offset]
  22050. return (BigInt(val) << BigInt(32)) +
  22051. BigInt(this[++offset] * 2 ** 24 +
  22052. this[++offset] * 2 ** 16 +
  22053. this[++offset] * 2 ** 8 +
  22054. last)
  22055. })
  22056. Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
  22057. offset = offset >>> 0
  22058. if (!noAssert) checkOffset(offset, 4, this.length)
  22059. return ieee754.read(this, offset, true, 23, 4)
  22060. }
  22061. Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
  22062. offset = offset >>> 0
  22063. if (!noAssert) checkOffset(offset, 4, this.length)
  22064. return ieee754.read(this, offset, false, 23, 4)
  22065. }
  22066. Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
  22067. offset = offset >>> 0
  22068. if (!noAssert) checkOffset(offset, 8, this.length)
  22069. return ieee754.read(this, offset, true, 52, 8)
  22070. }
  22071. Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
  22072. offset = offset >>> 0
  22073. if (!noAssert) checkOffset(offset, 8, this.length)
  22074. return ieee754.read(this, offset, false, 52, 8)
  22075. }
  22076. function checkInt (buf, value, offset, ext, max, min) {
  22077. if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
  22078. if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
  22079. if (offset + ext > buf.length) throw new RangeError('Index out of range')
  22080. }
  22081. Buffer.prototype.writeUintLE =
  22082. Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
  22083. value = +value
  22084. offset = offset >>> 0
  22085. byteLength = byteLength >>> 0
  22086. if (!noAssert) {
  22087. const maxBytes = Math.pow(2, 8 * byteLength) - 1
  22088. checkInt(this, value, offset, byteLength, maxBytes, 0)
  22089. }
  22090. let mul = 1
  22091. let i = 0
  22092. this[offset] = value & 0xFF
  22093. while (++i < byteLength && (mul *= 0x100)) {
  22094. this[offset + i] = (value / mul) & 0xFF
  22095. }
  22096. return offset + byteLength
  22097. }
  22098. Buffer.prototype.writeUintBE =
  22099. Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
  22100. value = +value
  22101. offset = offset >>> 0
  22102. byteLength = byteLength >>> 0
  22103. if (!noAssert) {
  22104. const maxBytes = Math.pow(2, 8 * byteLength) - 1
  22105. checkInt(this, value, offset, byteLength, maxBytes, 0)
  22106. }
  22107. let i = byteLength - 1
  22108. let mul = 1
  22109. this[offset + i] = value & 0xFF
  22110. while (--i >= 0 && (mul *= 0x100)) {
  22111. this[offset + i] = (value / mul) & 0xFF
  22112. }
  22113. return offset + byteLength
  22114. }
  22115. Buffer.prototype.writeUint8 =
  22116. Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
  22117. value = +value
  22118. offset = offset >>> 0
  22119. if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
  22120. this[offset] = (value & 0xff)
  22121. return offset + 1
  22122. }
  22123. Buffer.prototype.writeUint16LE =
  22124. Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
  22125. value = +value
  22126. offset = offset >>> 0
  22127. if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  22128. this[offset] = (value & 0xff)
  22129. this[offset + 1] = (value >>> 8)
  22130. return offset + 2
  22131. }
  22132. Buffer.prototype.writeUint16BE =
  22133. Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
  22134. value = +value
  22135. offset = offset >>> 0
  22136. if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  22137. this[offset] = (value >>> 8)
  22138. this[offset + 1] = (value & 0xff)
  22139. return offset + 2
  22140. }
  22141. Buffer.prototype.writeUint32LE =
  22142. Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
  22143. value = +value
  22144. offset = offset >>> 0
  22145. if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  22146. this[offset + 3] = (value >>> 24)
  22147. this[offset + 2] = (value >>> 16)
  22148. this[offset + 1] = (value >>> 8)
  22149. this[offset] = (value & 0xff)
  22150. return offset + 4
  22151. }
  22152. Buffer.prototype.writeUint32BE =
  22153. Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
  22154. value = +value
  22155. offset = offset >>> 0
  22156. if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  22157. this[offset] = (value >>> 24)
  22158. this[offset + 1] = (value >>> 16)
  22159. this[offset + 2] = (value >>> 8)
  22160. this[offset + 3] = (value & 0xff)
  22161. return offset + 4
  22162. }
  22163. function wrtBigUInt64LE (buf, value, offset, min, max) {
  22164. checkIntBI(value, min, max, buf, offset, 7)
  22165. let lo = Number(value & BigInt(0xffffffff))
  22166. buf[offset++] = lo
  22167. lo = lo >> 8
  22168. buf[offset++] = lo
  22169. lo = lo >> 8
  22170. buf[offset++] = lo
  22171. lo = lo >> 8
  22172. buf[offset++] = lo
  22173. let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))
  22174. buf[offset++] = hi
  22175. hi = hi >> 8
  22176. buf[offset++] = hi
  22177. hi = hi >> 8
  22178. buf[offset++] = hi
  22179. hi = hi >> 8
  22180. buf[offset++] = hi
  22181. return offset
  22182. }
  22183. function wrtBigUInt64BE (buf, value, offset, min, max) {
  22184. checkIntBI(value, min, max, buf, offset, 7)
  22185. let lo = Number(value & BigInt(0xffffffff))
  22186. buf[offset + 7] = lo
  22187. lo = lo >> 8
  22188. buf[offset + 6] = lo
  22189. lo = lo >> 8
  22190. buf[offset + 5] = lo
  22191. lo = lo >> 8
  22192. buf[offset + 4] = lo
  22193. let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))
  22194. buf[offset + 3] = hi
  22195. hi = hi >> 8
  22196. buf[offset + 2] = hi
  22197. hi = hi >> 8
  22198. buf[offset + 1] = hi
  22199. hi = hi >> 8
  22200. buf[offset] = hi
  22201. return offset + 8
  22202. }
  22203. Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {
  22204. return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))
  22205. })
  22206. Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {
  22207. return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))
  22208. })
  22209. Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
  22210. value = +value
  22211. offset = offset >>> 0
  22212. if (!noAssert) {
  22213. const limit = Math.pow(2, (8 * byteLength) - 1)
  22214. checkInt(this, value, offset, byteLength, limit - 1, -limit)
  22215. }
  22216. let i = 0
  22217. let mul = 1
  22218. let sub = 0
  22219. this[offset] = value & 0xFF
  22220. while (++i < byteLength && (mul *= 0x100)) {
  22221. if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
  22222. sub = 1
  22223. }
  22224. this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  22225. }
  22226. return offset + byteLength
  22227. }
  22228. Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
  22229. value = +value
  22230. offset = offset >>> 0
  22231. if (!noAssert) {
  22232. const limit = Math.pow(2, (8 * byteLength) - 1)
  22233. checkInt(this, value, offset, byteLength, limit - 1, -limit)
  22234. }
  22235. let i = byteLength - 1
  22236. let mul = 1
  22237. let sub = 0
  22238. this[offset + i] = value & 0xFF
  22239. while (--i >= 0 && (mul *= 0x100)) {
  22240. if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
  22241. sub = 1
  22242. }
  22243. this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  22244. }
  22245. return offset + byteLength
  22246. }
  22247. Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
  22248. value = +value
  22249. offset = offset >>> 0
  22250. if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
  22251. if (value < 0) value = 0xff + value + 1
  22252. this[offset] = (value & 0xff)
  22253. return offset + 1
  22254. }
  22255. Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
  22256. value = +value
  22257. offset = offset >>> 0
  22258. if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  22259. this[offset] = (value & 0xff)
  22260. this[offset + 1] = (value >>> 8)
  22261. return offset + 2
  22262. }
  22263. Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
  22264. value = +value
  22265. offset = offset >>> 0
  22266. if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  22267. this[offset] = (value >>> 8)
  22268. this[offset + 1] = (value & 0xff)
  22269. return offset + 2
  22270. }
  22271. Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
  22272. value = +value
  22273. offset = offset >>> 0
  22274. if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  22275. this[offset] = (value & 0xff)
  22276. this[offset + 1] = (value >>> 8)
  22277. this[offset + 2] = (value >>> 16)
  22278. this[offset + 3] = (value >>> 24)
  22279. return offset + 4
  22280. }
  22281. Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
  22282. value = +value
  22283. offset = offset >>> 0
  22284. if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  22285. if (value < 0) value = 0xffffffff + value + 1
  22286. this[offset] = (value >>> 24)
  22287. this[offset + 1] = (value >>> 16)
  22288. this[offset + 2] = (value >>> 8)
  22289. this[offset + 3] = (value & 0xff)
  22290. return offset + 4
  22291. }
  22292. Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {
  22293. return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))
  22294. })
  22295. Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {
  22296. return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))
  22297. })
  22298. function checkIEEE754 (buf, value, offset, ext, max, min) {
  22299. if (offset + ext > buf.length) throw new RangeError('Index out of range')
  22300. if (offset < 0) throw new RangeError('Index out of range')
  22301. }
  22302. function writeFloat (buf, value, offset, littleEndian, noAssert) {
  22303. value = +value
  22304. offset = offset >>> 0
  22305. if (!noAssert) {
  22306. checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
  22307. }
  22308. ieee754.write(buf, value, offset, littleEndian, 23, 4)
  22309. return offset + 4
  22310. }
  22311. Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
  22312. return writeFloat(this, value, offset, true, noAssert)
  22313. }
  22314. Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
  22315. return writeFloat(this, value, offset, false, noAssert)
  22316. }
  22317. function writeDouble (buf, value, offset, littleEndian, noAssert) {
  22318. value = +value
  22319. offset = offset >>> 0
  22320. if (!noAssert) {
  22321. checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
  22322. }
  22323. ieee754.write(buf, value, offset, littleEndian, 52, 8)
  22324. return offset + 8
  22325. }
  22326. Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
  22327. return writeDouble(this, value, offset, true, noAssert)
  22328. }
  22329. Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
  22330. return writeDouble(this, value, offset, false, noAssert)
  22331. }
  22332. // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
  22333. Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  22334. if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
  22335. if (!start) start = 0
  22336. if (!end && end !== 0) end = this.length
  22337. if (targetStart >= target.length) targetStart = target.length
  22338. if (!targetStart) targetStart = 0
  22339. if (end > 0 && end < start) end = start
  22340. // Copy 0 bytes; we're done
  22341. if (end === start) return 0
  22342. if (target.length === 0 || this.length === 0) return 0
  22343. // Fatal error conditions
  22344. if (targetStart < 0) {
  22345. throw new RangeError('targetStart out of bounds')
  22346. }
  22347. if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
  22348. if (end < 0) throw new RangeError('sourceEnd out of bounds')
  22349. // Are we oob?
  22350. if (end > this.length) end = this.length
  22351. if (target.length - targetStart < end - start) {
  22352. end = target.length - targetStart + start
  22353. }
  22354. const len = end - start
  22355. if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
  22356. // Use built-in when available, missing from IE11
  22357. this.copyWithin(targetStart, start, end)
  22358. } else {
  22359. Uint8Array.prototype.set.call(
  22360. target,
  22361. this.subarray(start, end),
  22362. targetStart
  22363. )
  22364. }
  22365. return len
  22366. }
  22367. // Usage:
  22368. // buffer.fill(number[, offset[, end]])
  22369. // buffer.fill(buffer[, offset[, end]])
  22370. // buffer.fill(string[, offset[, end]][, encoding])
  22371. Buffer.prototype.fill = function fill (val, start, end, encoding) {
  22372. // Handle string cases:
  22373. if (typeof val === 'string') {
  22374. if (typeof start === 'string') {
  22375. encoding = start
  22376. start = 0
  22377. end = this.length
  22378. } else if (typeof end === 'string') {
  22379. encoding = end
  22380. end = this.length
  22381. }
  22382. if (encoding !== undefined && typeof encoding !== 'string') {
  22383. throw new TypeError('encoding must be a string')
  22384. }
  22385. if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
  22386. throw new TypeError('Unknown encoding: ' + encoding)
  22387. }
  22388. if (val.length === 1) {
  22389. const code = val.charCodeAt(0)
  22390. if ((encoding === 'utf8' && code < 128) ||
  22391. encoding === 'latin1') {
  22392. // Fast path: If `val` fits into a single byte, use that numeric value.
  22393. val = code
  22394. }
  22395. }
  22396. } else if (typeof val === 'number') {
  22397. val = val & 255
  22398. } else if (typeof val === 'boolean') {
  22399. val = Number(val)
  22400. }
  22401. // Invalid ranges are not set to a default, so can range check early.
  22402. if (start < 0 || this.length < start || this.length < end) {
  22403. throw new RangeError('Out of range index')
  22404. }
  22405. if (end <= start) {
  22406. return this
  22407. }
  22408. start = start >>> 0
  22409. end = end === undefined ? this.length : end >>> 0
  22410. if (!val) val = 0
  22411. let i
  22412. if (typeof val === 'number') {
  22413. for (i = start; i < end; ++i) {
  22414. this[i] = val
  22415. }
  22416. } else {
  22417. const bytes = Buffer.isBuffer(val)
  22418. ? val
  22419. : Buffer.from(val, encoding)
  22420. const len = bytes.length
  22421. if (len === 0) {
  22422. throw new TypeError('The value "' + val +
  22423. '" is invalid for argument "value"')
  22424. }
  22425. for (i = 0; i < end - start; ++i) {
  22426. this[i + start] = bytes[i % len]
  22427. }
  22428. }
  22429. return this
  22430. }
  22431. // CUSTOM ERRORS
  22432. // =============
  22433. // Simplified versions from Node, changed for Buffer-only usage
  22434. const errors = {}
  22435. function E (sym, getMessage, Base) {
  22436. errors[sym] = class NodeError extends Base {
  22437. constructor () {
  22438. super()
  22439. Object.defineProperty(this, 'message', {
  22440. value: getMessage.apply(this, arguments),
  22441. writable: true,
  22442. configurable: true
  22443. })
  22444. // Add the error code to the name to include it in the stack trace.
  22445. this.name = `${this.name} [${sym}]`
  22446. // Access the stack to generate the error message including the error code
  22447. // from the name.
  22448. this.stack // eslint-disable-line no-unused-expressions
  22449. // Reset the name to the actual name.
  22450. delete this.name
  22451. }
  22452. get code () {
  22453. return sym
  22454. }
  22455. set code (value) {
  22456. Object.defineProperty(this, 'code', {
  22457. configurable: true,
  22458. enumerable: true,
  22459. value,
  22460. writable: true
  22461. })
  22462. }
  22463. toString () {
  22464. return `${this.name} [${sym}]: ${this.message}`
  22465. }
  22466. }
  22467. }
  22468. E('ERR_BUFFER_OUT_OF_BOUNDS',
  22469. function (name) {
  22470. if (name) {
  22471. return `${name} is outside of buffer bounds`
  22472. }
  22473. return 'Attempt to access memory outside buffer bounds'
  22474. }, RangeError)
  22475. E('ERR_INVALID_ARG_TYPE',
  22476. function (name, actual) {
  22477. return `The "${name}" argument must be of type number. Received type ${typeof actual}`
  22478. }, TypeError)
  22479. E('ERR_OUT_OF_RANGE',
  22480. function (str, range, input) {
  22481. let msg = `The value of "${str}" is out of range.`
  22482. let received = input
  22483. if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {
  22484. received = addNumericalSeparator(String(input))
  22485. } else if (typeof input === 'bigint') {
  22486. received = String(input)
  22487. if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {
  22488. received = addNumericalSeparator(received)
  22489. }
  22490. received += 'n'
  22491. }
  22492. msg += ` It must be ${range}. Received ${received}`
  22493. return msg
  22494. }, RangeError)
  22495. function addNumericalSeparator (val) {
  22496. let res = ''
  22497. let i = val.length
  22498. const start = val[0] === '-' ? 1 : 0
  22499. for (; i >= start + 4; i -= 3) {
  22500. res = `_${val.slice(i - 3, i)}${res}`
  22501. }
  22502. return `${val.slice(0, i)}${res}`
  22503. }
  22504. // CHECK FUNCTIONS
  22505. // ===============
  22506. function checkBounds (buf, offset, byteLength) {
  22507. validateNumber(offset, 'offset')
  22508. if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {
  22509. boundsError(offset, buf.length - (byteLength + 1))
  22510. }
  22511. }
  22512. function checkIntBI (value, min, max, buf, offset, byteLength) {
  22513. if (value > max || value < min) {
  22514. const n = typeof min === 'bigint' ? 'n' : ''
  22515. let range
  22516. if (byteLength > 3) {
  22517. if (min === 0 || min === BigInt(0)) {
  22518. range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`
  22519. } else {
  22520. range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +
  22521. `${(byteLength + 1) * 8 - 1}${n}`
  22522. }
  22523. } else {
  22524. range = `>= ${min}${n} and <= ${max}${n}`
  22525. }
  22526. throw new errors.ERR_OUT_OF_RANGE('value', range, value)
  22527. }
  22528. checkBounds(buf, offset, byteLength)
  22529. }
  22530. function validateNumber (value, name) {
  22531. if (typeof value !== 'number') {
  22532. throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)
  22533. }
  22534. }
  22535. function boundsError (value, length, type) {
  22536. if (Math.floor(value) !== value) {
  22537. validateNumber(value, type)
  22538. throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)
  22539. }
  22540. if (length < 0) {
  22541. throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()
  22542. }
  22543. throw new errors.ERR_OUT_OF_RANGE(type || 'offset',
  22544. `>= ${type ? 1 : 0} and <= ${length}`,
  22545. value)
  22546. }
  22547. // HELPER FUNCTIONS
  22548. // ================
  22549. const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
  22550. function base64clean (str) {
  22551. // Node takes equal signs as end of the Base64 encoding
  22552. str = str.split('=')[0]
  22553. // Node strips out invalid characters like \n and \t from the string, base64-js does not
  22554. str = str.trim().replace(INVALID_BASE64_RE, '')
  22555. // Node converts strings with length < 2 to ''
  22556. if (str.length < 2) return ''
  22557. // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
  22558. while (str.length % 4 !== 0) {
  22559. str = str + '='
  22560. }
  22561. return str
  22562. }
  22563. function utf8ToBytes (string, units) {
  22564. units = units || Infinity
  22565. let codePoint
  22566. const length = string.length
  22567. let leadSurrogate = null
  22568. const bytes = []
  22569. for (let i = 0; i < length; ++i) {
  22570. codePoint = string.charCodeAt(i)
  22571. // is surrogate component
  22572. if (codePoint > 0xD7FF && codePoint < 0xE000) {
  22573. // last char was a lead
  22574. if (!leadSurrogate) {
  22575. // no lead yet
  22576. if (codePoint > 0xDBFF) {
  22577. // unexpected trail
  22578. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  22579. continue
  22580. } else if (i + 1 === length) {
  22581. // unpaired lead
  22582. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  22583. continue
  22584. }
  22585. // valid lead
  22586. leadSurrogate = codePoint
  22587. continue
  22588. }
  22589. // 2 leads in a row
  22590. if (codePoint < 0xDC00) {
  22591. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  22592. leadSurrogate = codePoint
  22593. continue
  22594. }
  22595. // valid surrogate pair
  22596. codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
  22597. } else if (leadSurrogate) {
  22598. // valid bmp char, but last char was a lead
  22599. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  22600. }
  22601. leadSurrogate = null
  22602. // encode utf8
  22603. if (codePoint < 0x80) {
  22604. if ((units -= 1) < 0) break
  22605. bytes.push(codePoint)
  22606. } else if (codePoint < 0x800) {
  22607. if ((units -= 2) < 0) break
  22608. bytes.push(
  22609. codePoint >> 0x6 | 0xC0,
  22610. codePoint & 0x3F | 0x80
  22611. )
  22612. } else if (codePoint < 0x10000) {
  22613. if ((units -= 3) < 0) break
  22614. bytes.push(
  22615. codePoint >> 0xC | 0xE0,
  22616. codePoint >> 0x6 & 0x3F | 0x80,
  22617. codePoint & 0x3F | 0x80
  22618. )
  22619. } else if (codePoint < 0x110000) {
  22620. if ((units -= 4) < 0) break
  22621. bytes.push(
  22622. codePoint >> 0x12 | 0xF0,
  22623. codePoint >> 0xC & 0x3F | 0x80,
  22624. codePoint >> 0x6 & 0x3F | 0x80,
  22625. codePoint & 0x3F | 0x80
  22626. )
  22627. } else {
  22628. throw new Error('Invalid code point')
  22629. }
  22630. }
  22631. return bytes
  22632. }
  22633. function asciiToBytes (str) {
  22634. const byteArray = []
  22635. for (let i = 0; i < str.length; ++i) {
  22636. // Node's code seems to be doing this and not & 0x7F..
  22637. byteArray.push(str.charCodeAt(i) & 0xFF)
  22638. }
  22639. return byteArray
  22640. }
  22641. function utf16leToBytes (str, units) {
  22642. let c, hi, lo
  22643. const byteArray = []
  22644. for (let i = 0; i < str.length; ++i) {
  22645. if ((units -= 2) < 0) break
  22646. c = str.charCodeAt(i)
  22647. hi = c >> 8
  22648. lo = c % 256
  22649. byteArray.push(lo)
  22650. byteArray.push(hi)
  22651. }
  22652. return byteArray
  22653. }
  22654. function base64ToBytes (str) {
  22655. return base64.toByteArray(base64clean(str))
  22656. }
  22657. function blitBuffer (src, dst, offset, length) {
  22658. let i
  22659. for (i = 0; i < length; ++i) {
  22660. if ((i + offset >= dst.length) || (i >= src.length)) break
  22661. dst[i + offset] = src[i]
  22662. }
  22663. return i
  22664. }
  22665. // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
  22666. // the `instanceof` check but they should be treated as of that type.
  22667. // See: https://github.com/feross/buffer/issues/166
  22668. function isInstance (obj, type) {
  22669. return obj instanceof type ||
  22670. (obj != null && obj.constructor != null && obj.constructor.name != null &&
  22671. obj.constructor.name === type.name)
  22672. }
  22673. function numberIsNaN (obj) {
  22674. // For IE11 support
  22675. return obj !== obj // eslint-disable-line no-self-compare
  22676. }
  22677. // Create lookup table for `toString('hex')`
  22678. // See: https://github.com/feross/buffer/issues/219
  22679. const hexSliceLookupTable = (function () {
  22680. const alphabet = '0123456789abcdef'
  22681. const table = new Array(256)
  22682. for (let i = 0; i < 16; ++i) {
  22683. const i16 = i * 16
  22684. for (let j = 0; j < 16; ++j) {
  22685. table[i16 + j] = alphabet[i] + alphabet[j]
  22686. }
  22687. }
  22688. return table
  22689. })()
  22690. // Return not function with Error if BigInt not supported
  22691. function defineBigIntMethod (fn) {
  22692. return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn
  22693. }
  22694. function BufferBigIntNotDefined () {
  22695. throw new Error('BigInt not supported')
  22696. }
  22697. /***/ }),
  22698. /***/ 50584:
  22699. /***/ ((module) => {
  22700. module.exports = {
  22701. "100": "Continue",
  22702. "101": "Switching Protocols",
  22703. "102": "Processing",
  22704. "200": "OK",
  22705. "201": "Created",
  22706. "202": "Accepted",
  22707. "203": "Non-Authoritative Information",
  22708. "204": "No Content",
  22709. "205": "Reset Content",
  22710. "206": "Partial Content",
  22711. "207": "Multi-Status",
  22712. "208": "Already Reported",
  22713. "226": "IM Used",
  22714. "300": "Multiple Choices",
  22715. "301": "Moved Permanently",
  22716. "302": "Found",
  22717. "303": "See Other",
  22718. "304": "Not Modified",
  22719. "305": "Use Proxy",
  22720. "307": "Temporary Redirect",
  22721. "308": "Permanent Redirect",
  22722. "400": "Bad Request",
  22723. "401": "Unauthorized",
  22724. "402": "Payment Required",
  22725. "403": "Forbidden",
  22726. "404": "Not Found",
  22727. "405": "Method Not Allowed",
  22728. "406": "Not Acceptable",
  22729. "407": "Proxy Authentication Required",
  22730. "408": "Request Timeout",
  22731. "409": "Conflict",
  22732. "410": "Gone",
  22733. "411": "Length Required",
  22734. "412": "Precondition Failed",
  22735. "413": "Payload Too Large",
  22736. "414": "URI Too Long",
  22737. "415": "Unsupported Media Type",
  22738. "416": "Range Not Satisfiable",
  22739. "417": "Expectation Failed",
  22740. "418": "I'm a teapot",
  22741. "421": "Misdirected Request",
  22742. "422": "Unprocessable Entity",
  22743. "423": "Locked",
  22744. "424": "Failed Dependency",
  22745. "425": "Unordered Collection",
  22746. "426": "Upgrade Required",
  22747. "428": "Precondition Required",
  22748. "429": "Too Many Requests",
  22749. "431": "Request Header Fields Too Large",
  22750. "451": "Unavailable For Legal Reasons",
  22751. "500": "Internal Server Error",
  22752. "501": "Not Implemented",
  22753. "502": "Bad Gateway",
  22754. "503": "Service Unavailable",
  22755. "504": "Gateway Timeout",
  22756. "505": "HTTP Version Not Supported",
  22757. "506": "Variant Also Negotiates",
  22758. "507": "Insufficient Storage",
  22759. "508": "Loop Detected",
  22760. "509": "Bandwidth Limit Exceeded",
  22761. "510": "Not Extended",
  22762. "511": "Network Authentication Required"
  22763. }
  22764. /***/ }),
  22765. /***/ 21924:
  22766. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  22767. "use strict";
  22768. var GetIntrinsic = __webpack_require__(40210);
  22769. var callBind = __webpack_require__(55559);
  22770. var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
  22771. module.exports = function callBoundIntrinsic(name, allowMissing) {
  22772. var intrinsic = GetIntrinsic(name, !!allowMissing);
  22773. if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
  22774. return callBind(intrinsic);
  22775. }
  22776. return intrinsic;
  22777. };
  22778. /***/ }),
  22779. /***/ 55559:
  22780. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  22781. "use strict";
  22782. var bind = __webpack_require__(58612);
  22783. var GetIntrinsic = __webpack_require__(40210);
  22784. var $apply = GetIntrinsic('%Function.prototype.apply%');
  22785. var $call = GetIntrinsic('%Function.prototype.call%');
  22786. var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
  22787. var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
  22788. var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
  22789. var $max = GetIntrinsic('%Math.max%');
  22790. if ($defineProperty) {
  22791. try {
  22792. $defineProperty({}, 'a', { value: 1 });
  22793. } catch (e) {
  22794. // IE 8 has a broken defineProperty
  22795. $defineProperty = null;
  22796. }
  22797. }
  22798. module.exports = function callBind(originalFunction) {
  22799. var func = $reflectApply(bind, $call, arguments);
  22800. if ($gOPD && $defineProperty) {
  22801. var desc = $gOPD(func, 'length');
  22802. if (desc.configurable) {
  22803. // original length, plus the receiver, minus any additional arguments (after the receiver)
  22804. $defineProperty(
  22805. func,
  22806. 'length',
  22807. { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }
  22808. );
  22809. }
  22810. }
  22811. return func;
  22812. };
  22813. var applyBind = function applyBind() {
  22814. return $reflectApply(bind, $apply, arguments);
  22815. };
  22816. if ($defineProperty) {
  22817. $defineProperty(module.exports, 'apply', { value: applyBind });
  22818. } else {
  22819. module.exports.apply = applyBind;
  22820. }
  22821. /***/ }),
  22822. /***/ 71027:
  22823. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  22824. var Buffer = (__webpack_require__(89509).Buffer)
  22825. var Transform = (__webpack_require__(42830).Transform)
  22826. var StringDecoder = (__webpack_require__(32553)/* .StringDecoder */ .s)
  22827. var inherits = __webpack_require__(35717)
  22828. function CipherBase (hashMode) {
  22829. Transform.call(this)
  22830. this.hashMode = typeof hashMode === 'string'
  22831. if (this.hashMode) {
  22832. this[hashMode] = this._finalOrDigest
  22833. } else {
  22834. this.final = this._finalOrDigest
  22835. }
  22836. if (this._final) {
  22837. this.__final = this._final
  22838. this._final = null
  22839. }
  22840. this._decoder = null
  22841. this._encoding = null
  22842. }
  22843. inherits(CipherBase, Transform)
  22844. CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
  22845. if (typeof data === 'string') {
  22846. data = Buffer.from(data, inputEnc)
  22847. }
  22848. var outData = this._update(data)
  22849. if (this.hashMode) return this
  22850. if (outputEnc) {
  22851. outData = this._toString(outData, outputEnc)
  22852. }
  22853. return outData
  22854. }
  22855. CipherBase.prototype.setAutoPadding = function () {}
  22856. CipherBase.prototype.getAuthTag = function () {
  22857. throw new Error('trying to get auth tag in unsupported state')
  22858. }
  22859. CipherBase.prototype.setAuthTag = function () {
  22860. throw new Error('trying to set auth tag in unsupported state')
  22861. }
  22862. CipherBase.prototype.setAAD = function () {
  22863. throw new Error('trying to set aad in unsupported state')
  22864. }
  22865. CipherBase.prototype._transform = function (data, _, next) {
  22866. var err
  22867. try {
  22868. if (this.hashMode) {
  22869. this._update(data)
  22870. } else {
  22871. this.push(this._update(data))
  22872. }
  22873. } catch (e) {
  22874. err = e
  22875. } finally {
  22876. next(err)
  22877. }
  22878. }
  22879. CipherBase.prototype._flush = function (done) {
  22880. var err
  22881. try {
  22882. this.push(this.__final())
  22883. } catch (e) {
  22884. err = e
  22885. }
  22886. done(err)
  22887. }
  22888. CipherBase.prototype._finalOrDigest = function (outputEnc) {
  22889. var outData = this.__final() || Buffer.alloc(0)
  22890. if (outputEnc) {
  22891. outData = this._toString(outData, outputEnc, true)
  22892. }
  22893. return outData
  22894. }
  22895. CipherBase.prototype._toString = function (value, enc, fin) {
  22896. if (!this._decoder) {
  22897. this._decoder = new StringDecoder(enc)
  22898. this._encoding = enc
  22899. }
  22900. if (this._encoding !== enc) throw new Error('can\'t switch encodings')
  22901. var out = this._decoder.write(value)
  22902. if (fin) {
  22903. out += this._decoder.end()
  22904. }
  22905. return out
  22906. }
  22907. module.exports = CipherBase
  22908. /***/ }),
  22909. /***/ 76393:
  22910. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  22911. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  22912. var elliptic = __webpack_require__(86266)
  22913. var BN = __webpack_require__(16426)
  22914. module.exports = function createECDH (curve) {
  22915. return new ECDH(curve)
  22916. }
  22917. var aliases = {
  22918. secp256k1: {
  22919. name: 'secp256k1',
  22920. byteLength: 32
  22921. },
  22922. secp224r1: {
  22923. name: 'p224',
  22924. byteLength: 28
  22925. },
  22926. prime256v1: {
  22927. name: 'p256',
  22928. byteLength: 32
  22929. },
  22930. prime192v1: {
  22931. name: 'p192',
  22932. byteLength: 24
  22933. },
  22934. ed25519: {
  22935. name: 'ed25519',
  22936. byteLength: 32
  22937. },
  22938. secp384r1: {
  22939. name: 'p384',
  22940. byteLength: 48
  22941. },
  22942. secp521r1: {
  22943. name: 'p521',
  22944. byteLength: 66
  22945. }
  22946. }
  22947. aliases.p224 = aliases.secp224r1
  22948. aliases.p256 = aliases.secp256r1 = aliases.prime256v1
  22949. aliases.p192 = aliases.secp192r1 = aliases.prime192v1
  22950. aliases.p384 = aliases.secp384r1
  22951. aliases.p521 = aliases.secp521r1
  22952. function ECDH (curve) {
  22953. this.curveType = aliases[curve]
  22954. if (!this.curveType) {
  22955. this.curveType = {
  22956. name: curve
  22957. }
  22958. }
  22959. this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap
  22960. this.keys = void 0
  22961. }
  22962. ECDH.prototype.generateKeys = function (enc, format) {
  22963. this.keys = this.curve.genKeyPair()
  22964. return this.getPublicKey(enc, format)
  22965. }
  22966. ECDH.prototype.computeSecret = function (other, inenc, enc) {
  22967. inenc = inenc || 'utf8'
  22968. if (!Buffer.isBuffer(other)) {
  22969. other = new Buffer(other, inenc)
  22970. }
  22971. var otherPub = this.curve.keyFromPublic(other).getPublic()
  22972. var out = otherPub.mul(this.keys.getPrivate()).getX()
  22973. return formatReturnValue(out, enc, this.curveType.byteLength)
  22974. }
  22975. ECDH.prototype.getPublicKey = function (enc, format) {
  22976. var key = this.keys.getPublic(format === 'compressed', true)
  22977. if (format === 'hybrid') {
  22978. if (key[key.length - 1] % 2) {
  22979. key[0] = 7
  22980. } else {
  22981. key[0] = 6
  22982. }
  22983. }
  22984. return formatReturnValue(key, enc)
  22985. }
  22986. ECDH.prototype.getPrivateKey = function (enc) {
  22987. return formatReturnValue(this.keys.getPrivate(), enc)
  22988. }
  22989. ECDH.prototype.setPublicKey = function (pub, enc) {
  22990. enc = enc || 'utf8'
  22991. if (!Buffer.isBuffer(pub)) {
  22992. pub = new Buffer(pub, enc)
  22993. }
  22994. this.keys._importPublic(pub)
  22995. return this
  22996. }
  22997. ECDH.prototype.setPrivateKey = function (priv, enc) {
  22998. enc = enc || 'utf8'
  22999. if (!Buffer.isBuffer(priv)) {
  23000. priv = new Buffer(priv, enc)
  23001. }
  23002. var _priv = new BN(priv)
  23003. _priv = _priv.toString(16)
  23004. this.keys = this.curve.genKeyPair()
  23005. this.keys._importPrivate(_priv)
  23006. return this
  23007. }
  23008. function formatReturnValue (bn, enc, len) {
  23009. if (!Array.isArray(bn)) {
  23010. bn = bn.toArray()
  23011. }
  23012. var buf = new Buffer(bn)
  23013. if (len && buf.length < len) {
  23014. var zeros = new Buffer(len - buf.length)
  23015. zeros.fill(0)
  23016. buf = Buffer.concat([zeros, buf])
  23017. }
  23018. if (!enc) {
  23019. return buf
  23020. } else {
  23021. return buf.toString(enc)
  23022. }
  23023. }
  23024. /***/ }),
  23025. /***/ 16426:
  23026. /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
  23027. /* module decorator */ module = __webpack_require__.nmd(module);
  23028. (function (module, exports) {
  23029. 'use strict';
  23030. // Utils
  23031. function assert (val, msg) {
  23032. if (!val) throw new Error(msg || 'Assertion failed');
  23033. }
  23034. // Could use `inherits` module, but don't want to move from single file
  23035. // architecture yet.
  23036. function inherits (ctor, superCtor) {
  23037. ctor.super_ = superCtor;
  23038. var TempCtor = function () {};
  23039. TempCtor.prototype = superCtor.prototype;
  23040. ctor.prototype = new TempCtor();
  23041. ctor.prototype.constructor = ctor;
  23042. }
  23043. // BN
  23044. function BN (number, base, endian) {
  23045. if (BN.isBN(number)) {
  23046. return number;
  23047. }
  23048. this.negative = 0;
  23049. this.words = null;
  23050. this.length = 0;
  23051. // Reduction context
  23052. this.red = null;
  23053. if (number !== null) {
  23054. if (base === 'le' || base === 'be') {
  23055. endian = base;
  23056. base = 10;
  23057. }
  23058. this._init(number || 0, base || 10, endian || 'be');
  23059. }
  23060. }
  23061. if (typeof module === 'object') {
  23062. module.exports = BN;
  23063. } else {
  23064. exports.BN = BN;
  23065. }
  23066. BN.BN = BN;
  23067. BN.wordSize = 26;
  23068. var Buffer;
  23069. try {
  23070. if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {
  23071. Buffer = window.Buffer;
  23072. } else {
  23073. Buffer = (__webpack_require__(8623).Buffer);
  23074. }
  23075. } catch (e) {
  23076. }
  23077. BN.isBN = function isBN (num) {
  23078. if (num instanceof BN) {
  23079. return true;
  23080. }
  23081. return num !== null && typeof num === 'object' &&
  23082. num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
  23083. };
  23084. BN.max = function max (left, right) {
  23085. if (left.cmp(right) > 0) return left;
  23086. return right;
  23087. };
  23088. BN.min = function min (left, right) {
  23089. if (left.cmp(right) < 0) return left;
  23090. return right;
  23091. };
  23092. BN.prototype._init = function init (number, base, endian) {
  23093. if (typeof number === 'number') {
  23094. return this._initNumber(number, base, endian);
  23095. }
  23096. if (typeof number === 'object') {
  23097. return this._initArray(number, base, endian);
  23098. }
  23099. if (base === 'hex') {
  23100. base = 16;
  23101. }
  23102. assert(base === (base | 0) && base >= 2 && base <= 36);
  23103. number = number.toString().replace(/\s+/g, '');
  23104. var start = 0;
  23105. if (number[0] === '-') {
  23106. start++;
  23107. this.negative = 1;
  23108. }
  23109. if (start < number.length) {
  23110. if (base === 16) {
  23111. this._parseHex(number, start, endian);
  23112. } else {
  23113. this._parseBase(number, base, start);
  23114. if (endian === 'le') {
  23115. this._initArray(this.toArray(), base, endian);
  23116. }
  23117. }
  23118. }
  23119. };
  23120. BN.prototype._initNumber = function _initNumber (number, base, endian) {
  23121. if (number < 0) {
  23122. this.negative = 1;
  23123. number = -number;
  23124. }
  23125. if (number < 0x4000000) {
  23126. this.words = [ number & 0x3ffffff ];
  23127. this.length = 1;
  23128. } else if (number < 0x10000000000000) {
  23129. this.words = [
  23130. number & 0x3ffffff,
  23131. (number / 0x4000000) & 0x3ffffff
  23132. ];
  23133. this.length = 2;
  23134. } else {
  23135. assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
  23136. this.words = [
  23137. number & 0x3ffffff,
  23138. (number / 0x4000000) & 0x3ffffff,
  23139. 1
  23140. ];
  23141. this.length = 3;
  23142. }
  23143. if (endian !== 'le') return;
  23144. // Reverse the bytes
  23145. this._initArray(this.toArray(), base, endian);
  23146. };
  23147. BN.prototype._initArray = function _initArray (number, base, endian) {
  23148. // Perhaps a Uint8Array
  23149. assert(typeof number.length === 'number');
  23150. if (number.length <= 0) {
  23151. this.words = [ 0 ];
  23152. this.length = 1;
  23153. return this;
  23154. }
  23155. this.length = Math.ceil(number.length / 3);
  23156. this.words = new Array(this.length);
  23157. for (var i = 0; i < this.length; i++) {
  23158. this.words[i] = 0;
  23159. }
  23160. var j, w;
  23161. var off = 0;
  23162. if (endian === 'be') {
  23163. for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
  23164. w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
  23165. this.words[j] |= (w << off) & 0x3ffffff;
  23166. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  23167. off += 24;
  23168. if (off >= 26) {
  23169. off -= 26;
  23170. j++;
  23171. }
  23172. }
  23173. } else if (endian === 'le') {
  23174. for (i = 0, j = 0; i < number.length; i += 3) {
  23175. w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
  23176. this.words[j] |= (w << off) & 0x3ffffff;
  23177. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  23178. off += 24;
  23179. if (off >= 26) {
  23180. off -= 26;
  23181. j++;
  23182. }
  23183. }
  23184. }
  23185. return this.strip();
  23186. };
  23187. function parseHex4Bits (string, index) {
  23188. var c = string.charCodeAt(index);
  23189. // 'A' - 'F'
  23190. if (c >= 65 && c <= 70) {
  23191. return c - 55;
  23192. // 'a' - 'f'
  23193. } else if (c >= 97 && c <= 102) {
  23194. return c - 87;
  23195. // '0' - '9'
  23196. } else {
  23197. return (c - 48) & 0xf;
  23198. }
  23199. }
  23200. function parseHexByte (string, lowerBound, index) {
  23201. var r = parseHex4Bits(string, index);
  23202. if (index - 1 >= lowerBound) {
  23203. r |= parseHex4Bits(string, index - 1) << 4;
  23204. }
  23205. return r;
  23206. }
  23207. BN.prototype._parseHex = function _parseHex (number, start, endian) {
  23208. // Create possibly bigger array to ensure that it fits the number
  23209. this.length = Math.ceil((number.length - start) / 6);
  23210. this.words = new Array(this.length);
  23211. for (var i = 0; i < this.length; i++) {
  23212. this.words[i] = 0;
  23213. }
  23214. // 24-bits chunks
  23215. var off = 0;
  23216. var j = 0;
  23217. var w;
  23218. if (endian === 'be') {
  23219. for (i = number.length - 1; i >= start; i -= 2) {
  23220. w = parseHexByte(number, start, i) << off;
  23221. this.words[j] |= w & 0x3ffffff;
  23222. if (off >= 18) {
  23223. off -= 18;
  23224. j += 1;
  23225. this.words[j] |= w >>> 26;
  23226. } else {
  23227. off += 8;
  23228. }
  23229. }
  23230. } else {
  23231. var parseLength = number.length - start;
  23232. for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {
  23233. w = parseHexByte(number, start, i) << off;
  23234. this.words[j] |= w & 0x3ffffff;
  23235. if (off >= 18) {
  23236. off -= 18;
  23237. j += 1;
  23238. this.words[j] |= w >>> 26;
  23239. } else {
  23240. off += 8;
  23241. }
  23242. }
  23243. }
  23244. this.strip();
  23245. };
  23246. function parseBase (str, start, end, mul) {
  23247. var r = 0;
  23248. var len = Math.min(str.length, end);
  23249. for (var i = start; i < len; i++) {
  23250. var c = str.charCodeAt(i) - 48;
  23251. r *= mul;
  23252. // 'a'
  23253. if (c >= 49) {
  23254. r += c - 49 + 0xa;
  23255. // 'A'
  23256. } else if (c >= 17) {
  23257. r += c - 17 + 0xa;
  23258. // '0' - '9'
  23259. } else {
  23260. r += c;
  23261. }
  23262. }
  23263. return r;
  23264. }
  23265. BN.prototype._parseBase = function _parseBase (number, base, start) {
  23266. // Initialize as zero
  23267. this.words = [ 0 ];
  23268. this.length = 1;
  23269. // Find length of limb in base
  23270. for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
  23271. limbLen++;
  23272. }
  23273. limbLen--;
  23274. limbPow = (limbPow / base) | 0;
  23275. var total = number.length - start;
  23276. var mod = total % limbLen;
  23277. var end = Math.min(total, total - mod) + start;
  23278. var word = 0;
  23279. for (var i = start; i < end; i += limbLen) {
  23280. word = parseBase(number, i, i + limbLen, base);
  23281. this.imuln(limbPow);
  23282. if (this.words[0] + word < 0x4000000) {
  23283. this.words[0] += word;
  23284. } else {
  23285. this._iaddn(word);
  23286. }
  23287. }
  23288. if (mod !== 0) {
  23289. var pow = 1;
  23290. word = parseBase(number, i, number.length, base);
  23291. for (i = 0; i < mod; i++) {
  23292. pow *= base;
  23293. }
  23294. this.imuln(pow);
  23295. if (this.words[0] + word < 0x4000000) {
  23296. this.words[0] += word;
  23297. } else {
  23298. this._iaddn(word);
  23299. }
  23300. }
  23301. this.strip();
  23302. };
  23303. BN.prototype.copy = function copy (dest) {
  23304. dest.words = new Array(this.length);
  23305. for (var i = 0; i < this.length; i++) {
  23306. dest.words[i] = this.words[i];
  23307. }
  23308. dest.length = this.length;
  23309. dest.negative = this.negative;
  23310. dest.red = this.red;
  23311. };
  23312. BN.prototype.clone = function clone () {
  23313. var r = new BN(null);
  23314. this.copy(r);
  23315. return r;
  23316. };
  23317. BN.prototype._expand = function _expand (size) {
  23318. while (this.length < size) {
  23319. this.words[this.length++] = 0;
  23320. }
  23321. return this;
  23322. };
  23323. // Remove leading `0` from `this`
  23324. BN.prototype.strip = function strip () {
  23325. while (this.length > 1 && this.words[this.length - 1] === 0) {
  23326. this.length--;
  23327. }
  23328. return this._normSign();
  23329. };
  23330. BN.prototype._normSign = function _normSign () {
  23331. // -0 = 0
  23332. if (this.length === 1 && this.words[0] === 0) {
  23333. this.negative = 0;
  23334. }
  23335. return this;
  23336. };
  23337. BN.prototype.inspect = function inspect () {
  23338. return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  23339. };
  23340. /*
  23341. var zeros = [];
  23342. var groupSizes = [];
  23343. var groupBases = [];
  23344. var s = '';
  23345. var i = -1;
  23346. while (++i < BN.wordSize) {
  23347. zeros[i] = s;
  23348. s += '0';
  23349. }
  23350. groupSizes[0] = 0;
  23351. groupSizes[1] = 0;
  23352. groupBases[0] = 0;
  23353. groupBases[1] = 0;
  23354. var base = 2 - 1;
  23355. while (++base < 36 + 1) {
  23356. var groupSize = 0;
  23357. var groupBase = 1;
  23358. while (groupBase < (1 << BN.wordSize) / base) {
  23359. groupBase *= base;
  23360. groupSize += 1;
  23361. }
  23362. groupSizes[base] = groupSize;
  23363. groupBases[base] = groupBase;
  23364. }
  23365. */
  23366. var zeros = [
  23367. '',
  23368. '0',
  23369. '00',
  23370. '000',
  23371. '0000',
  23372. '00000',
  23373. '000000',
  23374. '0000000',
  23375. '00000000',
  23376. '000000000',
  23377. '0000000000',
  23378. '00000000000',
  23379. '000000000000',
  23380. '0000000000000',
  23381. '00000000000000',
  23382. '000000000000000',
  23383. '0000000000000000',
  23384. '00000000000000000',
  23385. '000000000000000000',
  23386. '0000000000000000000',
  23387. '00000000000000000000',
  23388. '000000000000000000000',
  23389. '0000000000000000000000',
  23390. '00000000000000000000000',
  23391. '000000000000000000000000',
  23392. '0000000000000000000000000'
  23393. ];
  23394. var groupSizes = [
  23395. 0, 0,
  23396. 25, 16, 12, 11, 10, 9, 8,
  23397. 8, 7, 7, 7, 7, 6, 6,
  23398. 6, 6, 6, 6, 6, 5, 5,
  23399. 5, 5, 5, 5, 5, 5, 5,
  23400. 5, 5, 5, 5, 5, 5, 5
  23401. ];
  23402. var groupBases = [
  23403. 0, 0,
  23404. 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
  23405. 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
  23406. 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
  23407. 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
  23408. 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
  23409. ];
  23410. BN.prototype.toString = function toString (base, padding) {
  23411. base = base || 10;
  23412. padding = padding | 0 || 1;
  23413. var out;
  23414. if (base === 16 || base === 'hex') {
  23415. out = '';
  23416. var off = 0;
  23417. var carry = 0;
  23418. for (var i = 0; i < this.length; i++) {
  23419. var w = this.words[i];
  23420. var word = (((w << off) | carry) & 0xffffff).toString(16);
  23421. carry = (w >>> (24 - off)) & 0xffffff;
  23422. if (carry !== 0 || i !== this.length - 1) {
  23423. out = zeros[6 - word.length] + word + out;
  23424. } else {
  23425. out = word + out;
  23426. }
  23427. off += 2;
  23428. if (off >= 26) {
  23429. off -= 26;
  23430. i--;
  23431. }
  23432. }
  23433. if (carry !== 0) {
  23434. out = carry.toString(16) + out;
  23435. }
  23436. while (out.length % padding !== 0) {
  23437. out = '0' + out;
  23438. }
  23439. if (this.negative !== 0) {
  23440. out = '-' + out;
  23441. }
  23442. return out;
  23443. }
  23444. if (base === (base | 0) && base >= 2 && base <= 36) {
  23445. // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
  23446. var groupSize = groupSizes[base];
  23447. // var groupBase = Math.pow(base, groupSize);
  23448. var groupBase = groupBases[base];
  23449. out = '';
  23450. var c = this.clone();
  23451. c.negative = 0;
  23452. while (!c.isZero()) {
  23453. var r = c.modn(groupBase).toString(base);
  23454. c = c.idivn(groupBase);
  23455. if (!c.isZero()) {
  23456. out = zeros[groupSize - r.length] + r + out;
  23457. } else {
  23458. out = r + out;
  23459. }
  23460. }
  23461. if (this.isZero()) {
  23462. out = '0' + out;
  23463. }
  23464. while (out.length % padding !== 0) {
  23465. out = '0' + out;
  23466. }
  23467. if (this.negative !== 0) {
  23468. out = '-' + out;
  23469. }
  23470. return out;
  23471. }
  23472. assert(false, 'Base should be between 2 and 36');
  23473. };
  23474. BN.prototype.toNumber = function toNumber () {
  23475. var ret = this.words[0];
  23476. if (this.length === 2) {
  23477. ret += this.words[1] * 0x4000000;
  23478. } else if (this.length === 3 && this.words[2] === 0x01) {
  23479. // NOTE: at this stage it is known that the top bit is set
  23480. ret += 0x10000000000000 + (this.words[1] * 0x4000000);
  23481. } else if (this.length > 2) {
  23482. assert(false, 'Number can only safely store up to 53 bits');
  23483. }
  23484. return (this.negative !== 0) ? -ret : ret;
  23485. };
  23486. BN.prototype.toJSON = function toJSON () {
  23487. return this.toString(16);
  23488. };
  23489. BN.prototype.toBuffer = function toBuffer (endian, length) {
  23490. assert(typeof Buffer !== 'undefined');
  23491. return this.toArrayLike(Buffer, endian, length);
  23492. };
  23493. BN.prototype.toArray = function toArray (endian, length) {
  23494. return this.toArrayLike(Array, endian, length);
  23495. };
  23496. BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
  23497. var byteLength = this.byteLength();
  23498. var reqLength = length || Math.max(1, byteLength);
  23499. assert(byteLength <= reqLength, 'byte array longer than desired length');
  23500. assert(reqLength > 0, 'Requested array length <= 0');
  23501. this.strip();
  23502. var littleEndian = endian === 'le';
  23503. var res = new ArrayType(reqLength);
  23504. var b, i;
  23505. var q = this.clone();
  23506. if (!littleEndian) {
  23507. // Assume big-endian
  23508. for (i = 0; i < reqLength - byteLength; i++) {
  23509. res[i] = 0;
  23510. }
  23511. for (i = 0; !q.isZero(); i++) {
  23512. b = q.andln(0xff);
  23513. q.iushrn(8);
  23514. res[reqLength - i - 1] = b;
  23515. }
  23516. } else {
  23517. for (i = 0; !q.isZero(); i++) {
  23518. b = q.andln(0xff);
  23519. q.iushrn(8);
  23520. res[i] = b;
  23521. }
  23522. for (; i < reqLength; i++) {
  23523. res[i] = 0;
  23524. }
  23525. }
  23526. return res;
  23527. };
  23528. if (Math.clz32) {
  23529. BN.prototype._countBits = function _countBits (w) {
  23530. return 32 - Math.clz32(w);
  23531. };
  23532. } else {
  23533. BN.prototype._countBits = function _countBits (w) {
  23534. var t = w;
  23535. var r = 0;
  23536. if (t >= 0x1000) {
  23537. r += 13;
  23538. t >>>= 13;
  23539. }
  23540. if (t >= 0x40) {
  23541. r += 7;
  23542. t >>>= 7;
  23543. }
  23544. if (t >= 0x8) {
  23545. r += 4;
  23546. t >>>= 4;
  23547. }
  23548. if (t >= 0x02) {
  23549. r += 2;
  23550. t >>>= 2;
  23551. }
  23552. return r + t;
  23553. };
  23554. }
  23555. BN.prototype._zeroBits = function _zeroBits (w) {
  23556. // Short-cut
  23557. if (w === 0) return 26;
  23558. var t = w;
  23559. var r = 0;
  23560. if ((t & 0x1fff) === 0) {
  23561. r += 13;
  23562. t >>>= 13;
  23563. }
  23564. if ((t & 0x7f) === 0) {
  23565. r += 7;
  23566. t >>>= 7;
  23567. }
  23568. if ((t & 0xf) === 0) {
  23569. r += 4;
  23570. t >>>= 4;
  23571. }
  23572. if ((t & 0x3) === 0) {
  23573. r += 2;
  23574. t >>>= 2;
  23575. }
  23576. if ((t & 0x1) === 0) {
  23577. r++;
  23578. }
  23579. return r;
  23580. };
  23581. // Return number of used bits in a BN
  23582. BN.prototype.bitLength = function bitLength () {
  23583. var w = this.words[this.length - 1];
  23584. var hi = this._countBits(w);
  23585. return (this.length - 1) * 26 + hi;
  23586. };
  23587. function toBitArray (num) {
  23588. var w = new Array(num.bitLength());
  23589. for (var bit = 0; bit < w.length; bit++) {
  23590. var off = (bit / 26) | 0;
  23591. var wbit = bit % 26;
  23592. w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
  23593. }
  23594. return w;
  23595. }
  23596. // Number of trailing zero bits
  23597. BN.prototype.zeroBits = function zeroBits () {
  23598. if (this.isZero()) return 0;
  23599. var r = 0;
  23600. for (var i = 0; i < this.length; i++) {
  23601. var b = this._zeroBits(this.words[i]);
  23602. r += b;
  23603. if (b !== 26) break;
  23604. }
  23605. return r;
  23606. };
  23607. BN.prototype.byteLength = function byteLength () {
  23608. return Math.ceil(this.bitLength() / 8);
  23609. };
  23610. BN.prototype.toTwos = function toTwos (width) {
  23611. if (this.negative !== 0) {
  23612. return this.abs().inotn(width).iaddn(1);
  23613. }
  23614. return this.clone();
  23615. };
  23616. BN.prototype.fromTwos = function fromTwos (width) {
  23617. if (this.testn(width - 1)) {
  23618. return this.notn(width).iaddn(1).ineg();
  23619. }
  23620. return this.clone();
  23621. };
  23622. BN.prototype.isNeg = function isNeg () {
  23623. return this.negative !== 0;
  23624. };
  23625. // Return negative clone of `this`
  23626. BN.prototype.neg = function neg () {
  23627. return this.clone().ineg();
  23628. };
  23629. BN.prototype.ineg = function ineg () {
  23630. if (!this.isZero()) {
  23631. this.negative ^= 1;
  23632. }
  23633. return this;
  23634. };
  23635. // Or `num` with `this` in-place
  23636. BN.prototype.iuor = function iuor (num) {
  23637. while (this.length < num.length) {
  23638. this.words[this.length++] = 0;
  23639. }
  23640. for (var i = 0; i < num.length; i++) {
  23641. this.words[i] = this.words[i] | num.words[i];
  23642. }
  23643. return this.strip();
  23644. };
  23645. BN.prototype.ior = function ior (num) {
  23646. assert((this.negative | num.negative) === 0);
  23647. return this.iuor(num);
  23648. };
  23649. // Or `num` with `this`
  23650. BN.prototype.or = function or (num) {
  23651. if (this.length > num.length) return this.clone().ior(num);
  23652. return num.clone().ior(this);
  23653. };
  23654. BN.prototype.uor = function uor (num) {
  23655. if (this.length > num.length) return this.clone().iuor(num);
  23656. return num.clone().iuor(this);
  23657. };
  23658. // And `num` with `this` in-place
  23659. BN.prototype.iuand = function iuand (num) {
  23660. // b = min-length(num, this)
  23661. var b;
  23662. if (this.length > num.length) {
  23663. b = num;
  23664. } else {
  23665. b = this;
  23666. }
  23667. for (var i = 0; i < b.length; i++) {
  23668. this.words[i] = this.words[i] & num.words[i];
  23669. }
  23670. this.length = b.length;
  23671. return this.strip();
  23672. };
  23673. BN.prototype.iand = function iand (num) {
  23674. assert((this.negative | num.negative) === 0);
  23675. return this.iuand(num);
  23676. };
  23677. // And `num` with `this`
  23678. BN.prototype.and = function and (num) {
  23679. if (this.length > num.length) return this.clone().iand(num);
  23680. return num.clone().iand(this);
  23681. };
  23682. BN.prototype.uand = function uand (num) {
  23683. if (this.length > num.length) return this.clone().iuand(num);
  23684. return num.clone().iuand(this);
  23685. };
  23686. // Xor `num` with `this` in-place
  23687. BN.prototype.iuxor = function iuxor (num) {
  23688. // a.length > b.length
  23689. var a;
  23690. var b;
  23691. if (this.length > num.length) {
  23692. a = this;
  23693. b = num;
  23694. } else {
  23695. a = num;
  23696. b = this;
  23697. }
  23698. for (var i = 0; i < b.length; i++) {
  23699. this.words[i] = a.words[i] ^ b.words[i];
  23700. }
  23701. if (this !== a) {
  23702. for (; i < a.length; i++) {
  23703. this.words[i] = a.words[i];
  23704. }
  23705. }
  23706. this.length = a.length;
  23707. return this.strip();
  23708. };
  23709. BN.prototype.ixor = function ixor (num) {
  23710. assert((this.negative | num.negative) === 0);
  23711. return this.iuxor(num);
  23712. };
  23713. // Xor `num` with `this`
  23714. BN.prototype.xor = function xor (num) {
  23715. if (this.length > num.length) return this.clone().ixor(num);
  23716. return num.clone().ixor(this);
  23717. };
  23718. BN.prototype.uxor = function uxor (num) {
  23719. if (this.length > num.length) return this.clone().iuxor(num);
  23720. return num.clone().iuxor(this);
  23721. };
  23722. // Not ``this`` with ``width`` bitwidth
  23723. BN.prototype.inotn = function inotn (width) {
  23724. assert(typeof width === 'number' && width >= 0);
  23725. var bytesNeeded = Math.ceil(width / 26) | 0;
  23726. var bitsLeft = width % 26;
  23727. // Extend the buffer with leading zeroes
  23728. this._expand(bytesNeeded);
  23729. if (bitsLeft > 0) {
  23730. bytesNeeded--;
  23731. }
  23732. // Handle complete words
  23733. for (var i = 0; i < bytesNeeded; i++) {
  23734. this.words[i] = ~this.words[i] & 0x3ffffff;
  23735. }
  23736. // Handle the residue
  23737. if (bitsLeft > 0) {
  23738. this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
  23739. }
  23740. // And remove leading zeroes
  23741. return this.strip();
  23742. };
  23743. BN.prototype.notn = function notn (width) {
  23744. return this.clone().inotn(width);
  23745. };
  23746. // Set `bit` of `this`
  23747. BN.prototype.setn = function setn (bit, val) {
  23748. assert(typeof bit === 'number' && bit >= 0);
  23749. var off = (bit / 26) | 0;
  23750. var wbit = bit % 26;
  23751. this._expand(off + 1);
  23752. if (val) {
  23753. this.words[off] = this.words[off] | (1 << wbit);
  23754. } else {
  23755. this.words[off] = this.words[off] & ~(1 << wbit);
  23756. }
  23757. return this.strip();
  23758. };
  23759. // Add `num` to `this` in-place
  23760. BN.prototype.iadd = function iadd (num) {
  23761. var r;
  23762. // negative + positive
  23763. if (this.negative !== 0 && num.negative === 0) {
  23764. this.negative = 0;
  23765. r = this.isub(num);
  23766. this.negative ^= 1;
  23767. return this._normSign();
  23768. // positive + negative
  23769. } else if (this.negative === 0 && num.negative !== 0) {
  23770. num.negative = 0;
  23771. r = this.isub(num);
  23772. num.negative = 1;
  23773. return r._normSign();
  23774. }
  23775. // a.length > b.length
  23776. var a, b;
  23777. if (this.length > num.length) {
  23778. a = this;
  23779. b = num;
  23780. } else {
  23781. a = num;
  23782. b = this;
  23783. }
  23784. var carry = 0;
  23785. for (var i = 0; i < b.length; i++) {
  23786. r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
  23787. this.words[i] = r & 0x3ffffff;
  23788. carry = r >>> 26;
  23789. }
  23790. for (; carry !== 0 && i < a.length; i++) {
  23791. r = (a.words[i] | 0) + carry;
  23792. this.words[i] = r & 0x3ffffff;
  23793. carry = r >>> 26;
  23794. }
  23795. this.length = a.length;
  23796. if (carry !== 0) {
  23797. this.words[this.length] = carry;
  23798. this.length++;
  23799. // Copy the rest of the words
  23800. } else if (a !== this) {
  23801. for (; i < a.length; i++) {
  23802. this.words[i] = a.words[i];
  23803. }
  23804. }
  23805. return this;
  23806. };
  23807. // Add `num` to `this`
  23808. BN.prototype.add = function add (num) {
  23809. var res;
  23810. if (num.negative !== 0 && this.negative === 0) {
  23811. num.negative = 0;
  23812. res = this.sub(num);
  23813. num.negative ^= 1;
  23814. return res;
  23815. } else if (num.negative === 0 && this.negative !== 0) {
  23816. this.negative = 0;
  23817. res = num.sub(this);
  23818. this.negative = 1;
  23819. return res;
  23820. }
  23821. if (this.length > num.length) return this.clone().iadd(num);
  23822. return num.clone().iadd(this);
  23823. };
  23824. // Subtract `num` from `this` in-place
  23825. BN.prototype.isub = function isub (num) {
  23826. // this - (-num) = this + num
  23827. if (num.negative !== 0) {
  23828. num.negative = 0;
  23829. var r = this.iadd(num);
  23830. num.negative = 1;
  23831. return r._normSign();
  23832. // -this - num = -(this + num)
  23833. } else if (this.negative !== 0) {
  23834. this.negative = 0;
  23835. this.iadd(num);
  23836. this.negative = 1;
  23837. return this._normSign();
  23838. }
  23839. // At this point both numbers are positive
  23840. var cmp = this.cmp(num);
  23841. // Optimization - zeroify
  23842. if (cmp === 0) {
  23843. this.negative = 0;
  23844. this.length = 1;
  23845. this.words[0] = 0;
  23846. return this;
  23847. }
  23848. // a > b
  23849. var a, b;
  23850. if (cmp > 0) {
  23851. a = this;
  23852. b = num;
  23853. } else {
  23854. a = num;
  23855. b = this;
  23856. }
  23857. var carry = 0;
  23858. for (var i = 0; i < b.length; i++) {
  23859. r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
  23860. carry = r >> 26;
  23861. this.words[i] = r & 0x3ffffff;
  23862. }
  23863. for (; carry !== 0 && i < a.length; i++) {
  23864. r = (a.words[i] | 0) + carry;
  23865. carry = r >> 26;
  23866. this.words[i] = r & 0x3ffffff;
  23867. }
  23868. // Copy rest of the words
  23869. if (carry === 0 && i < a.length && a !== this) {
  23870. for (; i < a.length; i++) {
  23871. this.words[i] = a.words[i];
  23872. }
  23873. }
  23874. this.length = Math.max(this.length, i);
  23875. if (a !== this) {
  23876. this.negative = 1;
  23877. }
  23878. return this.strip();
  23879. };
  23880. // Subtract `num` from `this`
  23881. BN.prototype.sub = function sub (num) {
  23882. return this.clone().isub(num);
  23883. };
  23884. function smallMulTo (self, num, out) {
  23885. out.negative = num.negative ^ self.negative;
  23886. var len = (self.length + num.length) | 0;
  23887. out.length = len;
  23888. len = (len - 1) | 0;
  23889. // Peel one iteration (compiler can't do it, because of code complexity)
  23890. var a = self.words[0] | 0;
  23891. var b = num.words[0] | 0;
  23892. var r = a * b;
  23893. var lo = r & 0x3ffffff;
  23894. var carry = (r / 0x4000000) | 0;
  23895. out.words[0] = lo;
  23896. for (var k = 1; k < len; k++) {
  23897. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  23898. // note that ncarry could be >= 0x3ffffff
  23899. var ncarry = carry >>> 26;
  23900. var rword = carry & 0x3ffffff;
  23901. var maxJ = Math.min(k, num.length - 1);
  23902. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  23903. var i = (k - j) | 0;
  23904. a = self.words[i] | 0;
  23905. b = num.words[j] | 0;
  23906. r = a * b + rword;
  23907. ncarry += (r / 0x4000000) | 0;
  23908. rword = r & 0x3ffffff;
  23909. }
  23910. out.words[k] = rword | 0;
  23911. carry = ncarry | 0;
  23912. }
  23913. if (carry !== 0) {
  23914. out.words[k] = carry | 0;
  23915. } else {
  23916. out.length--;
  23917. }
  23918. return out.strip();
  23919. }
  23920. // TODO(indutny): it may be reasonable to omit it for users who don't need
  23921. // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
  23922. // multiplication (like elliptic secp256k1).
  23923. var comb10MulTo = function comb10MulTo (self, num, out) {
  23924. var a = self.words;
  23925. var b = num.words;
  23926. var o = out.words;
  23927. var c = 0;
  23928. var lo;
  23929. var mid;
  23930. var hi;
  23931. var a0 = a[0] | 0;
  23932. var al0 = a0 & 0x1fff;
  23933. var ah0 = a0 >>> 13;
  23934. var a1 = a[1] | 0;
  23935. var al1 = a1 & 0x1fff;
  23936. var ah1 = a1 >>> 13;
  23937. var a2 = a[2] | 0;
  23938. var al2 = a2 & 0x1fff;
  23939. var ah2 = a2 >>> 13;
  23940. var a3 = a[3] | 0;
  23941. var al3 = a3 & 0x1fff;
  23942. var ah3 = a3 >>> 13;
  23943. var a4 = a[4] | 0;
  23944. var al4 = a4 & 0x1fff;
  23945. var ah4 = a4 >>> 13;
  23946. var a5 = a[5] | 0;
  23947. var al5 = a5 & 0x1fff;
  23948. var ah5 = a5 >>> 13;
  23949. var a6 = a[6] | 0;
  23950. var al6 = a6 & 0x1fff;
  23951. var ah6 = a6 >>> 13;
  23952. var a7 = a[7] | 0;
  23953. var al7 = a7 & 0x1fff;
  23954. var ah7 = a7 >>> 13;
  23955. var a8 = a[8] | 0;
  23956. var al8 = a8 & 0x1fff;
  23957. var ah8 = a8 >>> 13;
  23958. var a9 = a[9] | 0;
  23959. var al9 = a9 & 0x1fff;
  23960. var ah9 = a9 >>> 13;
  23961. var b0 = b[0] | 0;
  23962. var bl0 = b0 & 0x1fff;
  23963. var bh0 = b0 >>> 13;
  23964. var b1 = b[1] | 0;
  23965. var bl1 = b1 & 0x1fff;
  23966. var bh1 = b1 >>> 13;
  23967. var b2 = b[2] | 0;
  23968. var bl2 = b2 & 0x1fff;
  23969. var bh2 = b2 >>> 13;
  23970. var b3 = b[3] | 0;
  23971. var bl3 = b3 & 0x1fff;
  23972. var bh3 = b3 >>> 13;
  23973. var b4 = b[4] | 0;
  23974. var bl4 = b4 & 0x1fff;
  23975. var bh4 = b4 >>> 13;
  23976. var b5 = b[5] | 0;
  23977. var bl5 = b5 & 0x1fff;
  23978. var bh5 = b5 >>> 13;
  23979. var b6 = b[6] | 0;
  23980. var bl6 = b6 & 0x1fff;
  23981. var bh6 = b6 >>> 13;
  23982. var b7 = b[7] | 0;
  23983. var bl7 = b7 & 0x1fff;
  23984. var bh7 = b7 >>> 13;
  23985. var b8 = b[8] | 0;
  23986. var bl8 = b8 & 0x1fff;
  23987. var bh8 = b8 >>> 13;
  23988. var b9 = b[9] | 0;
  23989. var bl9 = b9 & 0x1fff;
  23990. var bh9 = b9 >>> 13;
  23991. out.negative = self.negative ^ num.negative;
  23992. out.length = 19;
  23993. /* k = 0 */
  23994. lo = Math.imul(al0, bl0);
  23995. mid = Math.imul(al0, bh0);
  23996. mid = (mid + Math.imul(ah0, bl0)) | 0;
  23997. hi = Math.imul(ah0, bh0);
  23998. var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  23999. c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
  24000. w0 &= 0x3ffffff;
  24001. /* k = 1 */
  24002. lo = Math.imul(al1, bl0);
  24003. mid = Math.imul(al1, bh0);
  24004. mid = (mid + Math.imul(ah1, bl0)) | 0;
  24005. hi = Math.imul(ah1, bh0);
  24006. lo = (lo + Math.imul(al0, bl1)) | 0;
  24007. mid = (mid + Math.imul(al0, bh1)) | 0;
  24008. mid = (mid + Math.imul(ah0, bl1)) | 0;
  24009. hi = (hi + Math.imul(ah0, bh1)) | 0;
  24010. var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24011. c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
  24012. w1 &= 0x3ffffff;
  24013. /* k = 2 */
  24014. lo = Math.imul(al2, bl0);
  24015. mid = Math.imul(al2, bh0);
  24016. mid = (mid + Math.imul(ah2, bl0)) | 0;
  24017. hi = Math.imul(ah2, bh0);
  24018. lo = (lo + Math.imul(al1, bl1)) | 0;
  24019. mid = (mid + Math.imul(al1, bh1)) | 0;
  24020. mid = (mid + Math.imul(ah1, bl1)) | 0;
  24021. hi = (hi + Math.imul(ah1, bh1)) | 0;
  24022. lo = (lo + Math.imul(al0, bl2)) | 0;
  24023. mid = (mid + Math.imul(al0, bh2)) | 0;
  24024. mid = (mid + Math.imul(ah0, bl2)) | 0;
  24025. hi = (hi + Math.imul(ah0, bh2)) | 0;
  24026. var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24027. c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
  24028. w2 &= 0x3ffffff;
  24029. /* k = 3 */
  24030. lo = Math.imul(al3, bl0);
  24031. mid = Math.imul(al3, bh0);
  24032. mid = (mid + Math.imul(ah3, bl0)) | 0;
  24033. hi = Math.imul(ah3, bh0);
  24034. lo = (lo + Math.imul(al2, bl1)) | 0;
  24035. mid = (mid + Math.imul(al2, bh1)) | 0;
  24036. mid = (mid + Math.imul(ah2, bl1)) | 0;
  24037. hi = (hi + Math.imul(ah2, bh1)) | 0;
  24038. lo = (lo + Math.imul(al1, bl2)) | 0;
  24039. mid = (mid + Math.imul(al1, bh2)) | 0;
  24040. mid = (mid + Math.imul(ah1, bl2)) | 0;
  24041. hi = (hi + Math.imul(ah1, bh2)) | 0;
  24042. lo = (lo + Math.imul(al0, bl3)) | 0;
  24043. mid = (mid + Math.imul(al0, bh3)) | 0;
  24044. mid = (mid + Math.imul(ah0, bl3)) | 0;
  24045. hi = (hi + Math.imul(ah0, bh3)) | 0;
  24046. var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24047. c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
  24048. w3 &= 0x3ffffff;
  24049. /* k = 4 */
  24050. lo = Math.imul(al4, bl0);
  24051. mid = Math.imul(al4, bh0);
  24052. mid = (mid + Math.imul(ah4, bl0)) | 0;
  24053. hi = Math.imul(ah4, bh0);
  24054. lo = (lo + Math.imul(al3, bl1)) | 0;
  24055. mid = (mid + Math.imul(al3, bh1)) | 0;
  24056. mid = (mid + Math.imul(ah3, bl1)) | 0;
  24057. hi = (hi + Math.imul(ah3, bh1)) | 0;
  24058. lo = (lo + Math.imul(al2, bl2)) | 0;
  24059. mid = (mid + Math.imul(al2, bh2)) | 0;
  24060. mid = (mid + Math.imul(ah2, bl2)) | 0;
  24061. hi = (hi + Math.imul(ah2, bh2)) | 0;
  24062. lo = (lo + Math.imul(al1, bl3)) | 0;
  24063. mid = (mid + Math.imul(al1, bh3)) | 0;
  24064. mid = (mid + Math.imul(ah1, bl3)) | 0;
  24065. hi = (hi + Math.imul(ah1, bh3)) | 0;
  24066. lo = (lo + Math.imul(al0, bl4)) | 0;
  24067. mid = (mid + Math.imul(al0, bh4)) | 0;
  24068. mid = (mid + Math.imul(ah0, bl4)) | 0;
  24069. hi = (hi + Math.imul(ah0, bh4)) | 0;
  24070. var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24071. c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
  24072. w4 &= 0x3ffffff;
  24073. /* k = 5 */
  24074. lo = Math.imul(al5, bl0);
  24075. mid = Math.imul(al5, bh0);
  24076. mid = (mid + Math.imul(ah5, bl0)) | 0;
  24077. hi = Math.imul(ah5, bh0);
  24078. lo = (lo + Math.imul(al4, bl1)) | 0;
  24079. mid = (mid + Math.imul(al4, bh1)) | 0;
  24080. mid = (mid + Math.imul(ah4, bl1)) | 0;
  24081. hi = (hi + Math.imul(ah4, bh1)) | 0;
  24082. lo = (lo + Math.imul(al3, bl2)) | 0;
  24083. mid = (mid + Math.imul(al3, bh2)) | 0;
  24084. mid = (mid + Math.imul(ah3, bl2)) | 0;
  24085. hi = (hi + Math.imul(ah3, bh2)) | 0;
  24086. lo = (lo + Math.imul(al2, bl3)) | 0;
  24087. mid = (mid + Math.imul(al2, bh3)) | 0;
  24088. mid = (mid + Math.imul(ah2, bl3)) | 0;
  24089. hi = (hi + Math.imul(ah2, bh3)) | 0;
  24090. lo = (lo + Math.imul(al1, bl4)) | 0;
  24091. mid = (mid + Math.imul(al1, bh4)) | 0;
  24092. mid = (mid + Math.imul(ah1, bl4)) | 0;
  24093. hi = (hi + Math.imul(ah1, bh4)) | 0;
  24094. lo = (lo + Math.imul(al0, bl5)) | 0;
  24095. mid = (mid + Math.imul(al0, bh5)) | 0;
  24096. mid = (mid + Math.imul(ah0, bl5)) | 0;
  24097. hi = (hi + Math.imul(ah0, bh5)) | 0;
  24098. var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24099. c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
  24100. w5 &= 0x3ffffff;
  24101. /* k = 6 */
  24102. lo = Math.imul(al6, bl0);
  24103. mid = Math.imul(al6, bh0);
  24104. mid = (mid + Math.imul(ah6, bl0)) | 0;
  24105. hi = Math.imul(ah6, bh0);
  24106. lo = (lo + Math.imul(al5, bl1)) | 0;
  24107. mid = (mid + Math.imul(al5, bh1)) | 0;
  24108. mid = (mid + Math.imul(ah5, bl1)) | 0;
  24109. hi = (hi + Math.imul(ah5, bh1)) | 0;
  24110. lo = (lo + Math.imul(al4, bl2)) | 0;
  24111. mid = (mid + Math.imul(al4, bh2)) | 0;
  24112. mid = (mid + Math.imul(ah4, bl2)) | 0;
  24113. hi = (hi + Math.imul(ah4, bh2)) | 0;
  24114. lo = (lo + Math.imul(al3, bl3)) | 0;
  24115. mid = (mid + Math.imul(al3, bh3)) | 0;
  24116. mid = (mid + Math.imul(ah3, bl3)) | 0;
  24117. hi = (hi + Math.imul(ah3, bh3)) | 0;
  24118. lo = (lo + Math.imul(al2, bl4)) | 0;
  24119. mid = (mid + Math.imul(al2, bh4)) | 0;
  24120. mid = (mid + Math.imul(ah2, bl4)) | 0;
  24121. hi = (hi + Math.imul(ah2, bh4)) | 0;
  24122. lo = (lo + Math.imul(al1, bl5)) | 0;
  24123. mid = (mid + Math.imul(al1, bh5)) | 0;
  24124. mid = (mid + Math.imul(ah1, bl5)) | 0;
  24125. hi = (hi + Math.imul(ah1, bh5)) | 0;
  24126. lo = (lo + Math.imul(al0, bl6)) | 0;
  24127. mid = (mid + Math.imul(al0, bh6)) | 0;
  24128. mid = (mid + Math.imul(ah0, bl6)) | 0;
  24129. hi = (hi + Math.imul(ah0, bh6)) | 0;
  24130. var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24131. c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
  24132. w6 &= 0x3ffffff;
  24133. /* k = 7 */
  24134. lo = Math.imul(al7, bl0);
  24135. mid = Math.imul(al7, bh0);
  24136. mid = (mid + Math.imul(ah7, bl0)) | 0;
  24137. hi = Math.imul(ah7, bh0);
  24138. lo = (lo + Math.imul(al6, bl1)) | 0;
  24139. mid = (mid + Math.imul(al6, bh1)) | 0;
  24140. mid = (mid + Math.imul(ah6, bl1)) | 0;
  24141. hi = (hi + Math.imul(ah6, bh1)) | 0;
  24142. lo = (lo + Math.imul(al5, bl2)) | 0;
  24143. mid = (mid + Math.imul(al5, bh2)) | 0;
  24144. mid = (mid + Math.imul(ah5, bl2)) | 0;
  24145. hi = (hi + Math.imul(ah5, bh2)) | 0;
  24146. lo = (lo + Math.imul(al4, bl3)) | 0;
  24147. mid = (mid + Math.imul(al4, bh3)) | 0;
  24148. mid = (mid + Math.imul(ah4, bl3)) | 0;
  24149. hi = (hi + Math.imul(ah4, bh3)) | 0;
  24150. lo = (lo + Math.imul(al3, bl4)) | 0;
  24151. mid = (mid + Math.imul(al3, bh4)) | 0;
  24152. mid = (mid + Math.imul(ah3, bl4)) | 0;
  24153. hi = (hi + Math.imul(ah3, bh4)) | 0;
  24154. lo = (lo + Math.imul(al2, bl5)) | 0;
  24155. mid = (mid + Math.imul(al2, bh5)) | 0;
  24156. mid = (mid + Math.imul(ah2, bl5)) | 0;
  24157. hi = (hi + Math.imul(ah2, bh5)) | 0;
  24158. lo = (lo + Math.imul(al1, bl6)) | 0;
  24159. mid = (mid + Math.imul(al1, bh6)) | 0;
  24160. mid = (mid + Math.imul(ah1, bl6)) | 0;
  24161. hi = (hi + Math.imul(ah1, bh6)) | 0;
  24162. lo = (lo + Math.imul(al0, bl7)) | 0;
  24163. mid = (mid + Math.imul(al0, bh7)) | 0;
  24164. mid = (mid + Math.imul(ah0, bl7)) | 0;
  24165. hi = (hi + Math.imul(ah0, bh7)) | 0;
  24166. var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24167. c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
  24168. w7 &= 0x3ffffff;
  24169. /* k = 8 */
  24170. lo = Math.imul(al8, bl0);
  24171. mid = Math.imul(al8, bh0);
  24172. mid = (mid + Math.imul(ah8, bl0)) | 0;
  24173. hi = Math.imul(ah8, bh0);
  24174. lo = (lo + Math.imul(al7, bl1)) | 0;
  24175. mid = (mid + Math.imul(al7, bh1)) | 0;
  24176. mid = (mid + Math.imul(ah7, bl1)) | 0;
  24177. hi = (hi + Math.imul(ah7, bh1)) | 0;
  24178. lo = (lo + Math.imul(al6, bl2)) | 0;
  24179. mid = (mid + Math.imul(al6, bh2)) | 0;
  24180. mid = (mid + Math.imul(ah6, bl2)) | 0;
  24181. hi = (hi + Math.imul(ah6, bh2)) | 0;
  24182. lo = (lo + Math.imul(al5, bl3)) | 0;
  24183. mid = (mid + Math.imul(al5, bh3)) | 0;
  24184. mid = (mid + Math.imul(ah5, bl3)) | 0;
  24185. hi = (hi + Math.imul(ah5, bh3)) | 0;
  24186. lo = (lo + Math.imul(al4, bl4)) | 0;
  24187. mid = (mid + Math.imul(al4, bh4)) | 0;
  24188. mid = (mid + Math.imul(ah4, bl4)) | 0;
  24189. hi = (hi + Math.imul(ah4, bh4)) | 0;
  24190. lo = (lo + Math.imul(al3, bl5)) | 0;
  24191. mid = (mid + Math.imul(al3, bh5)) | 0;
  24192. mid = (mid + Math.imul(ah3, bl5)) | 0;
  24193. hi = (hi + Math.imul(ah3, bh5)) | 0;
  24194. lo = (lo + Math.imul(al2, bl6)) | 0;
  24195. mid = (mid + Math.imul(al2, bh6)) | 0;
  24196. mid = (mid + Math.imul(ah2, bl6)) | 0;
  24197. hi = (hi + Math.imul(ah2, bh6)) | 0;
  24198. lo = (lo + Math.imul(al1, bl7)) | 0;
  24199. mid = (mid + Math.imul(al1, bh7)) | 0;
  24200. mid = (mid + Math.imul(ah1, bl7)) | 0;
  24201. hi = (hi + Math.imul(ah1, bh7)) | 0;
  24202. lo = (lo + Math.imul(al0, bl8)) | 0;
  24203. mid = (mid + Math.imul(al0, bh8)) | 0;
  24204. mid = (mid + Math.imul(ah0, bl8)) | 0;
  24205. hi = (hi + Math.imul(ah0, bh8)) | 0;
  24206. var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24207. c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
  24208. w8 &= 0x3ffffff;
  24209. /* k = 9 */
  24210. lo = Math.imul(al9, bl0);
  24211. mid = Math.imul(al9, bh0);
  24212. mid = (mid + Math.imul(ah9, bl0)) | 0;
  24213. hi = Math.imul(ah9, bh0);
  24214. lo = (lo + Math.imul(al8, bl1)) | 0;
  24215. mid = (mid + Math.imul(al8, bh1)) | 0;
  24216. mid = (mid + Math.imul(ah8, bl1)) | 0;
  24217. hi = (hi + Math.imul(ah8, bh1)) | 0;
  24218. lo = (lo + Math.imul(al7, bl2)) | 0;
  24219. mid = (mid + Math.imul(al7, bh2)) | 0;
  24220. mid = (mid + Math.imul(ah7, bl2)) | 0;
  24221. hi = (hi + Math.imul(ah7, bh2)) | 0;
  24222. lo = (lo + Math.imul(al6, bl3)) | 0;
  24223. mid = (mid + Math.imul(al6, bh3)) | 0;
  24224. mid = (mid + Math.imul(ah6, bl3)) | 0;
  24225. hi = (hi + Math.imul(ah6, bh3)) | 0;
  24226. lo = (lo + Math.imul(al5, bl4)) | 0;
  24227. mid = (mid + Math.imul(al5, bh4)) | 0;
  24228. mid = (mid + Math.imul(ah5, bl4)) | 0;
  24229. hi = (hi + Math.imul(ah5, bh4)) | 0;
  24230. lo = (lo + Math.imul(al4, bl5)) | 0;
  24231. mid = (mid + Math.imul(al4, bh5)) | 0;
  24232. mid = (mid + Math.imul(ah4, bl5)) | 0;
  24233. hi = (hi + Math.imul(ah4, bh5)) | 0;
  24234. lo = (lo + Math.imul(al3, bl6)) | 0;
  24235. mid = (mid + Math.imul(al3, bh6)) | 0;
  24236. mid = (mid + Math.imul(ah3, bl6)) | 0;
  24237. hi = (hi + Math.imul(ah3, bh6)) | 0;
  24238. lo = (lo + Math.imul(al2, bl7)) | 0;
  24239. mid = (mid + Math.imul(al2, bh7)) | 0;
  24240. mid = (mid + Math.imul(ah2, bl7)) | 0;
  24241. hi = (hi + Math.imul(ah2, bh7)) | 0;
  24242. lo = (lo + Math.imul(al1, bl8)) | 0;
  24243. mid = (mid + Math.imul(al1, bh8)) | 0;
  24244. mid = (mid + Math.imul(ah1, bl8)) | 0;
  24245. hi = (hi + Math.imul(ah1, bh8)) | 0;
  24246. lo = (lo + Math.imul(al0, bl9)) | 0;
  24247. mid = (mid + Math.imul(al0, bh9)) | 0;
  24248. mid = (mid + Math.imul(ah0, bl9)) | 0;
  24249. hi = (hi + Math.imul(ah0, bh9)) | 0;
  24250. var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24251. c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
  24252. w9 &= 0x3ffffff;
  24253. /* k = 10 */
  24254. lo = Math.imul(al9, bl1);
  24255. mid = Math.imul(al9, bh1);
  24256. mid = (mid + Math.imul(ah9, bl1)) | 0;
  24257. hi = Math.imul(ah9, bh1);
  24258. lo = (lo + Math.imul(al8, bl2)) | 0;
  24259. mid = (mid + Math.imul(al8, bh2)) | 0;
  24260. mid = (mid + Math.imul(ah8, bl2)) | 0;
  24261. hi = (hi + Math.imul(ah8, bh2)) | 0;
  24262. lo = (lo + Math.imul(al7, bl3)) | 0;
  24263. mid = (mid + Math.imul(al7, bh3)) | 0;
  24264. mid = (mid + Math.imul(ah7, bl3)) | 0;
  24265. hi = (hi + Math.imul(ah7, bh3)) | 0;
  24266. lo = (lo + Math.imul(al6, bl4)) | 0;
  24267. mid = (mid + Math.imul(al6, bh4)) | 0;
  24268. mid = (mid + Math.imul(ah6, bl4)) | 0;
  24269. hi = (hi + Math.imul(ah6, bh4)) | 0;
  24270. lo = (lo + Math.imul(al5, bl5)) | 0;
  24271. mid = (mid + Math.imul(al5, bh5)) | 0;
  24272. mid = (mid + Math.imul(ah5, bl5)) | 0;
  24273. hi = (hi + Math.imul(ah5, bh5)) | 0;
  24274. lo = (lo + Math.imul(al4, bl6)) | 0;
  24275. mid = (mid + Math.imul(al4, bh6)) | 0;
  24276. mid = (mid + Math.imul(ah4, bl6)) | 0;
  24277. hi = (hi + Math.imul(ah4, bh6)) | 0;
  24278. lo = (lo + Math.imul(al3, bl7)) | 0;
  24279. mid = (mid + Math.imul(al3, bh7)) | 0;
  24280. mid = (mid + Math.imul(ah3, bl7)) | 0;
  24281. hi = (hi + Math.imul(ah3, bh7)) | 0;
  24282. lo = (lo + Math.imul(al2, bl8)) | 0;
  24283. mid = (mid + Math.imul(al2, bh8)) | 0;
  24284. mid = (mid + Math.imul(ah2, bl8)) | 0;
  24285. hi = (hi + Math.imul(ah2, bh8)) | 0;
  24286. lo = (lo + Math.imul(al1, bl9)) | 0;
  24287. mid = (mid + Math.imul(al1, bh9)) | 0;
  24288. mid = (mid + Math.imul(ah1, bl9)) | 0;
  24289. hi = (hi + Math.imul(ah1, bh9)) | 0;
  24290. var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24291. c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
  24292. w10 &= 0x3ffffff;
  24293. /* k = 11 */
  24294. lo = Math.imul(al9, bl2);
  24295. mid = Math.imul(al9, bh2);
  24296. mid = (mid + Math.imul(ah9, bl2)) | 0;
  24297. hi = Math.imul(ah9, bh2);
  24298. lo = (lo + Math.imul(al8, bl3)) | 0;
  24299. mid = (mid + Math.imul(al8, bh3)) | 0;
  24300. mid = (mid + Math.imul(ah8, bl3)) | 0;
  24301. hi = (hi + Math.imul(ah8, bh3)) | 0;
  24302. lo = (lo + Math.imul(al7, bl4)) | 0;
  24303. mid = (mid + Math.imul(al7, bh4)) | 0;
  24304. mid = (mid + Math.imul(ah7, bl4)) | 0;
  24305. hi = (hi + Math.imul(ah7, bh4)) | 0;
  24306. lo = (lo + Math.imul(al6, bl5)) | 0;
  24307. mid = (mid + Math.imul(al6, bh5)) | 0;
  24308. mid = (mid + Math.imul(ah6, bl5)) | 0;
  24309. hi = (hi + Math.imul(ah6, bh5)) | 0;
  24310. lo = (lo + Math.imul(al5, bl6)) | 0;
  24311. mid = (mid + Math.imul(al5, bh6)) | 0;
  24312. mid = (mid + Math.imul(ah5, bl6)) | 0;
  24313. hi = (hi + Math.imul(ah5, bh6)) | 0;
  24314. lo = (lo + Math.imul(al4, bl7)) | 0;
  24315. mid = (mid + Math.imul(al4, bh7)) | 0;
  24316. mid = (mid + Math.imul(ah4, bl7)) | 0;
  24317. hi = (hi + Math.imul(ah4, bh7)) | 0;
  24318. lo = (lo + Math.imul(al3, bl8)) | 0;
  24319. mid = (mid + Math.imul(al3, bh8)) | 0;
  24320. mid = (mid + Math.imul(ah3, bl8)) | 0;
  24321. hi = (hi + Math.imul(ah3, bh8)) | 0;
  24322. lo = (lo + Math.imul(al2, bl9)) | 0;
  24323. mid = (mid + Math.imul(al2, bh9)) | 0;
  24324. mid = (mid + Math.imul(ah2, bl9)) | 0;
  24325. hi = (hi + Math.imul(ah2, bh9)) | 0;
  24326. var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24327. c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
  24328. w11 &= 0x3ffffff;
  24329. /* k = 12 */
  24330. lo = Math.imul(al9, bl3);
  24331. mid = Math.imul(al9, bh3);
  24332. mid = (mid + Math.imul(ah9, bl3)) | 0;
  24333. hi = Math.imul(ah9, bh3);
  24334. lo = (lo + Math.imul(al8, bl4)) | 0;
  24335. mid = (mid + Math.imul(al8, bh4)) | 0;
  24336. mid = (mid + Math.imul(ah8, bl4)) | 0;
  24337. hi = (hi + Math.imul(ah8, bh4)) | 0;
  24338. lo = (lo + Math.imul(al7, bl5)) | 0;
  24339. mid = (mid + Math.imul(al7, bh5)) | 0;
  24340. mid = (mid + Math.imul(ah7, bl5)) | 0;
  24341. hi = (hi + Math.imul(ah7, bh5)) | 0;
  24342. lo = (lo + Math.imul(al6, bl6)) | 0;
  24343. mid = (mid + Math.imul(al6, bh6)) | 0;
  24344. mid = (mid + Math.imul(ah6, bl6)) | 0;
  24345. hi = (hi + Math.imul(ah6, bh6)) | 0;
  24346. lo = (lo + Math.imul(al5, bl7)) | 0;
  24347. mid = (mid + Math.imul(al5, bh7)) | 0;
  24348. mid = (mid + Math.imul(ah5, bl7)) | 0;
  24349. hi = (hi + Math.imul(ah5, bh7)) | 0;
  24350. lo = (lo + Math.imul(al4, bl8)) | 0;
  24351. mid = (mid + Math.imul(al4, bh8)) | 0;
  24352. mid = (mid + Math.imul(ah4, bl8)) | 0;
  24353. hi = (hi + Math.imul(ah4, bh8)) | 0;
  24354. lo = (lo + Math.imul(al3, bl9)) | 0;
  24355. mid = (mid + Math.imul(al3, bh9)) | 0;
  24356. mid = (mid + Math.imul(ah3, bl9)) | 0;
  24357. hi = (hi + Math.imul(ah3, bh9)) | 0;
  24358. var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24359. c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
  24360. w12 &= 0x3ffffff;
  24361. /* k = 13 */
  24362. lo = Math.imul(al9, bl4);
  24363. mid = Math.imul(al9, bh4);
  24364. mid = (mid + Math.imul(ah9, bl4)) | 0;
  24365. hi = Math.imul(ah9, bh4);
  24366. lo = (lo + Math.imul(al8, bl5)) | 0;
  24367. mid = (mid + Math.imul(al8, bh5)) | 0;
  24368. mid = (mid + Math.imul(ah8, bl5)) | 0;
  24369. hi = (hi + Math.imul(ah8, bh5)) | 0;
  24370. lo = (lo + Math.imul(al7, bl6)) | 0;
  24371. mid = (mid + Math.imul(al7, bh6)) | 0;
  24372. mid = (mid + Math.imul(ah7, bl6)) | 0;
  24373. hi = (hi + Math.imul(ah7, bh6)) | 0;
  24374. lo = (lo + Math.imul(al6, bl7)) | 0;
  24375. mid = (mid + Math.imul(al6, bh7)) | 0;
  24376. mid = (mid + Math.imul(ah6, bl7)) | 0;
  24377. hi = (hi + Math.imul(ah6, bh7)) | 0;
  24378. lo = (lo + Math.imul(al5, bl8)) | 0;
  24379. mid = (mid + Math.imul(al5, bh8)) | 0;
  24380. mid = (mid + Math.imul(ah5, bl8)) | 0;
  24381. hi = (hi + Math.imul(ah5, bh8)) | 0;
  24382. lo = (lo + Math.imul(al4, bl9)) | 0;
  24383. mid = (mid + Math.imul(al4, bh9)) | 0;
  24384. mid = (mid + Math.imul(ah4, bl9)) | 0;
  24385. hi = (hi + Math.imul(ah4, bh9)) | 0;
  24386. var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24387. c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
  24388. w13 &= 0x3ffffff;
  24389. /* k = 14 */
  24390. lo = Math.imul(al9, bl5);
  24391. mid = Math.imul(al9, bh5);
  24392. mid = (mid + Math.imul(ah9, bl5)) | 0;
  24393. hi = Math.imul(ah9, bh5);
  24394. lo = (lo + Math.imul(al8, bl6)) | 0;
  24395. mid = (mid + Math.imul(al8, bh6)) | 0;
  24396. mid = (mid + Math.imul(ah8, bl6)) | 0;
  24397. hi = (hi + Math.imul(ah8, bh6)) | 0;
  24398. lo = (lo + Math.imul(al7, bl7)) | 0;
  24399. mid = (mid + Math.imul(al7, bh7)) | 0;
  24400. mid = (mid + Math.imul(ah7, bl7)) | 0;
  24401. hi = (hi + Math.imul(ah7, bh7)) | 0;
  24402. lo = (lo + Math.imul(al6, bl8)) | 0;
  24403. mid = (mid + Math.imul(al6, bh8)) | 0;
  24404. mid = (mid + Math.imul(ah6, bl8)) | 0;
  24405. hi = (hi + Math.imul(ah6, bh8)) | 0;
  24406. lo = (lo + Math.imul(al5, bl9)) | 0;
  24407. mid = (mid + Math.imul(al5, bh9)) | 0;
  24408. mid = (mid + Math.imul(ah5, bl9)) | 0;
  24409. hi = (hi + Math.imul(ah5, bh9)) | 0;
  24410. var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24411. c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
  24412. w14 &= 0x3ffffff;
  24413. /* k = 15 */
  24414. lo = Math.imul(al9, bl6);
  24415. mid = Math.imul(al9, bh6);
  24416. mid = (mid + Math.imul(ah9, bl6)) | 0;
  24417. hi = Math.imul(ah9, bh6);
  24418. lo = (lo + Math.imul(al8, bl7)) | 0;
  24419. mid = (mid + Math.imul(al8, bh7)) | 0;
  24420. mid = (mid + Math.imul(ah8, bl7)) | 0;
  24421. hi = (hi + Math.imul(ah8, bh7)) | 0;
  24422. lo = (lo + Math.imul(al7, bl8)) | 0;
  24423. mid = (mid + Math.imul(al7, bh8)) | 0;
  24424. mid = (mid + Math.imul(ah7, bl8)) | 0;
  24425. hi = (hi + Math.imul(ah7, bh8)) | 0;
  24426. lo = (lo + Math.imul(al6, bl9)) | 0;
  24427. mid = (mid + Math.imul(al6, bh9)) | 0;
  24428. mid = (mid + Math.imul(ah6, bl9)) | 0;
  24429. hi = (hi + Math.imul(ah6, bh9)) | 0;
  24430. var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24431. c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
  24432. w15 &= 0x3ffffff;
  24433. /* k = 16 */
  24434. lo = Math.imul(al9, bl7);
  24435. mid = Math.imul(al9, bh7);
  24436. mid = (mid + Math.imul(ah9, bl7)) | 0;
  24437. hi = Math.imul(ah9, bh7);
  24438. lo = (lo + Math.imul(al8, bl8)) | 0;
  24439. mid = (mid + Math.imul(al8, bh8)) | 0;
  24440. mid = (mid + Math.imul(ah8, bl8)) | 0;
  24441. hi = (hi + Math.imul(ah8, bh8)) | 0;
  24442. lo = (lo + Math.imul(al7, bl9)) | 0;
  24443. mid = (mid + Math.imul(al7, bh9)) | 0;
  24444. mid = (mid + Math.imul(ah7, bl9)) | 0;
  24445. hi = (hi + Math.imul(ah7, bh9)) | 0;
  24446. var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24447. c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
  24448. w16 &= 0x3ffffff;
  24449. /* k = 17 */
  24450. lo = Math.imul(al9, bl8);
  24451. mid = Math.imul(al9, bh8);
  24452. mid = (mid + Math.imul(ah9, bl8)) | 0;
  24453. hi = Math.imul(ah9, bh8);
  24454. lo = (lo + Math.imul(al8, bl9)) | 0;
  24455. mid = (mid + Math.imul(al8, bh9)) | 0;
  24456. mid = (mid + Math.imul(ah8, bl9)) | 0;
  24457. hi = (hi + Math.imul(ah8, bh9)) | 0;
  24458. var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24459. c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
  24460. w17 &= 0x3ffffff;
  24461. /* k = 18 */
  24462. lo = Math.imul(al9, bl9);
  24463. mid = Math.imul(al9, bh9);
  24464. mid = (mid + Math.imul(ah9, bl9)) | 0;
  24465. hi = Math.imul(ah9, bh9);
  24466. var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  24467. c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
  24468. w18 &= 0x3ffffff;
  24469. o[0] = w0;
  24470. o[1] = w1;
  24471. o[2] = w2;
  24472. o[3] = w3;
  24473. o[4] = w4;
  24474. o[5] = w5;
  24475. o[6] = w6;
  24476. o[7] = w7;
  24477. o[8] = w8;
  24478. o[9] = w9;
  24479. o[10] = w10;
  24480. o[11] = w11;
  24481. o[12] = w12;
  24482. o[13] = w13;
  24483. o[14] = w14;
  24484. o[15] = w15;
  24485. o[16] = w16;
  24486. o[17] = w17;
  24487. o[18] = w18;
  24488. if (c !== 0) {
  24489. o[19] = c;
  24490. out.length++;
  24491. }
  24492. return out;
  24493. };
  24494. // Polyfill comb
  24495. if (!Math.imul) {
  24496. comb10MulTo = smallMulTo;
  24497. }
  24498. function bigMulTo (self, num, out) {
  24499. out.negative = num.negative ^ self.negative;
  24500. out.length = self.length + num.length;
  24501. var carry = 0;
  24502. var hncarry = 0;
  24503. for (var k = 0; k < out.length - 1; k++) {
  24504. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  24505. // note that ncarry could be >= 0x3ffffff
  24506. var ncarry = hncarry;
  24507. hncarry = 0;
  24508. var rword = carry & 0x3ffffff;
  24509. var maxJ = Math.min(k, num.length - 1);
  24510. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  24511. var i = k - j;
  24512. var a = self.words[i] | 0;
  24513. var b = num.words[j] | 0;
  24514. var r = a * b;
  24515. var lo = r & 0x3ffffff;
  24516. ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
  24517. lo = (lo + rword) | 0;
  24518. rword = lo & 0x3ffffff;
  24519. ncarry = (ncarry + (lo >>> 26)) | 0;
  24520. hncarry += ncarry >>> 26;
  24521. ncarry &= 0x3ffffff;
  24522. }
  24523. out.words[k] = rword;
  24524. carry = ncarry;
  24525. ncarry = hncarry;
  24526. }
  24527. if (carry !== 0) {
  24528. out.words[k] = carry;
  24529. } else {
  24530. out.length--;
  24531. }
  24532. return out.strip();
  24533. }
  24534. function jumboMulTo (self, num, out) {
  24535. var fftm = new FFTM();
  24536. return fftm.mulp(self, num, out);
  24537. }
  24538. BN.prototype.mulTo = function mulTo (num, out) {
  24539. var res;
  24540. var len = this.length + num.length;
  24541. if (this.length === 10 && num.length === 10) {
  24542. res = comb10MulTo(this, num, out);
  24543. } else if (len < 63) {
  24544. res = smallMulTo(this, num, out);
  24545. } else if (len < 1024) {
  24546. res = bigMulTo(this, num, out);
  24547. } else {
  24548. res = jumboMulTo(this, num, out);
  24549. }
  24550. return res;
  24551. };
  24552. // Cooley-Tukey algorithm for FFT
  24553. // slightly revisited to rely on looping instead of recursion
  24554. function FFTM (x, y) {
  24555. this.x = x;
  24556. this.y = y;
  24557. }
  24558. FFTM.prototype.makeRBT = function makeRBT (N) {
  24559. var t = new Array(N);
  24560. var l = BN.prototype._countBits(N) - 1;
  24561. for (var i = 0; i < N; i++) {
  24562. t[i] = this.revBin(i, l, N);
  24563. }
  24564. return t;
  24565. };
  24566. // Returns binary-reversed representation of `x`
  24567. FFTM.prototype.revBin = function revBin (x, l, N) {
  24568. if (x === 0 || x === N - 1) return x;
  24569. var rb = 0;
  24570. for (var i = 0; i < l; i++) {
  24571. rb |= (x & 1) << (l - i - 1);
  24572. x >>= 1;
  24573. }
  24574. return rb;
  24575. };
  24576. // Performs "tweedling" phase, therefore 'emulating'
  24577. // behaviour of the recursive algorithm
  24578. FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
  24579. for (var i = 0; i < N; i++) {
  24580. rtws[i] = rws[rbt[i]];
  24581. itws[i] = iws[rbt[i]];
  24582. }
  24583. };
  24584. FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
  24585. this.permute(rbt, rws, iws, rtws, itws, N);
  24586. for (var s = 1; s < N; s <<= 1) {
  24587. var l = s << 1;
  24588. var rtwdf = Math.cos(2 * Math.PI / l);
  24589. var itwdf = Math.sin(2 * Math.PI / l);
  24590. for (var p = 0; p < N; p += l) {
  24591. var rtwdf_ = rtwdf;
  24592. var itwdf_ = itwdf;
  24593. for (var j = 0; j < s; j++) {
  24594. var re = rtws[p + j];
  24595. var ie = itws[p + j];
  24596. var ro = rtws[p + j + s];
  24597. var io = itws[p + j + s];
  24598. var rx = rtwdf_ * ro - itwdf_ * io;
  24599. io = rtwdf_ * io + itwdf_ * ro;
  24600. ro = rx;
  24601. rtws[p + j] = re + ro;
  24602. itws[p + j] = ie + io;
  24603. rtws[p + j + s] = re - ro;
  24604. itws[p + j + s] = ie - io;
  24605. /* jshint maxdepth : false */
  24606. if (j !== l) {
  24607. rx = rtwdf * rtwdf_ - itwdf * itwdf_;
  24608. itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
  24609. rtwdf_ = rx;
  24610. }
  24611. }
  24612. }
  24613. }
  24614. };
  24615. FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
  24616. var N = Math.max(m, n) | 1;
  24617. var odd = N & 1;
  24618. var i = 0;
  24619. for (N = N / 2 | 0; N; N = N >>> 1) {
  24620. i++;
  24621. }
  24622. return 1 << i + 1 + odd;
  24623. };
  24624. FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
  24625. if (N <= 1) return;
  24626. for (var i = 0; i < N / 2; i++) {
  24627. var t = rws[i];
  24628. rws[i] = rws[N - i - 1];
  24629. rws[N - i - 1] = t;
  24630. t = iws[i];
  24631. iws[i] = -iws[N - i - 1];
  24632. iws[N - i - 1] = -t;
  24633. }
  24634. };
  24635. FFTM.prototype.normalize13b = function normalize13b (ws, N) {
  24636. var carry = 0;
  24637. for (var i = 0; i < N / 2; i++) {
  24638. var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
  24639. Math.round(ws[2 * i] / N) +
  24640. carry;
  24641. ws[i] = w & 0x3ffffff;
  24642. if (w < 0x4000000) {
  24643. carry = 0;
  24644. } else {
  24645. carry = w / 0x4000000 | 0;
  24646. }
  24647. }
  24648. return ws;
  24649. };
  24650. FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
  24651. var carry = 0;
  24652. for (var i = 0; i < len; i++) {
  24653. carry = carry + (ws[i] | 0);
  24654. rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
  24655. rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
  24656. }
  24657. // Pad with zeroes
  24658. for (i = 2 * len; i < N; ++i) {
  24659. rws[i] = 0;
  24660. }
  24661. assert(carry === 0);
  24662. assert((carry & ~0x1fff) === 0);
  24663. };
  24664. FFTM.prototype.stub = function stub (N) {
  24665. var ph = new Array(N);
  24666. for (var i = 0; i < N; i++) {
  24667. ph[i] = 0;
  24668. }
  24669. return ph;
  24670. };
  24671. FFTM.prototype.mulp = function mulp (x, y, out) {
  24672. var N = 2 * this.guessLen13b(x.length, y.length);
  24673. var rbt = this.makeRBT(N);
  24674. var _ = this.stub(N);
  24675. var rws = new Array(N);
  24676. var rwst = new Array(N);
  24677. var iwst = new Array(N);
  24678. var nrws = new Array(N);
  24679. var nrwst = new Array(N);
  24680. var niwst = new Array(N);
  24681. var rmws = out.words;
  24682. rmws.length = N;
  24683. this.convert13b(x.words, x.length, rws, N);
  24684. this.convert13b(y.words, y.length, nrws, N);
  24685. this.transform(rws, _, rwst, iwst, N, rbt);
  24686. this.transform(nrws, _, nrwst, niwst, N, rbt);
  24687. for (var i = 0; i < N; i++) {
  24688. var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
  24689. iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
  24690. rwst[i] = rx;
  24691. }
  24692. this.conjugate(rwst, iwst, N);
  24693. this.transform(rwst, iwst, rmws, _, N, rbt);
  24694. this.conjugate(rmws, _, N);
  24695. this.normalize13b(rmws, N);
  24696. out.negative = x.negative ^ y.negative;
  24697. out.length = x.length + y.length;
  24698. return out.strip();
  24699. };
  24700. // Multiply `this` by `num`
  24701. BN.prototype.mul = function mul (num) {
  24702. var out = new BN(null);
  24703. out.words = new Array(this.length + num.length);
  24704. return this.mulTo(num, out);
  24705. };
  24706. // Multiply employing FFT
  24707. BN.prototype.mulf = function mulf (num) {
  24708. var out = new BN(null);
  24709. out.words = new Array(this.length + num.length);
  24710. return jumboMulTo(this, num, out);
  24711. };
  24712. // In-place Multiplication
  24713. BN.prototype.imul = function imul (num) {
  24714. return this.clone().mulTo(num, this);
  24715. };
  24716. BN.prototype.imuln = function imuln (num) {
  24717. assert(typeof num === 'number');
  24718. assert(num < 0x4000000);
  24719. // Carry
  24720. var carry = 0;
  24721. for (var i = 0; i < this.length; i++) {
  24722. var w = (this.words[i] | 0) * num;
  24723. var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
  24724. carry >>= 26;
  24725. carry += (w / 0x4000000) | 0;
  24726. // NOTE: lo is 27bit maximum
  24727. carry += lo >>> 26;
  24728. this.words[i] = lo & 0x3ffffff;
  24729. }
  24730. if (carry !== 0) {
  24731. this.words[i] = carry;
  24732. this.length++;
  24733. }
  24734. return this;
  24735. };
  24736. BN.prototype.muln = function muln (num) {
  24737. return this.clone().imuln(num);
  24738. };
  24739. // `this` * `this`
  24740. BN.prototype.sqr = function sqr () {
  24741. return this.mul(this);
  24742. };
  24743. // `this` * `this` in-place
  24744. BN.prototype.isqr = function isqr () {
  24745. return this.imul(this.clone());
  24746. };
  24747. // Math.pow(`this`, `num`)
  24748. BN.prototype.pow = function pow (num) {
  24749. var w = toBitArray(num);
  24750. if (w.length === 0) return new BN(1);
  24751. // Skip leading zeroes
  24752. var res = this;
  24753. for (var i = 0; i < w.length; i++, res = res.sqr()) {
  24754. if (w[i] !== 0) break;
  24755. }
  24756. if (++i < w.length) {
  24757. for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
  24758. if (w[i] === 0) continue;
  24759. res = res.mul(q);
  24760. }
  24761. }
  24762. return res;
  24763. };
  24764. // Shift-left in-place
  24765. BN.prototype.iushln = function iushln (bits) {
  24766. assert(typeof bits === 'number' && bits >= 0);
  24767. var r = bits % 26;
  24768. var s = (bits - r) / 26;
  24769. var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
  24770. var i;
  24771. if (r !== 0) {
  24772. var carry = 0;
  24773. for (i = 0; i < this.length; i++) {
  24774. var newCarry = this.words[i] & carryMask;
  24775. var c = ((this.words[i] | 0) - newCarry) << r;
  24776. this.words[i] = c | carry;
  24777. carry = newCarry >>> (26 - r);
  24778. }
  24779. if (carry) {
  24780. this.words[i] = carry;
  24781. this.length++;
  24782. }
  24783. }
  24784. if (s !== 0) {
  24785. for (i = this.length - 1; i >= 0; i--) {
  24786. this.words[i + s] = this.words[i];
  24787. }
  24788. for (i = 0; i < s; i++) {
  24789. this.words[i] = 0;
  24790. }
  24791. this.length += s;
  24792. }
  24793. return this.strip();
  24794. };
  24795. BN.prototype.ishln = function ishln (bits) {
  24796. // TODO(indutny): implement me
  24797. assert(this.negative === 0);
  24798. return this.iushln(bits);
  24799. };
  24800. // Shift-right in-place
  24801. // NOTE: `hint` is a lowest bit before trailing zeroes
  24802. // NOTE: if `extended` is present - it will be filled with destroyed bits
  24803. BN.prototype.iushrn = function iushrn (bits, hint, extended) {
  24804. assert(typeof bits === 'number' && bits >= 0);
  24805. var h;
  24806. if (hint) {
  24807. h = (hint - (hint % 26)) / 26;
  24808. } else {
  24809. h = 0;
  24810. }
  24811. var r = bits % 26;
  24812. var s = Math.min((bits - r) / 26, this.length);
  24813. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  24814. var maskedWords = extended;
  24815. h -= s;
  24816. h = Math.max(0, h);
  24817. // Extended mode, copy masked part
  24818. if (maskedWords) {
  24819. for (var i = 0; i < s; i++) {
  24820. maskedWords.words[i] = this.words[i];
  24821. }
  24822. maskedWords.length = s;
  24823. }
  24824. if (s === 0) {
  24825. // No-op, we should not move anything at all
  24826. } else if (this.length > s) {
  24827. this.length -= s;
  24828. for (i = 0; i < this.length; i++) {
  24829. this.words[i] = this.words[i + s];
  24830. }
  24831. } else {
  24832. this.words[0] = 0;
  24833. this.length = 1;
  24834. }
  24835. var carry = 0;
  24836. for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
  24837. var word = this.words[i] | 0;
  24838. this.words[i] = (carry << (26 - r)) | (word >>> r);
  24839. carry = word & mask;
  24840. }
  24841. // Push carried bits as a mask
  24842. if (maskedWords && carry !== 0) {
  24843. maskedWords.words[maskedWords.length++] = carry;
  24844. }
  24845. if (this.length === 0) {
  24846. this.words[0] = 0;
  24847. this.length = 1;
  24848. }
  24849. return this.strip();
  24850. };
  24851. BN.prototype.ishrn = function ishrn (bits, hint, extended) {
  24852. // TODO(indutny): implement me
  24853. assert(this.negative === 0);
  24854. return this.iushrn(bits, hint, extended);
  24855. };
  24856. // Shift-left
  24857. BN.prototype.shln = function shln (bits) {
  24858. return this.clone().ishln(bits);
  24859. };
  24860. BN.prototype.ushln = function ushln (bits) {
  24861. return this.clone().iushln(bits);
  24862. };
  24863. // Shift-right
  24864. BN.prototype.shrn = function shrn (bits) {
  24865. return this.clone().ishrn(bits);
  24866. };
  24867. BN.prototype.ushrn = function ushrn (bits) {
  24868. return this.clone().iushrn(bits);
  24869. };
  24870. // Test if n bit is set
  24871. BN.prototype.testn = function testn (bit) {
  24872. assert(typeof bit === 'number' && bit >= 0);
  24873. var r = bit % 26;
  24874. var s = (bit - r) / 26;
  24875. var q = 1 << r;
  24876. // Fast case: bit is much higher than all existing words
  24877. if (this.length <= s) return false;
  24878. // Check bit and return
  24879. var w = this.words[s];
  24880. return !!(w & q);
  24881. };
  24882. // Return only lowers bits of number (in-place)
  24883. BN.prototype.imaskn = function imaskn (bits) {
  24884. assert(typeof bits === 'number' && bits >= 0);
  24885. var r = bits % 26;
  24886. var s = (bits - r) / 26;
  24887. assert(this.negative === 0, 'imaskn works only with positive numbers');
  24888. if (this.length <= s) {
  24889. return this;
  24890. }
  24891. if (r !== 0) {
  24892. s++;
  24893. }
  24894. this.length = Math.min(s, this.length);
  24895. if (r !== 0) {
  24896. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  24897. this.words[this.length - 1] &= mask;
  24898. }
  24899. return this.strip();
  24900. };
  24901. // Return only lowers bits of number
  24902. BN.prototype.maskn = function maskn (bits) {
  24903. return this.clone().imaskn(bits);
  24904. };
  24905. // Add plain number `num` to `this`
  24906. BN.prototype.iaddn = function iaddn (num) {
  24907. assert(typeof num === 'number');
  24908. assert(num < 0x4000000);
  24909. if (num < 0) return this.isubn(-num);
  24910. // Possible sign change
  24911. if (this.negative !== 0) {
  24912. if (this.length === 1 && (this.words[0] | 0) < num) {
  24913. this.words[0] = num - (this.words[0] | 0);
  24914. this.negative = 0;
  24915. return this;
  24916. }
  24917. this.negative = 0;
  24918. this.isubn(num);
  24919. this.negative = 1;
  24920. return this;
  24921. }
  24922. // Add without checks
  24923. return this._iaddn(num);
  24924. };
  24925. BN.prototype._iaddn = function _iaddn (num) {
  24926. this.words[0] += num;
  24927. // Carry
  24928. for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
  24929. this.words[i] -= 0x4000000;
  24930. if (i === this.length - 1) {
  24931. this.words[i + 1] = 1;
  24932. } else {
  24933. this.words[i + 1]++;
  24934. }
  24935. }
  24936. this.length = Math.max(this.length, i + 1);
  24937. return this;
  24938. };
  24939. // Subtract plain number `num` from `this`
  24940. BN.prototype.isubn = function isubn (num) {
  24941. assert(typeof num === 'number');
  24942. assert(num < 0x4000000);
  24943. if (num < 0) return this.iaddn(-num);
  24944. if (this.negative !== 0) {
  24945. this.negative = 0;
  24946. this.iaddn(num);
  24947. this.negative = 1;
  24948. return this;
  24949. }
  24950. this.words[0] -= num;
  24951. if (this.length === 1 && this.words[0] < 0) {
  24952. this.words[0] = -this.words[0];
  24953. this.negative = 1;
  24954. } else {
  24955. // Carry
  24956. for (var i = 0; i < this.length && this.words[i] < 0; i++) {
  24957. this.words[i] += 0x4000000;
  24958. this.words[i + 1] -= 1;
  24959. }
  24960. }
  24961. return this.strip();
  24962. };
  24963. BN.prototype.addn = function addn (num) {
  24964. return this.clone().iaddn(num);
  24965. };
  24966. BN.prototype.subn = function subn (num) {
  24967. return this.clone().isubn(num);
  24968. };
  24969. BN.prototype.iabs = function iabs () {
  24970. this.negative = 0;
  24971. return this;
  24972. };
  24973. BN.prototype.abs = function abs () {
  24974. return this.clone().iabs();
  24975. };
  24976. BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
  24977. var len = num.length + shift;
  24978. var i;
  24979. this._expand(len);
  24980. var w;
  24981. var carry = 0;
  24982. for (i = 0; i < num.length; i++) {
  24983. w = (this.words[i + shift] | 0) + carry;
  24984. var right = (num.words[i] | 0) * mul;
  24985. w -= right & 0x3ffffff;
  24986. carry = (w >> 26) - ((right / 0x4000000) | 0);
  24987. this.words[i + shift] = w & 0x3ffffff;
  24988. }
  24989. for (; i < this.length - shift; i++) {
  24990. w = (this.words[i + shift] | 0) + carry;
  24991. carry = w >> 26;
  24992. this.words[i + shift] = w & 0x3ffffff;
  24993. }
  24994. if (carry === 0) return this.strip();
  24995. // Subtraction overflow
  24996. assert(carry === -1);
  24997. carry = 0;
  24998. for (i = 0; i < this.length; i++) {
  24999. w = -(this.words[i] | 0) + carry;
  25000. carry = w >> 26;
  25001. this.words[i] = w & 0x3ffffff;
  25002. }
  25003. this.negative = 1;
  25004. return this.strip();
  25005. };
  25006. BN.prototype._wordDiv = function _wordDiv (num, mode) {
  25007. var shift = this.length - num.length;
  25008. var a = this.clone();
  25009. var b = num;
  25010. // Normalize
  25011. var bhi = b.words[b.length - 1] | 0;
  25012. var bhiBits = this._countBits(bhi);
  25013. shift = 26 - bhiBits;
  25014. if (shift !== 0) {
  25015. b = b.ushln(shift);
  25016. a.iushln(shift);
  25017. bhi = b.words[b.length - 1] | 0;
  25018. }
  25019. // Initialize quotient
  25020. var m = a.length - b.length;
  25021. var q;
  25022. if (mode !== 'mod') {
  25023. q = new BN(null);
  25024. q.length = m + 1;
  25025. q.words = new Array(q.length);
  25026. for (var i = 0; i < q.length; i++) {
  25027. q.words[i] = 0;
  25028. }
  25029. }
  25030. var diff = a.clone()._ishlnsubmul(b, 1, m);
  25031. if (diff.negative === 0) {
  25032. a = diff;
  25033. if (q) {
  25034. q.words[m] = 1;
  25035. }
  25036. }
  25037. for (var j = m - 1; j >= 0; j--) {
  25038. var qj = (a.words[b.length + j] | 0) * 0x4000000 +
  25039. (a.words[b.length + j - 1] | 0);
  25040. // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
  25041. // (0x7ffffff)
  25042. qj = Math.min((qj / bhi) | 0, 0x3ffffff);
  25043. a._ishlnsubmul(b, qj, j);
  25044. while (a.negative !== 0) {
  25045. qj--;
  25046. a.negative = 0;
  25047. a._ishlnsubmul(b, 1, j);
  25048. if (!a.isZero()) {
  25049. a.negative ^= 1;
  25050. }
  25051. }
  25052. if (q) {
  25053. q.words[j] = qj;
  25054. }
  25055. }
  25056. if (q) {
  25057. q.strip();
  25058. }
  25059. a.strip();
  25060. // Denormalize
  25061. if (mode !== 'div' && shift !== 0) {
  25062. a.iushrn(shift);
  25063. }
  25064. return {
  25065. div: q || null,
  25066. mod: a
  25067. };
  25068. };
  25069. // NOTE: 1) `mode` can be set to `mod` to request mod only,
  25070. // to `div` to request div only, or be absent to
  25071. // request both div & mod
  25072. // 2) `positive` is true if unsigned mod is requested
  25073. BN.prototype.divmod = function divmod (num, mode, positive) {
  25074. assert(!num.isZero());
  25075. if (this.isZero()) {
  25076. return {
  25077. div: new BN(0),
  25078. mod: new BN(0)
  25079. };
  25080. }
  25081. var div, mod, res;
  25082. if (this.negative !== 0 && num.negative === 0) {
  25083. res = this.neg().divmod(num, mode);
  25084. if (mode !== 'mod') {
  25085. div = res.div.neg();
  25086. }
  25087. if (mode !== 'div') {
  25088. mod = res.mod.neg();
  25089. if (positive && mod.negative !== 0) {
  25090. mod.iadd(num);
  25091. }
  25092. }
  25093. return {
  25094. div: div,
  25095. mod: mod
  25096. };
  25097. }
  25098. if (this.negative === 0 && num.negative !== 0) {
  25099. res = this.divmod(num.neg(), mode);
  25100. if (mode !== 'mod') {
  25101. div = res.div.neg();
  25102. }
  25103. return {
  25104. div: div,
  25105. mod: res.mod
  25106. };
  25107. }
  25108. if ((this.negative & num.negative) !== 0) {
  25109. res = this.neg().divmod(num.neg(), mode);
  25110. if (mode !== 'div') {
  25111. mod = res.mod.neg();
  25112. if (positive && mod.negative !== 0) {
  25113. mod.isub(num);
  25114. }
  25115. }
  25116. return {
  25117. div: res.div,
  25118. mod: mod
  25119. };
  25120. }
  25121. // Both numbers are positive at this point
  25122. // Strip both numbers to approximate shift value
  25123. if (num.length > this.length || this.cmp(num) < 0) {
  25124. return {
  25125. div: new BN(0),
  25126. mod: this
  25127. };
  25128. }
  25129. // Very short reduction
  25130. if (num.length === 1) {
  25131. if (mode === 'div') {
  25132. return {
  25133. div: this.divn(num.words[0]),
  25134. mod: null
  25135. };
  25136. }
  25137. if (mode === 'mod') {
  25138. return {
  25139. div: null,
  25140. mod: new BN(this.modn(num.words[0]))
  25141. };
  25142. }
  25143. return {
  25144. div: this.divn(num.words[0]),
  25145. mod: new BN(this.modn(num.words[0]))
  25146. };
  25147. }
  25148. return this._wordDiv(num, mode);
  25149. };
  25150. // Find `this` / `num`
  25151. BN.prototype.div = function div (num) {
  25152. return this.divmod(num, 'div', false).div;
  25153. };
  25154. // Find `this` % `num`
  25155. BN.prototype.mod = function mod (num) {
  25156. return this.divmod(num, 'mod', false).mod;
  25157. };
  25158. BN.prototype.umod = function umod (num) {
  25159. return this.divmod(num, 'mod', true).mod;
  25160. };
  25161. // Find Round(`this` / `num`)
  25162. BN.prototype.divRound = function divRound (num) {
  25163. var dm = this.divmod(num);
  25164. // Fast case - exact division
  25165. if (dm.mod.isZero()) return dm.div;
  25166. var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
  25167. var half = num.ushrn(1);
  25168. var r2 = num.andln(1);
  25169. var cmp = mod.cmp(half);
  25170. // Round down
  25171. if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
  25172. // Round up
  25173. return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
  25174. };
  25175. BN.prototype.modn = function modn (num) {
  25176. assert(num <= 0x3ffffff);
  25177. var p = (1 << 26) % num;
  25178. var acc = 0;
  25179. for (var i = this.length - 1; i >= 0; i--) {
  25180. acc = (p * acc + (this.words[i] | 0)) % num;
  25181. }
  25182. return acc;
  25183. };
  25184. // In-place division by number
  25185. BN.prototype.idivn = function idivn (num) {
  25186. assert(num <= 0x3ffffff);
  25187. var carry = 0;
  25188. for (var i = this.length - 1; i >= 0; i--) {
  25189. var w = (this.words[i] | 0) + carry * 0x4000000;
  25190. this.words[i] = (w / num) | 0;
  25191. carry = w % num;
  25192. }
  25193. return this.strip();
  25194. };
  25195. BN.prototype.divn = function divn (num) {
  25196. return this.clone().idivn(num);
  25197. };
  25198. BN.prototype.egcd = function egcd (p) {
  25199. assert(p.negative === 0);
  25200. assert(!p.isZero());
  25201. var x = this;
  25202. var y = p.clone();
  25203. if (x.negative !== 0) {
  25204. x = x.umod(p);
  25205. } else {
  25206. x = x.clone();
  25207. }
  25208. // A * x + B * y = x
  25209. var A = new BN(1);
  25210. var B = new BN(0);
  25211. // C * x + D * y = y
  25212. var C = new BN(0);
  25213. var D = new BN(1);
  25214. var g = 0;
  25215. while (x.isEven() && y.isEven()) {
  25216. x.iushrn(1);
  25217. y.iushrn(1);
  25218. ++g;
  25219. }
  25220. var yp = y.clone();
  25221. var xp = x.clone();
  25222. while (!x.isZero()) {
  25223. for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  25224. if (i > 0) {
  25225. x.iushrn(i);
  25226. while (i-- > 0) {
  25227. if (A.isOdd() || B.isOdd()) {
  25228. A.iadd(yp);
  25229. B.isub(xp);
  25230. }
  25231. A.iushrn(1);
  25232. B.iushrn(1);
  25233. }
  25234. }
  25235. for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  25236. if (j > 0) {
  25237. y.iushrn(j);
  25238. while (j-- > 0) {
  25239. if (C.isOdd() || D.isOdd()) {
  25240. C.iadd(yp);
  25241. D.isub(xp);
  25242. }
  25243. C.iushrn(1);
  25244. D.iushrn(1);
  25245. }
  25246. }
  25247. if (x.cmp(y) >= 0) {
  25248. x.isub(y);
  25249. A.isub(C);
  25250. B.isub(D);
  25251. } else {
  25252. y.isub(x);
  25253. C.isub(A);
  25254. D.isub(B);
  25255. }
  25256. }
  25257. return {
  25258. a: C,
  25259. b: D,
  25260. gcd: y.iushln(g)
  25261. };
  25262. };
  25263. // This is reduced incarnation of the binary EEA
  25264. // above, designated to invert members of the
  25265. // _prime_ fields F(p) at a maximal speed
  25266. BN.prototype._invmp = function _invmp (p) {
  25267. assert(p.negative === 0);
  25268. assert(!p.isZero());
  25269. var a = this;
  25270. var b = p.clone();
  25271. if (a.negative !== 0) {
  25272. a = a.umod(p);
  25273. } else {
  25274. a = a.clone();
  25275. }
  25276. var x1 = new BN(1);
  25277. var x2 = new BN(0);
  25278. var delta = b.clone();
  25279. while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
  25280. for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  25281. if (i > 0) {
  25282. a.iushrn(i);
  25283. while (i-- > 0) {
  25284. if (x1.isOdd()) {
  25285. x1.iadd(delta);
  25286. }
  25287. x1.iushrn(1);
  25288. }
  25289. }
  25290. for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  25291. if (j > 0) {
  25292. b.iushrn(j);
  25293. while (j-- > 0) {
  25294. if (x2.isOdd()) {
  25295. x2.iadd(delta);
  25296. }
  25297. x2.iushrn(1);
  25298. }
  25299. }
  25300. if (a.cmp(b) >= 0) {
  25301. a.isub(b);
  25302. x1.isub(x2);
  25303. } else {
  25304. b.isub(a);
  25305. x2.isub(x1);
  25306. }
  25307. }
  25308. var res;
  25309. if (a.cmpn(1) === 0) {
  25310. res = x1;
  25311. } else {
  25312. res = x2;
  25313. }
  25314. if (res.cmpn(0) < 0) {
  25315. res.iadd(p);
  25316. }
  25317. return res;
  25318. };
  25319. BN.prototype.gcd = function gcd (num) {
  25320. if (this.isZero()) return num.abs();
  25321. if (num.isZero()) return this.abs();
  25322. var a = this.clone();
  25323. var b = num.clone();
  25324. a.negative = 0;
  25325. b.negative = 0;
  25326. // Remove common factor of two
  25327. for (var shift = 0; a.isEven() && b.isEven(); shift++) {
  25328. a.iushrn(1);
  25329. b.iushrn(1);
  25330. }
  25331. do {
  25332. while (a.isEven()) {
  25333. a.iushrn(1);
  25334. }
  25335. while (b.isEven()) {
  25336. b.iushrn(1);
  25337. }
  25338. var r = a.cmp(b);
  25339. if (r < 0) {
  25340. // Swap `a` and `b` to make `a` always bigger than `b`
  25341. var t = a;
  25342. a = b;
  25343. b = t;
  25344. } else if (r === 0 || b.cmpn(1) === 0) {
  25345. break;
  25346. }
  25347. a.isub(b);
  25348. } while (true);
  25349. return b.iushln(shift);
  25350. };
  25351. // Invert number in the field F(num)
  25352. BN.prototype.invm = function invm (num) {
  25353. return this.egcd(num).a.umod(num);
  25354. };
  25355. BN.prototype.isEven = function isEven () {
  25356. return (this.words[0] & 1) === 0;
  25357. };
  25358. BN.prototype.isOdd = function isOdd () {
  25359. return (this.words[0] & 1) === 1;
  25360. };
  25361. // And first word and num
  25362. BN.prototype.andln = function andln (num) {
  25363. return this.words[0] & num;
  25364. };
  25365. // Increment at the bit position in-line
  25366. BN.prototype.bincn = function bincn (bit) {
  25367. assert(typeof bit === 'number');
  25368. var r = bit % 26;
  25369. var s = (bit - r) / 26;
  25370. var q = 1 << r;
  25371. // Fast case: bit is much higher than all existing words
  25372. if (this.length <= s) {
  25373. this._expand(s + 1);
  25374. this.words[s] |= q;
  25375. return this;
  25376. }
  25377. // Add bit and propagate, if needed
  25378. var carry = q;
  25379. for (var i = s; carry !== 0 && i < this.length; i++) {
  25380. var w = this.words[i] | 0;
  25381. w += carry;
  25382. carry = w >>> 26;
  25383. w &= 0x3ffffff;
  25384. this.words[i] = w;
  25385. }
  25386. if (carry !== 0) {
  25387. this.words[i] = carry;
  25388. this.length++;
  25389. }
  25390. return this;
  25391. };
  25392. BN.prototype.isZero = function isZero () {
  25393. return this.length === 1 && this.words[0] === 0;
  25394. };
  25395. BN.prototype.cmpn = function cmpn (num) {
  25396. var negative = num < 0;
  25397. if (this.negative !== 0 && !negative) return -1;
  25398. if (this.negative === 0 && negative) return 1;
  25399. this.strip();
  25400. var res;
  25401. if (this.length > 1) {
  25402. res = 1;
  25403. } else {
  25404. if (negative) {
  25405. num = -num;
  25406. }
  25407. assert(num <= 0x3ffffff, 'Number is too big');
  25408. var w = this.words[0] | 0;
  25409. res = w === num ? 0 : w < num ? -1 : 1;
  25410. }
  25411. if (this.negative !== 0) return -res | 0;
  25412. return res;
  25413. };
  25414. // Compare two numbers and return:
  25415. // 1 - if `this` > `num`
  25416. // 0 - if `this` == `num`
  25417. // -1 - if `this` < `num`
  25418. BN.prototype.cmp = function cmp (num) {
  25419. if (this.negative !== 0 && num.negative === 0) return -1;
  25420. if (this.negative === 0 && num.negative !== 0) return 1;
  25421. var res = this.ucmp(num);
  25422. if (this.negative !== 0) return -res | 0;
  25423. return res;
  25424. };
  25425. // Unsigned comparison
  25426. BN.prototype.ucmp = function ucmp (num) {
  25427. // At this point both numbers have the same sign
  25428. if (this.length > num.length) return 1;
  25429. if (this.length < num.length) return -1;
  25430. var res = 0;
  25431. for (var i = this.length - 1; i >= 0; i--) {
  25432. var a = this.words[i] | 0;
  25433. var b = num.words[i] | 0;
  25434. if (a === b) continue;
  25435. if (a < b) {
  25436. res = -1;
  25437. } else if (a > b) {
  25438. res = 1;
  25439. }
  25440. break;
  25441. }
  25442. return res;
  25443. };
  25444. BN.prototype.gtn = function gtn (num) {
  25445. return this.cmpn(num) === 1;
  25446. };
  25447. BN.prototype.gt = function gt (num) {
  25448. return this.cmp(num) === 1;
  25449. };
  25450. BN.prototype.gten = function gten (num) {
  25451. return this.cmpn(num) >= 0;
  25452. };
  25453. BN.prototype.gte = function gte (num) {
  25454. return this.cmp(num) >= 0;
  25455. };
  25456. BN.prototype.ltn = function ltn (num) {
  25457. return this.cmpn(num) === -1;
  25458. };
  25459. BN.prototype.lt = function lt (num) {
  25460. return this.cmp(num) === -1;
  25461. };
  25462. BN.prototype.lten = function lten (num) {
  25463. return this.cmpn(num) <= 0;
  25464. };
  25465. BN.prototype.lte = function lte (num) {
  25466. return this.cmp(num) <= 0;
  25467. };
  25468. BN.prototype.eqn = function eqn (num) {
  25469. return this.cmpn(num) === 0;
  25470. };
  25471. BN.prototype.eq = function eq (num) {
  25472. return this.cmp(num) === 0;
  25473. };
  25474. //
  25475. // A reduce context, could be using montgomery or something better, depending
  25476. // on the `m` itself.
  25477. //
  25478. BN.red = function red (num) {
  25479. return new Red(num);
  25480. };
  25481. BN.prototype.toRed = function toRed (ctx) {
  25482. assert(!this.red, 'Already a number in reduction context');
  25483. assert(this.negative === 0, 'red works only with positives');
  25484. return ctx.convertTo(this)._forceRed(ctx);
  25485. };
  25486. BN.prototype.fromRed = function fromRed () {
  25487. assert(this.red, 'fromRed works only with numbers in reduction context');
  25488. return this.red.convertFrom(this);
  25489. };
  25490. BN.prototype._forceRed = function _forceRed (ctx) {
  25491. this.red = ctx;
  25492. return this;
  25493. };
  25494. BN.prototype.forceRed = function forceRed (ctx) {
  25495. assert(!this.red, 'Already a number in reduction context');
  25496. return this._forceRed(ctx);
  25497. };
  25498. BN.prototype.redAdd = function redAdd (num) {
  25499. assert(this.red, 'redAdd works only with red numbers');
  25500. return this.red.add(this, num);
  25501. };
  25502. BN.prototype.redIAdd = function redIAdd (num) {
  25503. assert(this.red, 'redIAdd works only with red numbers');
  25504. return this.red.iadd(this, num);
  25505. };
  25506. BN.prototype.redSub = function redSub (num) {
  25507. assert(this.red, 'redSub works only with red numbers');
  25508. return this.red.sub(this, num);
  25509. };
  25510. BN.prototype.redISub = function redISub (num) {
  25511. assert(this.red, 'redISub works only with red numbers');
  25512. return this.red.isub(this, num);
  25513. };
  25514. BN.prototype.redShl = function redShl (num) {
  25515. assert(this.red, 'redShl works only with red numbers');
  25516. return this.red.shl(this, num);
  25517. };
  25518. BN.prototype.redMul = function redMul (num) {
  25519. assert(this.red, 'redMul works only with red numbers');
  25520. this.red._verify2(this, num);
  25521. return this.red.mul(this, num);
  25522. };
  25523. BN.prototype.redIMul = function redIMul (num) {
  25524. assert(this.red, 'redMul works only with red numbers');
  25525. this.red._verify2(this, num);
  25526. return this.red.imul(this, num);
  25527. };
  25528. BN.prototype.redSqr = function redSqr () {
  25529. assert(this.red, 'redSqr works only with red numbers');
  25530. this.red._verify1(this);
  25531. return this.red.sqr(this);
  25532. };
  25533. BN.prototype.redISqr = function redISqr () {
  25534. assert(this.red, 'redISqr works only with red numbers');
  25535. this.red._verify1(this);
  25536. return this.red.isqr(this);
  25537. };
  25538. // Square root over p
  25539. BN.prototype.redSqrt = function redSqrt () {
  25540. assert(this.red, 'redSqrt works only with red numbers');
  25541. this.red._verify1(this);
  25542. return this.red.sqrt(this);
  25543. };
  25544. BN.prototype.redInvm = function redInvm () {
  25545. assert(this.red, 'redInvm works only with red numbers');
  25546. this.red._verify1(this);
  25547. return this.red.invm(this);
  25548. };
  25549. // Return negative clone of `this` % `red modulo`
  25550. BN.prototype.redNeg = function redNeg () {
  25551. assert(this.red, 'redNeg works only with red numbers');
  25552. this.red._verify1(this);
  25553. return this.red.neg(this);
  25554. };
  25555. BN.prototype.redPow = function redPow (num) {
  25556. assert(this.red && !num.red, 'redPow(normalNum)');
  25557. this.red._verify1(this);
  25558. return this.red.pow(this, num);
  25559. };
  25560. // Prime numbers with efficient reduction
  25561. var primes = {
  25562. k256: null,
  25563. p224: null,
  25564. p192: null,
  25565. p25519: null
  25566. };
  25567. // Pseudo-Mersenne prime
  25568. function MPrime (name, p) {
  25569. // P = 2 ^ N - K
  25570. this.name = name;
  25571. this.p = new BN(p, 16);
  25572. this.n = this.p.bitLength();
  25573. this.k = new BN(1).iushln(this.n).isub(this.p);
  25574. this.tmp = this._tmp();
  25575. }
  25576. MPrime.prototype._tmp = function _tmp () {
  25577. var tmp = new BN(null);
  25578. tmp.words = new Array(Math.ceil(this.n / 13));
  25579. return tmp;
  25580. };
  25581. MPrime.prototype.ireduce = function ireduce (num) {
  25582. // Assumes that `num` is less than `P^2`
  25583. // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
  25584. var r = num;
  25585. var rlen;
  25586. do {
  25587. this.split(r, this.tmp);
  25588. r = this.imulK(r);
  25589. r = r.iadd(this.tmp);
  25590. rlen = r.bitLength();
  25591. } while (rlen > this.n);
  25592. var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
  25593. if (cmp === 0) {
  25594. r.words[0] = 0;
  25595. r.length = 1;
  25596. } else if (cmp > 0) {
  25597. r.isub(this.p);
  25598. } else {
  25599. if (r.strip !== undefined) {
  25600. // r is BN v4 instance
  25601. r.strip();
  25602. } else {
  25603. // r is BN v5 instance
  25604. r._strip();
  25605. }
  25606. }
  25607. return r;
  25608. };
  25609. MPrime.prototype.split = function split (input, out) {
  25610. input.iushrn(this.n, 0, out);
  25611. };
  25612. MPrime.prototype.imulK = function imulK (num) {
  25613. return num.imul(this.k);
  25614. };
  25615. function K256 () {
  25616. MPrime.call(
  25617. this,
  25618. 'k256',
  25619. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
  25620. }
  25621. inherits(K256, MPrime);
  25622. K256.prototype.split = function split (input, output) {
  25623. // 256 = 9 * 26 + 22
  25624. var mask = 0x3fffff;
  25625. var outLen = Math.min(input.length, 9);
  25626. for (var i = 0; i < outLen; i++) {
  25627. output.words[i] = input.words[i];
  25628. }
  25629. output.length = outLen;
  25630. if (input.length <= 9) {
  25631. input.words[0] = 0;
  25632. input.length = 1;
  25633. return;
  25634. }
  25635. // Shift by 9 limbs
  25636. var prev = input.words[9];
  25637. output.words[output.length++] = prev & mask;
  25638. for (i = 10; i < input.length; i++) {
  25639. var next = input.words[i] | 0;
  25640. input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
  25641. prev = next;
  25642. }
  25643. prev >>>= 22;
  25644. input.words[i - 10] = prev;
  25645. if (prev === 0 && input.length > 10) {
  25646. input.length -= 10;
  25647. } else {
  25648. input.length -= 9;
  25649. }
  25650. };
  25651. K256.prototype.imulK = function imulK (num) {
  25652. // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
  25653. num.words[num.length] = 0;
  25654. num.words[num.length + 1] = 0;
  25655. num.length += 2;
  25656. // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
  25657. var lo = 0;
  25658. for (var i = 0; i < num.length; i++) {
  25659. var w = num.words[i] | 0;
  25660. lo += w * 0x3d1;
  25661. num.words[i] = lo & 0x3ffffff;
  25662. lo = w * 0x40 + ((lo / 0x4000000) | 0);
  25663. }
  25664. // Fast length reduction
  25665. if (num.words[num.length - 1] === 0) {
  25666. num.length--;
  25667. if (num.words[num.length - 1] === 0) {
  25668. num.length--;
  25669. }
  25670. }
  25671. return num;
  25672. };
  25673. function P224 () {
  25674. MPrime.call(
  25675. this,
  25676. 'p224',
  25677. 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
  25678. }
  25679. inherits(P224, MPrime);
  25680. function P192 () {
  25681. MPrime.call(
  25682. this,
  25683. 'p192',
  25684. 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
  25685. }
  25686. inherits(P192, MPrime);
  25687. function P25519 () {
  25688. // 2 ^ 255 - 19
  25689. MPrime.call(
  25690. this,
  25691. '25519',
  25692. '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
  25693. }
  25694. inherits(P25519, MPrime);
  25695. P25519.prototype.imulK = function imulK (num) {
  25696. // K = 0x13
  25697. var carry = 0;
  25698. for (var i = 0; i < num.length; i++) {
  25699. var hi = (num.words[i] | 0) * 0x13 + carry;
  25700. var lo = hi & 0x3ffffff;
  25701. hi >>>= 26;
  25702. num.words[i] = lo;
  25703. carry = hi;
  25704. }
  25705. if (carry !== 0) {
  25706. num.words[num.length++] = carry;
  25707. }
  25708. return num;
  25709. };
  25710. // Exported mostly for testing purposes, use plain name instead
  25711. BN._prime = function prime (name) {
  25712. // Cached version of prime
  25713. if (primes[name]) return primes[name];
  25714. var prime;
  25715. if (name === 'k256') {
  25716. prime = new K256();
  25717. } else if (name === 'p224') {
  25718. prime = new P224();
  25719. } else if (name === 'p192') {
  25720. prime = new P192();
  25721. } else if (name === 'p25519') {
  25722. prime = new P25519();
  25723. } else {
  25724. throw new Error('Unknown prime ' + name);
  25725. }
  25726. primes[name] = prime;
  25727. return prime;
  25728. };
  25729. //
  25730. // Base reduction engine
  25731. //
  25732. function Red (m) {
  25733. if (typeof m === 'string') {
  25734. var prime = BN._prime(m);
  25735. this.m = prime.p;
  25736. this.prime = prime;
  25737. } else {
  25738. assert(m.gtn(1), 'modulus must be greater than 1');
  25739. this.m = m;
  25740. this.prime = null;
  25741. }
  25742. }
  25743. Red.prototype._verify1 = function _verify1 (a) {
  25744. assert(a.negative === 0, 'red works only with positives');
  25745. assert(a.red, 'red works only with red numbers');
  25746. };
  25747. Red.prototype._verify2 = function _verify2 (a, b) {
  25748. assert((a.negative | b.negative) === 0, 'red works only with positives');
  25749. assert(a.red && a.red === b.red,
  25750. 'red works only with red numbers');
  25751. };
  25752. Red.prototype.imod = function imod (a) {
  25753. if (this.prime) return this.prime.ireduce(a)._forceRed(this);
  25754. return a.umod(this.m)._forceRed(this);
  25755. };
  25756. Red.prototype.neg = function neg (a) {
  25757. if (a.isZero()) {
  25758. return a.clone();
  25759. }
  25760. return this.m.sub(a)._forceRed(this);
  25761. };
  25762. Red.prototype.add = function add (a, b) {
  25763. this._verify2(a, b);
  25764. var res = a.add(b);
  25765. if (res.cmp(this.m) >= 0) {
  25766. res.isub(this.m);
  25767. }
  25768. return res._forceRed(this);
  25769. };
  25770. Red.prototype.iadd = function iadd (a, b) {
  25771. this._verify2(a, b);
  25772. var res = a.iadd(b);
  25773. if (res.cmp(this.m) >= 0) {
  25774. res.isub(this.m);
  25775. }
  25776. return res;
  25777. };
  25778. Red.prototype.sub = function sub (a, b) {
  25779. this._verify2(a, b);
  25780. var res = a.sub(b);
  25781. if (res.cmpn(0) < 0) {
  25782. res.iadd(this.m);
  25783. }
  25784. return res._forceRed(this);
  25785. };
  25786. Red.prototype.isub = function isub (a, b) {
  25787. this._verify2(a, b);
  25788. var res = a.isub(b);
  25789. if (res.cmpn(0) < 0) {
  25790. res.iadd(this.m);
  25791. }
  25792. return res;
  25793. };
  25794. Red.prototype.shl = function shl (a, num) {
  25795. this._verify1(a);
  25796. return this.imod(a.ushln(num));
  25797. };
  25798. Red.prototype.imul = function imul (a, b) {
  25799. this._verify2(a, b);
  25800. return this.imod(a.imul(b));
  25801. };
  25802. Red.prototype.mul = function mul (a, b) {
  25803. this._verify2(a, b);
  25804. return this.imod(a.mul(b));
  25805. };
  25806. Red.prototype.isqr = function isqr (a) {
  25807. return this.imul(a, a.clone());
  25808. };
  25809. Red.prototype.sqr = function sqr (a) {
  25810. return this.mul(a, a);
  25811. };
  25812. Red.prototype.sqrt = function sqrt (a) {
  25813. if (a.isZero()) return a.clone();
  25814. var mod3 = this.m.andln(3);
  25815. assert(mod3 % 2 === 1);
  25816. // Fast case
  25817. if (mod3 === 3) {
  25818. var pow = this.m.add(new BN(1)).iushrn(2);
  25819. return this.pow(a, pow);
  25820. }
  25821. // Tonelli-Shanks algorithm (Totally unoptimized and slow)
  25822. //
  25823. // Find Q and S, that Q * 2 ^ S = (P - 1)
  25824. var q = this.m.subn(1);
  25825. var s = 0;
  25826. while (!q.isZero() && q.andln(1) === 0) {
  25827. s++;
  25828. q.iushrn(1);
  25829. }
  25830. assert(!q.isZero());
  25831. var one = new BN(1).toRed(this);
  25832. var nOne = one.redNeg();
  25833. // Find quadratic non-residue
  25834. // NOTE: Max is such because of generalized Riemann hypothesis.
  25835. var lpow = this.m.subn(1).iushrn(1);
  25836. var z = this.m.bitLength();
  25837. z = new BN(2 * z * z).toRed(this);
  25838. while (this.pow(z, lpow).cmp(nOne) !== 0) {
  25839. z.redIAdd(nOne);
  25840. }
  25841. var c = this.pow(z, q);
  25842. var r = this.pow(a, q.addn(1).iushrn(1));
  25843. var t = this.pow(a, q);
  25844. var m = s;
  25845. while (t.cmp(one) !== 0) {
  25846. var tmp = t;
  25847. for (var i = 0; tmp.cmp(one) !== 0; i++) {
  25848. tmp = tmp.redSqr();
  25849. }
  25850. assert(i < m);
  25851. var b = this.pow(c, new BN(1).iushln(m - i - 1));
  25852. r = r.redMul(b);
  25853. c = b.redSqr();
  25854. t = t.redMul(c);
  25855. m = i;
  25856. }
  25857. return r;
  25858. };
  25859. Red.prototype.invm = function invm (a) {
  25860. var inv = a._invmp(this.m);
  25861. if (inv.negative !== 0) {
  25862. inv.negative = 0;
  25863. return this.imod(inv).redNeg();
  25864. } else {
  25865. return this.imod(inv);
  25866. }
  25867. };
  25868. Red.prototype.pow = function pow (a, num) {
  25869. if (num.isZero()) return new BN(1).toRed(this);
  25870. if (num.cmpn(1) === 0) return a.clone();
  25871. var windowSize = 4;
  25872. var wnd = new Array(1 << windowSize);
  25873. wnd[0] = new BN(1).toRed(this);
  25874. wnd[1] = a;
  25875. for (var i = 2; i < wnd.length; i++) {
  25876. wnd[i] = this.mul(wnd[i - 1], a);
  25877. }
  25878. var res = wnd[0];
  25879. var current = 0;
  25880. var currentLen = 0;
  25881. var start = num.bitLength() % 26;
  25882. if (start === 0) {
  25883. start = 26;
  25884. }
  25885. for (i = num.length - 1; i >= 0; i--) {
  25886. var word = num.words[i];
  25887. for (var j = start - 1; j >= 0; j--) {
  25888. var bit = (word >> j) & 1;
  25889. if (res !== wnd[0]) {
  25890. res = this.sqr(res);
  25891. }
  25892. if (bit === 0 && current === 0) {
  25893. currentLen = 0;
  25894. continue;
  25895. }
  25896. current <<= 1;
  25897. current |= bit;
  25898. currentLen++;
  25899. if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
  25900. res = this.mul(res, wnd[current]);
  25901. currentLen = 0;
  25902. current = 0;
  25903. }
  25904. start = 26;
  25905. }
  25906. return res;
  25907. };
  25908. Red.prototype.convertTo = function convertTo (num) {
  25909. var r = num.umod(this.m);
  25910. return r === num ? r.clone() : r;
  25911. };
  25912. Red.prototype.convertFrom = function convertFrom (num) {
  25913. var res = num.clone();
  25914. res.red = null;
  25915. return res;
  25916. };
  25917. //
  25918. // Montgomery method engine
  25919. //
  25920. BN.mont = function mont (num) {
  25921. return new Mont(num);
  25922. };
  25923. function Mont (m) {
  25924. Red.call(this, m);
  25925. this.shift = this.m.bitLength();
  25926. if (this.shift % 26 !== 0) {
  25927. this.shift += 26 - (this.shift % 26);
  25928. }
  25929. this.r = new BN(1).iushln(this.shift);
  25930. this.r2 = this.imod(this.r.sqr());
  25931. this.rinv = this.r._invmp(this.m);
  25932. this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
  25933. this.minv = this.minv.umod(this.r);
  25934. this.minv = this.r.sub(this.minv);
  25935. }
  25936. inherits(Mont, Red);
  25937. Mont.prototype.convertTo = function convertTo (num) {
  25938. return this.imod(num.ushln(this.shift));
  25939. };
  25940. Mont.prototype.convertFrom = function convertFrom (num) {
  25941. var r = this.imod(num.mul(this.rinv));
  25942. r.red = null;
  25943. return r;
  25944. };
  25945. Mont.prototype.imul = function imul (a, b) {
  25946. if (a.isZero() || b.isZero()) {
  25947. a.words[0] = 0;
  25948. a.length = 1;
  25949. return a;
  25950. }
  25951. var t = a.imul(b);
  25952. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  25953. var u = t.isub(c).iushrn(this.shift);
  25954. var res = u;
  25955. if (u.cmp(this.m) >= 0) {
  25956. res = u.isub(this.m);
  25957. } else if (u.cmpn(0) < 0) {
  25958. res = u.iadd(this.m);
  25959. }
  25960. return res._forceRed(this);
  25961. };
  25962. Mont.prototype.mul = function mul (a, b) {
  25963. if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
  25964. var t = a.mul(b);
  25965. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  25966. var u = t.isub(c).iushrn(this.shift);
  25967. var res = u;
  25968. if (u.cmp(this.m) >= 0) {
  25969. res = u.isub(this.m);
  25970. } else if (u.cmpn(0) < 0) {
  25971. res = u.iadd(this.m);
  25972. }
  25973. return res._forceRed(this);
  25974. };
  25975. Mont.prototype.invm = function invm (a) {
  25976. // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
  25977. var res = this.imod(a._invmp(this.m).mul(this.r2));
  25978. return res._forceRed(this);
  25979. };
  25980. })( false || module, this);
  25981. /***/ }),
  25982. /***/ 23482:
  25983. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  25984. "use strict";
  25985. var inherits = __webpack_require__(35717)
  25986. var MD5 = __webpack_require__(62318)
  25987. var RIPEMD160 = __webpack_require__(79785)
  25988. var sha = __webpack_require__(89072)
  25989. var Base = __webpack_require__(71027)
  25990. function Hash (hash) {
  25991. Base.call(this, 'digest')
  25992. this._hash = hash
  25993. }
  25994. inherits(Hash, Base)
  25995. Hash.prototype._update = function (data) {
  25996. this._hash.update(data)
  25997. }
  25998. Hash.prototype._final = function () {
  25999. return this._hash.digest()
  26000. }
  26001. module.exports = function createHash (alg) {
  26002. alg = alg.toLowerCase()
  26003. if (alg === 'md5') return new MD5()
  26004. if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()
  26005. return new Hash(sha(alg))
  26006. }
  26007. /***/ }),
  26008. /***/ 78028:
  26009. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  26010. var MD5 = __webpack_require__(62318)
  26011. module.exports = function (buffer) {
  26012. return new MD5().update(buffer).digest()
  26013. }
  26014. /***/ }),
  26015. /***/ 58355:
  26016. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  26017. "use strict";
  26018. var inherits = __webpack_require__(35717)
  26019. var Legacy = __webpack_require__(51031)
  26020. var Base = __webpack_require__(71027)
  26021. var Buffer = (__webpack_require__(89509).Buffer)
  26022. var md5 = __webpack_require__(78028)
  26023. var RIPEMD160 = __webpack_require__(79785)
  26024. var sha = __webpack_require__(89072)
  26025. var ZEROS = Buffer.alloc(128)
  26026. function Hmac (alg, key) {
  26027. Base.call(this, 'digest')
  26028. if (typeof key === 'string') {
  26029. key = Buffer.from(key)
  26030. }
  26031. var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
  26032. this._alg = alg
  26033. this._key = key
  26034. if (key.length > blocksize) {
  26035. var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
  26036. key = hash.update(key).digest()
  26037. } else if (key.length < blocksize) {
  26038. key = Buffer.concat([key, ZEROS], blocksize)
  26039. }
  26040. var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
  26041. var opad = this._opad = Buffer.allocUnsafe(blocksize)
  26042. for (var i = 0; i < blocksize; i++) {
  26043. ipad[i] = key[i] ^ 0x36
  26044. opad[i] = key[i] ^ 0x5C
  26045. }
  26046. this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
  26047. this._hash.update(ipad)
  26048. }
  26049. inherits(Hmac, Base)
  26050. Hmac.prototype._update = function (data) {
  26051. this._hash.update(data)
  26052. }
  26053. Hmac.prototype._final = function () {
  26054. var h = this._hash.digest()
  26055. var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
  26056. return hash.update(this._opad).update(h).digest()
  26057. }
  26058. module.exports = function createHmac (alg, key) {
  26059. alg = alg.toLowerCase()
  26060. if (alg === 'rmd160' || alg === 'ripemd160') {
  26061. return new Hmac('rmd160', key)
  26062. }
  26063. if (alg === 'md5') {
  26064. return new Legacy(md5, key)
  26065. }
  26066. return new Hmac(alg, key)
  26067. }
  26068. /***/ }),
  26069. /***/ 51031:
  26070. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  26071. "use strict";
  26072. var inherits = __webpack_require__(35717)
  26073. var Buffer = (__webpack_require__(89509).Buffer)
  26074. var Base = __webpack_require__(71027)
  26075. var ZEROS = Buffer.alloc(128)
  26076. var blocksize = 64
  26077. function Hmac (alg, key) {
  26078. Base.call(this, 'digest')
  26079. if (typeof key === 'string') {
  26080. key = Buffer.from(key)
  26081. }
  26082. this._alg = alg
  26083. this._key = key
  26084. if (key.length > blocksize) {
  26085. key = alg(key)
  26086. } else if (key.length < blocksize) {
  26087. key = Buffer.concat([key, ZEROS], blocksize)
  26088. }
  26089. var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
  26090. var opad = this._opad = Buffer.allocUnsafe(blocksize)
  26091. for (var i = 0; i < blocksize; i++) {
  26092. ipad[i] = key[i] ^ 0x36
  26093. opad[i] = key[i] ^ 0x5C
  26094. }
  26095. this._hash = [ipad]
  26096. }
  26097. inherits(Hmac, Base)
  26098. Hmac.prototype._update = function (data) {
  26099. this._hash.push(data)
  26100. }
  26101. Hmac.prototype._final = function () {
  26102. var h = this._alg(Buffer.concat(this._hash))
  26103. return this._alg(Buffer.concat([this._opad, h]))
  26104. }
  26105. module.exports = Hmac
  26106. /***/ }),
  26107. /***/ 55835:
  26108. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  26109. "use strict";
  26110. exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = __webpack_require__(61798)
  26111. exports.createHash = exports.Hash = __webpack_require__(23482)
  26112. exports.createHmac = exports.Hmac = __webpack_require__(58355)
  26113. var algos = __webpack_require__(56042)
  26114. var algoKeys = Object.keys(algos)
  26115. var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)
  26116. exports.getHashes = function () {
  26117. return hashes
  26118. }
  26119. var p = __webpack_require__(25632)
  26120. exports.pbkdf2 = p.pbkdf2
  26121. exports.pbkdf2Sync = p.pbkdf2Sync
  26122. var aes = __webpack_require__(53614)
  26123. exports.Cipher = aes.Cipher
  26124. exports.createCipher = aes.createCipher
  26125. exports.Cipheriv = aes.Cipheriv
  26126. exports.createCipheriv = aes.createCipheriv
  26127. exports.Decipher = aes.Decipher
  26128. exports.createDecipher = aes.createDecipher
  26129. exports.Decipheriv = aes.Decipheriv
  26130. exports.createDecipheriv = aes.createDecipheriv
  26131. exports.getCiphers = aes.getCiphers
  26132. exports.listCiphers = aes.listCiphers
  26133. var dh = __webpack_require__(62607)
  26134. exports.DiffieHellmanGroup = dh.DiffieHellmanGroup
  26135. exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup
  26136. exports.getDiffieHellman = dh.getDiffieHellman
  26137. exports.createDiffieHellman = dh.createDiffieHellman
  26138. exports.DiffieHellman = dh.DiffieHellman
  26139. var sign = __webpack_require__(64743)
  26140. exports.createSign = sign.createSign
  26141. exports.Sign = sign.Sign
  26142. exports.createVerify = sign.createVerify
  26143. exports.Verify = sign.Verify
  26144. exports.createECDH = __webpack_require__(76393)
  26145. var publicEncrypt = __webpack_require__(7900)
  26146. exports.publicEncrypt = publicEncrypt.publicEncrypt
  26147. exports.privateEncrypt = publicEncrypt.privateEncrypt
  26148. exports.publicDecrypt = publicEncrypt.publicDecrypt
  26149. exports.privateDecrypt = publicEncrypt.privateDecrypt
  26150. // the least I can do is make error messages for the rest of the node.js/crypto api.
  26151. // ;[
  26152. // 'createCredentials'
  26153. // ].forEach(function (name) {
  26154. // exports[name] = function () {
  26155. // throw new Error([
  26156. // 'sorry, ' + name + ' is not implemented yet',
  26157. // 'we accept pull requests',
  26158. // 'https://github.com/crypto-browserify/crypto-browserify'
  26159. // ].join('\n'))
  26160. // }
  26161. // })
  26162. var rf = __webpack_require__(77963)
  26163. exports.randomFill = rf.randomFill
  26164. exports.randomFillSync = rf.randomFillSync
  26165. exports.createCredentials = function () {
  26166. throw new Error([
  26167. 'sorry, createCredentials is not implemented yet',
  26168. 'we accept pull requests',
  26169. 'https://github.com/crypto-browserify/crypto-browserify'
  26170. ].join('\n'))
  26171. }
  26172. exports.constants = {
  26173. 'DH_CHECK_P_NOT_SAFE_PRIME': 2,
  26174. 'DH_CHECK_P_NOT_PRIME': 1,
  26175. 'DH_UNABLE_TO_CHECK_GENERATOR': 4,
  26176. 'DH_NOT_SUITABLE_GENERATOR': 8,
  26177. 'NPN_ENABLED': 1,
  26178. 'ALPN_ENABLED': 1,
  26179. 'RSA_PKCS1_PADDING': 1,
  26180. 'RSA_SSLV23_PADDING': 2,
  26181. 'RSA_NO_PADDING': 3,
  26182. 'RSA_PKCS1_OAEP_PADDING': 4,
  26183. 'RSA_X931_PADDING': 5,
  26184. 'RSA_PKCS1_PSS_PADDING': 6,
  26185. 'POINT_CONVERSION_COMPRESSED': 2,
  26186. 'POINT_CONVERSION_UNCOMPRESSED': 4,
  26187. 'POINT_CONVERSION_HYBRID': 6
  26188. }
  26189. /***/ }),
  26190. /***/ 93776:
  26191. /***/ (function(module, exports, __webpack_require__) {
  26192. var __WEBPACK_AMD_DEFINE_RESULT__;;(function (globalScope) {
  26193. 'use strict';
  26194. /*
  26195. * decimal.js v10.3.1
  26196. * An arbitrary-precision Decimal type for JavaScript.
  26197. * https://github.com/MikeMcl/decimal.js
  26198. * Copyright (c) 2021 Michael Mclaughlin <M8ch88l@gmail.com>
  26199. * MIT Licence
  26200. */
  26201. // ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //
  26202. // The maximum exponent magnitude.
  26203. // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.
  26204. var EXP_LIMIT = 9e15, // 0 to 9e15
  26205. // The limit on the value of `precision`, and on the value of the first argument to
  26206. // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.
  26207. MAX_DIGITS = 1e9, // 0 to 1e9
  26208. // Base conversion alphabet.
  26209. NUMERALS = '0123456789abcdef',
  26210. // The natural logarithm of 10 (1025 digits).
  26211. LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',
  26212. // Pi (1025 digits).
  26213. PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',
  26214. // The initial configuration properties of the Decimal constructor.
  26215. DEFAULTS = {
  26216. // These values must be integers within the stated ranges (inclusive).
  26217. // Most of these values can be changed at run-time using the `Decimal.config` method.
  26218. // The maximum number of significant digits of the result of a calculation or base conversion.
  26219. // E.g. `Decimal.config({ precision: 20 });`
  26220. precision: 20, // 1 to MAX_DIGITS
  26221. // The rounding mode used when rounding to `precision`.
  26222. //
  26223. // ROUND_UP 0 Away from zero.
  26224. // ROUND_DOWN 1 Towards zero.
  26225. // ROUND_CEIL 2 Towards +Infinity.
  26226. // ROUND_FLOOR 3 Towards -Infinity.
  26227. // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.
  26228. // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.
  26229. // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.
  26230. // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.
  26231. // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
  26232. //
  26233. // E.g.
  26234. // `Decimal.rounding = 4;`
  26235. // `Decimal.rounding = Decimal.ROUND_HALF_UP;`
  26236. rounding: 4, // 0 to 8
  26237. // The modulo mode used when calculating the modulus: a mod n.
  26238. // The quotient (q = a / n) is calculated according to the corresponding rounding mode.
  26239. // The remainder (r) is calculated as: r = a - n * q.
  26240. //
  26241. // UP 0 The remainder is positive if the dividend is negative, else is negative.
  26242. // DOWN 1 The remainder has the same sign as the dividend (JavaScript %).
  26243. // FLOOR 3 The remainder has the same sign as the divisor (Python %).
  26244. // HALF_EVEN 6 The IEEE 754 remainder function.
  26245. // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.
  26246. //
  26247. // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian
  26248. // division (9) are commonly used for the modulus operation. The other rounding modes can also
  26249. // be used, but they may not give useful results.
  26250. modulo: 1, // 0 to 9
  26251. // The exponent value at and beneath which `toString` returns exponential notation.
  26252. // JavaScript numbers: -7
  26253. toExpNeg: -7, // 0 to -EXP_LIMIT
  26254. // The exponent value at and above which `toString` returns exponential notation.
  26255. // JavaScript numbers: 21
  26256. toExpPos: 21, // 0 to EXP_LIMIT
  26257. // The minimum exponent value, beneath which underflow to zero occurs.
  26258. // JavaScript numbers: -324 (5e-324)
  26259. minE: -EXP_LIMIT, // -1 to -EXP_LIMIT
  26260. // The maximum exponent value, above which overflow to Infinity occurs.
  26261. // JavaScript numbers: 308 (1.7976931348623157e+308)
  26262. maxE: EXP_LIMIT, // 1 to EXP_LIMIT
  26263. // Whether to use cryptographically-secure random number generation, if available.
  26264. crypto: false // true/false
  26265. },
  26266. // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //
  26267. Decimal, inexact, noConflict, quadrant,
  26268. external = true,
  26269. decimalError = '[DecimalError] ',
  26270. invalidArgument = decimalError + 'Invalid argument: ',
  26271. precisionLimitExceeded = decimalError + 'Precision limit exceeded',
  26272. cryptoUnavailable = decimalError + 'crypto unavailable',
  26273. tag = '[object Decimal]',
  26274. mathfloor = Math.floor,
  26275. mathpow = Math.pow,
  26276. isBinary = /^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,
  26277. isHex = /^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,
  26278. isOctal = /^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,
  26279. isDecimal = /^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,
  26280. BASE = 1e7,
  26281. LOG_BASE = 7,
  26282. MAX_SAFE_INTEGER = 9007199254740991,
  26283. LN10_PRECISION = LN10.length - 1,
  26284. PI_PRECISION = PI.length - 1,
  26285. // Decimal.prototype object
  26286. P = { toStringTag: tag };
  26287. // Decimal prototype methods
  26288. /*
  26289. * absoluteValue abs
  26290. * ceil
  26291. * clampedTo clamp
  26292. * comparedTo cmp
  26293. * cosine cos
  26294. * cubeRoot cbrt
  26295. * decimalPlaces dp
  26296. * dividedBy div
  26297. * dividedToIntegerBy divToInt
  26298. * equals eq
  26299. * floor
  26300. * greaterThan gt
  26301. * greaterThanOrEqualTo gte
  26302. * hyperbolicCosine cosh
  26303. * hyperbolicSine sinh
  26304. * hyperbolicTangent tanh
  26305. * inverseCosine acos
  26306. * inverseHyperbolicCosine acosh
  26307. * inverseHyperbolicSine asinh
  26308. * inverseHyperbolicTangent atanh
  26309. * inverseSine asin
  26310. * inverseTangent atan
  26311. * isFinite
  26312. * isInteger isInt
  26313. * isNaN
  26314. * isNegative isNeg
  26315. * isPositive isPos
  26316. * isZero
  26317. * lessThan lt
  26318. * lessThanOrEqualTo lte
  26319. * logarithm log
  26320. * [maximum] [max]
  26321. * [minimum] [min]
  26322. * minus sub
  26323. * modulo mod
  26324. * naturalExponential exp
  26325. * naturalLogarithm ln
  26326. * negated neg
  26327. * plus add
  26328. * precision sd
  26329. * round
  26330. * sine sin
  26331. * squareRoot sqrt
  26332. * tangent tan
  26333. * times mul
  26334. * toBinary
  26335. * toDecimalPlaces toDP
  26336. * toExponential
  26337. * toFixed
  26338. * toFraction
  26339. * toHexadecimal toHex
  26340. * toNearest
  26341. * toNumber
  26342. * toOctal
  26343. * toPower pow
  26344. * toPrecision
  26345. * toSignificantDigits toSD
  26346. * toString
  26347. * truncated trunc
  26348. * valueOf toJSON
  26349. */
  26350. /*
  26351. * Return a new Decimal whose value is the absolute value of this Decimal.
  26352. *
  26353. */
  26354. P.absoluteValue = P.abs = function () {
  26355. var x = new this.constructor(this);
  26356. if (x.s < 0) x.s = 1;
  26357. return finalise(x);
  26358. };
  26359. /*
  26360. * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the
  26361. * direction of positive Infinity.
  26362. *
  26363. */
  26364. P.ceil = function () {
  26365. return finalise(new this.constructor(this), this.e + 1, 2);
  26366. };
  26367. /*
  26368. * Return a new Decimal whose value is the value of this Decimal clamped to the range
  26369. * delineated by `min` and `max`.
  26370. *
  26371. * min {number|string|Decimal}
  26372. * max {number|string|Decimal}
  26373. *
  26374. */
  26375. P.clampedTo = P.clamp = function (min, max) {
  26376. var k,
  26377. x = this,
  26378. Ctor = x.constructor;
  26379. min = new Ctor(min);
  26380. max = new Ctor(max);
  26381. if (!min.s || !max.s) return new Ctor(NaN);
  26382. if (min.gt(max)) throw Error(invalidArgument + max);
  26383. k = x.cmp(min);
  26384. return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);
  26385. };
  26386. /*
  26387. * Return
  26388. * 1 if the value of this Decimal is greater than the value of `y`,
  26389. * -1 if the value of this Decimal is less than the value of `y`,
  26390. * 0 if they have the same value,
  26391. * NaN if the value of either Decimal is NaN.
  26392. *
  26393. */
  26394. P.comparedTo = P.cmp = function (y) {
  26395. var i, j, xdL, ydL,
  26396. x = this,
  26397. xd = x.d,
  26398. yd = (y = new x.constructor(y)).d,
  26399. xs = x.s,
  26400. ys = y.s;
  26401. // Either NaN or ±Infinity?
  26402. if (!xd || !yd) {
  26403. return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;
  26404. }
  26405. // Either zero?
  26406. if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;
  26407. // Signs differ?
  26408. if (xs !== ys) return xs;
  26409. // Compare exponents.
  26410. if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;
  26411. xdL = xd.length;
  26412. ydL = yd.length;
  26413. // Compare digit by digit.
  26414. for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {
  26415. if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;
  26416. }
  26417. // Compare lengths.
  26418. return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;
  26419. };
  26420. /*
  26421. * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.
  26422. *
  26423. * Domain: [-Infinity, Infinity]
  26424. * Range: [-1, 1]
  26425. *
  26426. * cos(0) = 1
  26427. * cos(-0) = 1
  26428. * cos(Infinity) = NaN
  26429. * cos(-Infinity) = NaN
  26430. * cos(NaN) = NaN
  26431. *
  26432. */
  26433. P.cosine = P.cos = function () {
  26434. var pr, rm,
  26435. x = this,
  26436. Ctor = x.constructor;
  26437. if (!x.d) return new Ctor(NaN);
  26438. // cos(0) = cos(-0) = 1
  26439. if (!x.d[0]) return new Ctor(1);
  26440. pr = Ctor.precision;
  26441. rm = Ctor.rounding;
  26442. Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;
  26443. Ctor.rounding = 1;
  26444. x = cosine(Ctor, toLessThanHalfPi(Ctor, x));
  26445. Ctor.precision = pr;
  26446. Ctor.rounding = rm;
  26447. return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);
  26448. };
  26449. /*
  26450. *
  26451. * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to
  26452. * `precision` significant digits using rounding mode `rounding`.
  26453. *
  26454. * cbrt(0) = 0
  26455. * cbrt(-0) = -0
  26456. * cbrt(1) = 1
  26457. * cbrt(-1) = -1
  26458. * cbrt(N) = N
  26459. * cbrt(-I) = -I
  26460. * cbrt(I) = I
  26461. *
  26462. * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))
  26463. *
  26464. */
  26465. P.cubeRoot = P.cbrt = function () {
  26466. var e, m, n, r, rep, s, sd, t, t3, t3plusx,
  26467. x = this,
  26468. Ctor = x.constructor;
  26469. if (!x.isFinite() || x.isZero()) return new Ctor(x);
  26470. external = false;
  26471. // Initial estimate.
  26472. s = x.s * mathpow(x.s * x, 1 / 3);
  26473. // Math.cbrt underflow/overflow?
  26474. // Pass x to Math.pow as integer, then adjust the exponent of the result.
  26475. if (!s || Math.abs(s) == 1 / 0) {
  26476. n = digitsToString(x.d);
  26477. e = x.e;
  26478. // Adjust n exponent so it is a multiple of 3 away from x exponent.
  26479. if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');
  26480. s = mathpow(n, 1 / 3);
  26481. // Rarely, e may be one less than the result exponent value.
  26482. e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));
  26483. if (s == 1 / 0) {
  26484. n = '5e' + e;
  26485. } else {
  26486. n = s.toExponential();
  26487. n = n.slice(0, n.indexOf('e') + 1) + e;
  26488. }
  26489. r = new Ctor(n);
  26490. r.s = x.s;
  26491. } else {
  26492. r = new Ctor(s.toString());
  26493. }
  26494. sd = (e = Ctor.precision) + 3;
  26495. // Halley's method.
  26496. // TODO? Compare Newton's method.
  26497. for (;;) {
  26498. t = r;
  26499. t3 = t.times(t).times(t);
  26500. t3plusx = t3.plus(x);
  26501. r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);
  26502. // TODO? Replace with for-loop and checkRoundingDigits.
  26503. if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {
  26504. n = n.slice(sd - 3, sd + 1);
  26505. // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999
  26506. // , i.e. approaching a rounding boundary, continue the iteration.
  26507. if (n == '9999' || !rep && n == '4999') {
  26508. // On the first iteration only, check to see if rounding up gives the exact result as the
  26509. // nines may infinitely repeat.
  26510. if (!rep) {
  26511. finalise(t, e + 1, 0);
  26512. if (t.times(t).times(t).eq(x)) {
  26513. r = t;
  26514. break;
  26515. }
  26516. }
  26517. sd += 4;
  26518. rep = 1;
  26519. } else {
  26520. // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.
  26521. // If not, then there are further digits and m will be truthy.
  26522. if (!+n || !+n.slice(1) && n.charAt(0) == '5') {
  26523. // Truncate to the first rounding digit.
  26524. finalise(r, e + 1, 1);
  26525. m = !r.times(r).times(r).eq(x);
  26526. }
  26527. break;
  26528. }
  26529. }
  26530. }
  26531. external = true;
  26532. return finalise(r, e, Ctor.rounding, m);
  26533. };
  26534. /*
  26535. * Return the number of decimal places of the value of this Decimal.
  26536. *
  26537. */
  26538. P.decimalPlaces = P.dp = function () {
  26539. var w,
  26540. d = this.d,
  26541. n = NaN;
  26542. if (d) {
  26543. w = d.length - 1;
  26544. n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;
  26545. // Subtract the number of trailing zeros of the last word.
  26546. w = d[w];
  26547. if (w) for (; w % 10 == 0; w /= 10) n--;
  26548. if (n < 0) n = 0;
  26549. }
  26550. return n;
  26551. };
  26552. /*
  26553. * n / 0 = I
  26554. * n / N = N
  26555. * n / I = 0
  26556. * 0 / n = 0
  26557. * 0 / 0 = N
  26558. * 0 / N = N
  26559. * 0 / I = 0
  26560. * N / n = N
  26561. * N / 0 = N
  26562. * N / N = N
  26563. * N / I = N
  26564. * I / n = I
  26565. * I / 0 = I
  26566. * I / N = N
  26567. * I / I = N
  26568. *
  26569. * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to
  26570. * `precision` significant digits using rounding mode `rounding`.
  26571. *
  26572. */
  26573. P.dividedBy = P.div = function (y) {
  26574. return divide(this, new this.constructor(y));
  26575. };
  26576. /*
  26577. * Return a new Decimal whose value is the integer part of dividing the value of this Decimal
  26578. * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.
  26579. *
  26580. */
  26581. P.dividedToIntegerBy = P.divToInt = function (y) {
  26582. var x = this,
  26583. Ctor = x.constructor;
  26584. return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);
  26585. };
  26586. /*
  26587. * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.
  26588. *
  26589. */
  26590. P.equals = P.eq = function (y) {
  26591. return this.cmp(y) === 0;
  26592. };
  26593. /*
  26594. * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the
  26595. * direction of negative Infinity.
  26596. *
  26597. */
  26598. P.floor = function () {
  26599. return finalise(new this.constructor(this), this.e + 1, 3);
  26600. };
  26601. /*
  26602. * Return true if the value of this Decimal is greater than the value of `y`, otherwise return
  26603. * false.
  26604. *
  26605. */
  26606. P.greaterThan = P.gt = function (y) {
  26607. return this.cmp(y) > 0;
  26608. };
  26609. /*
  26610. * Return true if the value of this Decimal is greater than or equal to the value of `y`,
  26611. * otherwise return false.
  26612. *
  26613. */
  26614. P.greaterThanOrEqualTo = P.gte = function (y) {
  26615. var k = this.cmp(y);
  26616. return k == 1 || k === 0;
  26617. };
  26618. /*
  26619. * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this
  26620. * Decimal.
  26621. *
  26622. * Domain: [-Infinity, Infinity]
  26623. * Range: [1, Infinity]
  26624. *
  26625. * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...
  26626. *
  26627. * cosh(0) = 1
  26628. * cosh(-0) = 1
  26629. * cosh(Infinity) = Infinity
  26630. * cosh(-Infinity) = Infinity
  26631. * cosh(NaN) = NaN
  26632. *
  26633. * x time taken (ms) result
  26634. * 1000 9 9.8503555700852349694e+433
  26635. * 10000 25 4.4034091128314607936e+4342
  26636. * 100000 171 1.4033316802130615897e+43429
  26637. * 1000000 3817 1.5166076984010437725e+434294
  26638. * 10000000 abandoned after 2 minute wait
  26639. *
  26640. * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))
  26641. *
  26642. */
  26643. P.hyperbolicCosine = P.cosh = function () {
  26644. var k, n, pr, rm, len,
  26645. x = this,
  26646. Ctor = x.constructor,
  26647. one = new Ctor(1);
  26648. if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);
  26649. if (x.isZero()) return one;
  26650. pr = Ctor.precision;
  26651. rm = Ctor.rounding;
  26652. Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;
  26653. Ctor.rounding = 1;
  26654. len = x.d.length;
  26655. // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1
  26656. // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))
  26657. // Estimate the optimum number of times to use the argument reduction.
  26658. // TODO? Estimation reused from cosine() and may not be optimal here.
  26659. if (len < 32) {
  26660. k = Math.ceil(len / 3);
  26661. n = (1 / tinyPow(4, k)).toString();
  26662. } else {
  26663. k = 16;
  26664. n = '2.3283064365386962890625e-10';
  26665. }
  26666. x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);
  26667. // Reverse argument reduction
  26668. var cosh2_x,
  26669. i = k,
  26670. d8 = new Ctor(8);
  26671. for (; i--;) {
  26672. cosh2_x = x.times(x);
  26673. x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));
  26674. }
  26675. return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);
  26676. };
  26677. /*
  26678. * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this
  26679. * Decimal.
  26680. *
  26681. * Domain: [-Infinity, Infinity]
  26682. * Range: [-Infinity, Infinity]
  26683. *
  26684. * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...
  26685. *
  26686. * sinh(0) = 0
  26687. * sinh(-0) = -0
  26688. * sinh(Infinity) = Infinity
  26689. * sinh(-Infinity) = -Infinity
  26690. * sinh(NaN) = NaN
  26691. *
  26692. * x time taken (ms)
  26693. * 10 2 ms
  26694. * 100 5 ms
  26695. * 1000 14 ms
  26696. * 10000 82 ms
  26697. * 100000 886 ms 1.4033316802130615897e+43429
  26698. * 200000 2613 ms
  26699. * 300000 5407 ms
  26700. * 400000 8824 ms
  26701. * 500000 13026 ms 8.7080643612718084129e+217146
  26702. * 1000000 48543 ms
  26703. *
  26704. * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))
  26705. *
  26706. */
  26707. P.hyperbolicSine = P.sinh = function () {
  26708. var k, pr, rm, len,
  26709. x = this,
  26710. Ctor = x.constructor;
  26711. if (!x.isFinite() || x.isZero()) return new Ctor(x);
  26712. pr = Ctor.precision;
  26713. rm = Ctor.rounding;
  26714. Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;
  26715. Ctor.rounding = 1;
  26716. len = x.d.length;
  26717. if (len < 3) {
  26718. x = taylorSeries(Ctor, 2, x, x, true);
  26719. } else {
  26720. // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))
  26721. // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))
  26722. // 3 multiplications and 1 addition
  26723. // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))
  26724. // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))
  26725. // 4 multiplications and 2 additions
  26726. // Estimate the optimum number of times to use the argument reduction.
  26727. k = 1.4 * Math.sqrt(len);
  26728. k = k > 16 ? 16 : k | 0;
  26729. x = x.times(1 / tinyPow(5, k));
  26730. x = taylorSeries(Ctor, 2, x, x, true);
  26731. // Reverse argument reduction
  26732. var sinh2_x,
  26733. d5 = new Ctor(5),
  26734. d16 = new Ctor(16),
  26735. d20 = new Ctor(20);
  26736. for (; k--;) {
  26737. sinh2_x = x.times(x);
  26738. x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));
  26739. }
  26740. }
  26741. Ctor.precision = pr;
  26742. Ctor.rounding = rm;
  26743. return finalise(x, pr, rm, true);
  26744. };
  26745. /*
  26746. * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this
  26747. * Decimal.
  26748. *
  26749. * Domain: [-Infinity, Infinity]
  26750. * Range: [-1, 1]
  26751. *
  26752. * tanh(x) = sinh(x) / cosh(x)
  26753. *
  26754. * tanh(0) = 0
  26755. * tanh(-0) = -0
  26756. * tanh(Infinity) = 1
  26757. * tanh(-Infinity) = -1
  26758. * tanh(NaN) = NaN
  26759. *
  26760. */
  26761. P.hyperbolicTangent = P.tanh = function () {
  26762. var pr, rm,
  26763. x = this,
  26764. Ctor = x.constructor;
  26765. if (!x.isFinite()) return new Ctor(x.s);
  26766. if (x.isZero()) return new Ctor(x);
  26767. pr = Ctor.precision;
  26768. rm = Ctor.rounding;
  26769. Ctor.precision = pr + 7;
  26770. Ctor.rounding = 1;
  26771. return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);
  26772. };
  26773. /*
  26774. * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of
  26775. * this Decimal.
  26776. *
  26777. * Domain: [-1, 1]
  26778. * Range: [0, pi]
  26779. *
  26780. * acos(x) = pi/2 - asin(x)
  26781. *
  26782. * acos(0) = pi/2
  26783. * acos(-0) = pi/2
  26784. * acos(1) = 0
  26785. * acos(-1) = pi
  26786. * acos(1/2) = pi/3
  26787. * acos(-1/2) = 2*pi/3
  26788. * acos(|x| > 1) = NaN
  26789. * acos(NaN) = NaN
  26790. *
  26791. */
  26792. P.inverseCosine = P.acos = function () {
  26793. var halfPi,
  26794. x = this,
  26795. Ctor = x.constructor,
  26796. k = x.abs().cmp(1),
  26797. pr = Ctor.precision,
  26798. rm = Ctor.rounding;
  26799. if (k !== -1) {
  26800. return k === 0
  26801. // |x| is 1
  26802. ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)
  26803. // |x| > 1 or x is NaN
  26804. : new Ctor(NaN);
  26805. }
  26806. if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);
  26807. // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3
  26808. Ctor.precision = pr + 6;
  26809. Ctor.rounding = 1;
  26810. x = x.asin();
  26811. halfPi = getPi(Ctor, pr + 4, rm).times(0.5);
  26812. Ctor.precision = pr;
  26813. Ctor.rounding = rm;
  26814. return halfPi.minus(x);
  26815. };
  26816. /*
  26817. * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the
  26818. * value of this Decimal.
  26819. *
  26820. * Domain: [1, Infinity]
  26821. * Range: [0, Infinity]
  26822. *
  26823. * acosh(x) = ln(x + sqrt(x^2 - 1))
  26824. *
  26825. * acosh(x < 1) = NaN
  26826. * acosh(NaN) = NaN
  26827. * acosh(Infinity) = Infinity
  26828. * acosh(-Infinity) = NaN
  26829. * acosh(0) = NaN
  26830. * acosh(-0) = NaN
  26831. * acosh(1) = 0
  26832. * acosh(-1) = NaN
  26833. *
  26834. */
  26835. P.inverseHyperbolicCosine = P.acosh = function () {
  26836. var pr, rm,
  26837. x = this,
  26838. Ctor = x.constructor;
  26839. if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);
  26840. if (!x.isFinite()) return new Ctor(x);
  26841. pr = Ctor.precision;
  26842. rm = Ctor.rounding;
  26843. Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;
  26844. Ctor.rounding = 1;
  26845. external = false;
  26846. x = x.times(x).minus(1).sqrt().plus(x);
  26847. external = true;
  26848. Ctor.precision = pr;
  26849. Ctor.rounding = rm;
  26850. return x.ln();
  26851. };
  26852. /*
  26853. * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value
  26854. * of this Decimal.
  26855. *
  26856. * Domain: [-Infinity, Infinity]
  26857. * Range: [-Infinity, Infinity]
  26858. *
  26859. * asinh(x) = ln(x + sqrt(x^2 + 1))
  26860. *
  26861. * asinh(NaN) = NaN
  26862. * asinh(Infinity) = Infinity
  26863. * asinh(-Infinity) = -Infinity
  26864. * asinh(0) = 0
  26865. * asinh(-0) = -0
  26866. *
  26867. */
  26868. P.inverseHyperbolicSine = P.asinh = function () {
  26869. var pr, rm,
  26870. x = this,
  26871. Ctor = x.constructor;
  26872. if (!x.isFinite() || x.isZero()) return new Ctor(x);
  26873. pr = Ctor.precision;
  26874. rm = Ctor.rounding;
  26875. Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;
  26876. Ctor.rounding = 1;
  26877. external = false;
  26878. x = x.times(x).plus(1).sqrt().plus(x);
  26879. external = true;
  26880. Ctor.precision = pr;
  26881. Ctor.rounding = rm;
  26882. return x.ln();
  26883. };
  26884. /*
  26885. * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the
  26886. * value of this Decimal.
  26887. *
  26888. * Domain: [-1, 1]
  26889. * Range: [-Infinity, Infinity]
  26890. *
  26891. * atanh(x) = 0.5 * ln((1 + x) / (1 - x))
  26892. *
  26893. * atanh(|x| > 1) = NaN
  26894. * atanh(NaN) = NaN
  26895. * atanh(Infinity) = NaN
  26896. * atanh(-Infinity) = NaN
  26897. * atanh(0) = 0
  26898. * atanh(-0) = -0
  26899. * atanh(1) = Infinity
  26900. * atanh(-1) = -Infinity
  26901. *
  26902. */
  26903. P.inverseHyperbolicTangent = P.atanh = function () {
  26904. var pr, rm, wpr, xsd,
  26905. x = this,
  26906. Ctor = x.constructor;
  26907. if (!x.isFinite()) return new Ctor(NaN);
  26908. if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);
  26909. pr = Ctor.precision;
  26910. rm = Ctor.rounding;
  26911. xsd = x.sd();
  26912. if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);
  26913. Ctor.precision = wpr = xsd - x.e;
  26914. x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);
  26915. Ctor.precision = pr + 4;
  26916. Ctor.rounding = 1;
  26917. x = x.ln();
  26918. Ctor.precision = pr;
  26919. Ctor.rounding = rm;
  26920. return x.times(0.5);
  26921. };
  26922. /*
  26923. * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this
  26924. * Decimal.
  26925. *
  26926. * Domain: [-Infinity, Infinity]
  26927. * Range: [-pi/2, pi/2]
  26928. *
  26929. * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))
  26930. *
  26931. * asin(0) = 0
  26932. * asin(-0) = -0
  26933. * asin(1/2) = pi/6
  26934. * asin(-1/2) = -pi/6
  26935. * asin(1) = pi/2
  26936. * asin(-1) = -pi/2
  26937. * asin(|x| > 1) = NaN
  26938. * asin(NaN) = NaN
  26939. *
  26940. * TODO? Compare performance of Taylor series.
  26941. *
  26942. */
  26943. P.inverseSine = P.asin = function () {
  26944. var halfPi, k,
  26945. pr, rm,
  26946. x = this,
  26947. Ctor = x.constructor;
  26948. if (x.isZero()) return new Ctor(x);
  26949. k = x.abs().cmp(1);
  26950. pr = Ctor.precision;
  26951. rm = Ctor.rounding;
  26952. if (k !== -1) {
  26953. // |x| is 1
  26954. if (k === 0) {
  26955. halfPi = getPi(Ctor, pr + 4, rm).times(0.5);
  26956. halfPi.s = x.s;
  26957. return halfPi;
  26958. }
  26959. // |x| > 1 or x is NaN
  26960. return new Ctor(NaN);
  26961. }
  26962. // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6
  26963. Ctor.precision = pr + 6;
  26964. Ctor.rounding = 1;
  26965. x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();
  26966. Ctor.precision = pr;
  26967. Ctor.rounding = rm;
  26968. return x.times(2);
  26969. };
  26970. /*
  26971. * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value
  26972. * of this Decimal.
  26973. *
  26974. * Domain: [-Infinity, Infinity]
  26975. * Range: [-pi/2, pi/2]
  26976. *
  26977. * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...
  26978. *
  26979. * atan(0) = 0
  26980. * atan(-0) = -0
  26981. * atan(1) = pi/4
  26982. * atan(-1) = -pi/4
  26983. * atan(Infinity) = pi/2
  26984. * atan(-Infinity) = -pi/2
  26985. * atan(NaN) = NaN
  26986. *
  26987. */
  26988. P.inverseTangent = P.atan = function () {
  26989. var i, j, k, n, px, t, r, wpr, x2,
  26990. x = this,
  26991. Ctor = x.constructor,
  26992. pr = Ctor.precision,
  26993. rm = Ctor.rounding;
  26994. if (!x.isFinite()) {
  26995. if (!x.s) return new Ctor(NaN);
  26996. if (pr + 4 <= PI_PRECISION) {
  26997. r = getPi(Ctor, pr + 4, rm).times(0.5);
  26998. r.s = x.s;
  26999. return r;
  27000. }
  27001. } else if (x.isZero()) {
  27002. return new Ctor(x);
  27003. } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {
  27004. r = getPi(Ctor, pr + 4, rm).times(0.25);
  27005. r.s = x.s;
  27006. return r;
  27007. }
  27008. Ctor.precision = wpr = pr + 10;
  27009. Ctor.rounding = 1;
  27010. // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);
  27011. // Argument reduction
  27012. // Ensure |x| < 0.42
  27013. // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))
  27014. k = Math.min(28, wpr / LOG_BASE + 2 | 0);
  27015. for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));
  27016. external = false;
  27017. j = Math.ceil(wpr / LOG_BASE);
  27018. n = 1;
  27019. x2 = x.times(x);
  27020. r = new Ctor(x);
  27021. px = x;
  27022. // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...
  27023. for (; i !== -1;) {
  27024. px = px.times(x2);
  27025. t = r.minus(px.div(n += 2));
  27026. px = px.times(x2);
  27027. r = t.plus(px.div(n += 2));
  27028. if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);
  27029. }
  27030. if (k) r = r.times(2 << (k - 1));
  27031. external = true;
  27032. return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);
  27033. };
  27034. /*
  27035. * Return true if the value of this Decimal is a finite number, otherwise return false.
  27036. *
  27037. */
  27038. P.isFinite = function () {
  27039. return !!this.d;
  27040. };
  27041. /*
  27042. * Return true if the value of this Decimal is an integer, otherwise return false.
  27043. *
  27044. */
  27045. P.isInteger = P.isInt = function () {
  27046. return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;
  27047. };
  27048. /*
  27049. * Return true if the value of this Decimal is NaN, otherwise return false.
  27050. *
  27051. */
  27052. P.isNaN = function () {
  27053. return !this.s;
  27054. };
  27055. /*
  27056. * Return true if the value of this Decimal is negative, otherwise return false.
  27057. *
  27058. */
  27059. P.isNegative = P.isNeg = function () {
  27060. return this.s < 0;
  27061. };
  27062. /*
  27063. * Return true if the value of this Decimal is positive, otherwise return false.
  27064. *
  27065. */
  27066. P.isPositive = P.isPos = function () {
  27067. return this.s > 0;
  27068. };
  27069. /*
  27070. * Return true if the value of this Decimal is 0 or -0, otherwise return false.
  27071. *
  27072. */
  27073. P.isZero = function () {
  27074. return !!this.d && this.d[0] === 0;
  27075. };
  27076. /*
  27077. * Return true if the value of this Decimal is less than `y`, otherwise return false.
  27078. *
  27079. */
  27080. P.lessThan = P.lt = function (y) {
  27081. return this.cmp(y) < 0;
  27082. };
  27083. /*
  27084. * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.
  27085. *
  27086. */
  27087. P.lessThanOrEqualTo = P.lte = function (y) {
  27088. return this.cmp(y) < 1;
  27089. };
  27090. /*
  27091. * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`
  27092. * significant digits using rounding mode `rounding`.
  27093. *
  27094. * If no base is specified, return log[10](arg).
  27095. *
  27096. * log[base](arg) = ln(arg) / ln(base)
  27097. *
  27098. * The result will always be correctly rounded if the base of the log is 10, and 'almost always'
  27099. * otherwise:
  27100. *
  27101. * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen
  27102. * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error
  27103. * between the result and the correctly rounded result will be one ulp (unit in the last place).
  27104. *
  27105. * log[-b](a) = NaN
  27106. * log[0](a) = NaN
  27107. * log[1](a) = NaN
  27108. * log[NaN](a) = NaN
  27109. * log[Infinity](a) = NaN
  27110. * log[b](0) = -Infinity
  27111. * log[b](-0) = -Infinity
  27112. * log[b](-a) = NaN
  27113. * log[b](1) = 0
  27114. * log[b](Infinity) = Infinity
  27115. * log[b](NaN) = NaN
  27116. *
  27117. * [base] {number|string|Decimal} The base of the logarithm.
  27118. *
  27119. */
  27120. P.logarithm = P.log = function (base) {
  27121. var isBase10, d, denominator, k, inf, num, sd, r,
  27122. arg = this,
  27123. Ctor = arg.constructor,
  27124. pr = Ctor.precision,
  27125. rm = Ctor.rounding,
  27126. guard = 5;
  27127. // Default base is 10.
  27128. if (base == null) {
  27129. base = new Ctor(10);
  27130. isBase10 = true;
  27131. } else {
  27132. base = new Ctor(base);
  27133. d = base.d;
  27134. // Return NaN if base is negative, or non-finite, or is 0 or 1.
  27135. if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);
  27136. isBase10 = base.eq(10);
  27137. }
  27138. d = arg.d;
  27139. // Is arg negative, non-finite, 0 or 1?
  27140. if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {
  27141. return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);
  27142. }
  27143. // The result will have a non-terminating decimal expansion if base is 10 and arg is not an
  27144. // integer power of 10.
  27145. if (isBase10) {
  27146. if (d.length > 1) {
  27147. inf = true;
  27148. } else {
  27149. for (k = d[0]; k % 10 === 0;) k /= 10;
  27150. inf = k !== 1;
  27151. }
  27152. }
  27153. external = false;
  27154. sd = pr + guard;
  27155. num = naturalLogarithm(arg, sd);
  27156. denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);
  27157. // The result will have 5 rounding digits.
  27158. r = divide(num, denominator, sd, 1);
  27159. // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,
  27160. // calculate 10 further digits.
  27161. //
  27162. // If the result is known to have an infinite decimal expansion, repeat this until it is clear
  27163. // that the result is above or below the boundary. Otherwise, if after calculating the 10
  27164. // further digits, the last 14 are nines, round up and assume the result is exact.
  27165. // Also assume the result is exact if the last 14 are zero.
  27166. //
  27167. // Example of a result that will be incorrectly rounded:
  27168. // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...
  27169. // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it
  27170. // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so
  27171. // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal
  27172. // place is still 2.6.
  27173. if (checkRoundingDigits(r.d, k = pr, rm)) {
  27174. do {
  27175. sd += 10;
  27176. num = naturalLogarithm(arg, sd);
  27177. denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);
  27178. r = divide(num, denominator, sd, 1);
  27179. if (!inf) {
  27180. // Check for 14 nines from the 2nd rounding digit, as the first may be 4.
  27181. if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {
  27182. r = finalise(r, pr + 1, 0);
  27183. }
  27184. break;
  27185. }
  27186. } while (checkRoundingDigits(r.d, k += 10, rm));
  27187. }
  27188. external = true;
  27189. return finalise(r, pr, rm);
  27190. };
  27191. /*
  27192. * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.
  27193. *
  27194. * arguments {number|string|Decimal}
  27195. *
  27196. P.max = function () {
  27197. Array.prototype.push.call(arguments, this);
  27198. return maxOrMin(this.constructor, arguments, 'lt');
  27199. };
  27200. */
  27201. /*
  27202. * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.
  27203. *
  27204. * arguments {number|string|Decimal}
  27205. *
  27206. P.min = function () {
  27207. Array.prototype.push.call(arguments, this);
  27208. return maxOrMin(this.constructor, arguments, 'gt');
  27209. };
  27210. */
  27211. /*
  27212. * n - 0 = n
  27213. * n - N = N
  27214. * n - I = -I
  27215. * 0 - n = -n
  27216. * 0 - 0 = 0
  27217. * 0 - N = N
  27218. * 0 - I = -I
  27219. * N - n = N
  27220. * N - 0 = N
  27221. * N - N = N
  27222. * N - I = N
  27223. * I - n = I
  27224. * I - 0 = I
  27225. * I - N = N
  27226. * I - I = N
  27227. *
  27228. * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`
  27229. * significant digits using rounding mode `rounding`.
  27230. *
  27231. */
  27232. P.minus = P.sub = function (y) {
  27233. var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,
  27234. x = this,
  27235. Ctor = x.constructor;
  27236. y = new Ctor(y);
  27237. // If either is not finite...
  27238. if (!x.d || !y.d) {
  27239. // Return NaN if either is NaN.
  27240. if (!x.s || !y.s) y = new Ctor(NaN);
  27241. // Return y negated if x is finite and y is ±Infinity.
  27242. else if (x.d) y.s = -y.s;
  27243. // Return x if y is finite and x is ±Infinity.
  27244. // Return x if both are ±Infinity with different signs.
  27245. // Return NaN if both are ±Infinity with the same sign.
  27246. else y = new Ctor(y.d || x.s !== y.s ? x : NaN);
  27247. return y;
  27248. }
  27249. // If signs differ...
  27250. if (x.s != y.s) {
  27251. y.s = -y.s;
  27252. return x.plus(y);
  27253. }
  27254. xd = x.d;
  27255. yd = y.d;
  27256. pr = Ctor.precision;
  27257. rm = Ctor.rounding;
  27258. // If either is zero...
  27259. if (!xd[0] || !yd[0]) {
  27260. // Return y negated if x is zero and y is non-zero.
  27261. if (yd[0]) y.s = -y.s;
  27262. // Return x if y is zero and x is non-zero.
  27263. else if (xd[0]) y = new Ctor(x);
  27264. // Return zero if both are zero.
  27265. // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.
  27266. else return new Ctor(rm === 3 ? -0 : 0);
  27267. return external ? finalise(y, pr, rm) : y;
  27268. }
  27269. // x and y are finite, non-zero numbers with the same sign.
  27270. // Calculate base 1e7 exponents.
  27271. e = mathfloor(y.e / LOG_BASE);
  27272. xe = mathfloor(x.e / LOG_BASE);
  27273. xd = xd.slice();
  27274. k = xe - e;
  27275. // If base 1e7 exponents differ...
  27276. if (k) {
  27277. xLTy = k < 0;
  27278. if (xLTy) {
  27279. d = xd;
  27280. k = -k;
  27281. len = yd.length;
  27282. } else {
  27283. d = yd;
  27284. e = xe;
  27285. len = xd.length;
  27286. }
  27287. // Numbers with massively different exponents would result in a very high number of
  27288. // zeros needing to be prepended, but this can be avoided while still ensuring correct
  27289. // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.
  27290. i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;
  27291. if (k > i) {
  27292. k = i;
  27293. d.length = 1;
  27294. }
  27295. // Prepend zeros to equalise exponents.
  27296. d.reverse();
  27297. for (i = k; i--;) d.push(0);
  27298. d.reverse();
  27299. // Base 1e7 exponents equal.
  27300. } else {
  27301. // Check digits to determine which is the bigger number.
  27302. i = xd.length;
  27303. len = yd.length;
  27304. xLTy = i < len;
  27305. if (xLTy) len = i;
  27306. for (i = 0; i < len; i++) {
  27307. if (xd[i] != yd[i]) {
  27308. xLTy = xd[i] < yd[i];
  27309. break;
  27310. }
  27311. }
  27312. k = 0;
  27313. }
  27314. if (xLTy) {
  27315. d = xd;
  27316. xd = yd;
  27317. yd = d;
  27318. y.s = -y.s;
  27319. }
  27320. len = xd.length;
  27321. // Append zeros to `xd` if shorter.
  27322. // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.
  27323. for (i = yd.length - len; i > 0; --i) xd[len++] = 0;
  27324. // Subtract yd from xd.
  27325. for (i = yd.length; i > k;) {
  27326. if (xd[--i] < yd[i]) {
  27327. for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;
  27328. --xd[j];
  27329. xd[i] += BASE;
  27330. }
  27331. xd[i] -= yd[i];
  27332. }
  27333. // Remove trailing zeros.
  27334. for (; xd[--len] === 0;) xd.pop();
  27335. // Remove leading zeros and adjust exponent accordingly.
  27336. for (; xd[0] === 0; xd.shift()) --e;
  27337. // Zero?
  27338. if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);
  27339. y.d = xd;
  27340. y.e = getBase10Exponent(xd, e);
  27341. return external ? finalise(y, pr, rm) : y;
  27342. };
  27343. /*
  27344. * n % 0 = N
  27345. * n % N = N
  27346. * n % I = n
  27347. * 0 % n = 0
  27348. * -0 % n = -0
  27349. * 0 % 0 = N
  27350. * 0 % N = N
  27351. * 0 % I = 0
  27352. * N % n = N
  27353. * N % 0 = N
  27354. * N % N = N
  27355. * N % I = N
  27356. * I % n = N
  27357. * I % 0 = N
  27358. * I % N = N
  27359. * I % I = N
  27360. *
  27361. * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to
  27362. * `precision` significant digits using rounding mode `rounding`.
  27363. *
  27364. * The result depends on the modulo mode.
  27365. *
  27366. */
  27367. P.modulo = P.mod = function (y) {
  27368. var q,
  27369. x = this,
  27370. Ctor = x.constructor;
  27371. y = new Ctor(y);
  27372. // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.
  27373. if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);
  27374. // Return x if y is ±Infinity or x is ±0.
  27375. if (!y.d || x.d && !x.d[0]) {
  27376. return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);
  27377. }
  27378. // Prevent rounding of intermediate calculations.
  27379. external = false;
  27380. if (Ctor.modulo == 9) {
  27381. // Euclidian division: q = sign(y) * floor(x / abs(y))
  27382. // result = x - q * y where 0 <= result < abs(y)
  27383. q = divide(x, y.abs(), 0, 3, 1);
  27384. q.s *= y.s;
  27385. } else {
  27386. q = divide(x, y, 0, Ctor.modulo, 1);
  27387. }
  27388. q = q.times(y);
  27389. external = true;
  27390. return x.minus(q);
  27391. };
  27392. /*
  27393. * Return a new Decimal whose value is the natural exponential of the value of this Decimal,
  27394. * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`
  27395. * significant digits using rounding mode `rounding`.
  27396. *
  27397. */
  27398. P.naturalExponential = P.exp = function () {
  27399. return naturalExponential(this);
  27400. };
  27401. /*
  27402. * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,
  27403. * rounded to `precision` significant digits using rounding mode `rounding`.
  27404. *
  27405. */
  27406. P.naturalLogarithm = P.ln = function () {
  27407. return naturalLogarithm(this);
  27408. };
  27409. /*
  27410. * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by
  27411. * -1.
  27412. *
  27413. */
  27414. P.negated = P.neg = function () {
  27415. var x = new this.constructor(this);
  27416. x.s = -x.s;
  27417. return finalise(x);
  27418. };
  27419. /*
  27420. * n + 0 = n
  27421. * n + N = N
  27422. * n + I = I
  27423. * 0 + n = n
  27424. * 0 + 0 = 0
  27425. * 0 + N = N
  27426. * 0 + I = I
  27427. * N + n = N
  27428. * N + 0 = N
  27429. * N + N = N
  27430. * N + I = N
  27431. * I + n = I
  27432. * I + 0 = I
  27433. * I + N = N
  27434. * I + I = I
  27435. *
  27436. * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`
  27437. * significant digits using rounding mode `rounding`.
  27438. *
  27439. */
  27440. P.plus = P.add = function (y) {
  27441. var carry, d, e, i, k, len, pr, rm, xd, yd,
  27442. x = this,
  27443. Ctor = x.constructor;
  27444. y = new Ctor(y);
  27445. // If either is not finite...
  27446. if (!x.d || !y.d) {
  27447. // Return NaN if either is NaN.
  27448. if (!x.s || !y.s) y = new Ctor(NaN);
  27449. // Return x if y is finite and x is ±Infinity.
  27450. // Return x if both are ±Infinity with the same sign.
  27451. // Return NaN if both are ±Infinity with different signs.
  27452. // Return y if x is finite and y is ±Infinity.
  27453. else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);
  27454. return y;
  27455. }
  27456. // If signs differ...
  27457. if (x.s != y.s) {
  27458. y.s = -y.s;
  27459. return x.minus(y);
  27460. }
  27461. xd = x.d;
  27462. yd = y.d;
  27463. pr = Ctor.precision;
  27464. rm = Ctor.rounding;
  27465. // If either is zero...
  27466. if (!xd[0] || !yd[0]) {
  27467. // Return x if y is zero.
  27468. // Return y if y is non-zero.
  27469. if (!yd[0]) y = new Ctor(x);
  27470. return external ? finalise(y, pr, rm) : y;
  27471. }
  27472. // x and y are finite, non-zero numbers with the same sign.
  27473. // Calculate base 1e7 exponents.
  27474. k = mathfloor(x.e / LOG_BASE);
  27475. e = mathfloor(y.e / LOG_BASE);
  27476. xd = xd.slice();
  27477. i = k - e;
  27478. // If base 1e7 exponents differ...
  27479. if (i) {
  27480. if (i < 0) {
  27481. d = xd;
  27482. i = -i;
  27483. len = yd.length;
  27484. } else {
  27485. d = yd;
  27486. e = k;
  27487. len = xd.length;
  27488. }
  27489. // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.
  27490. k = Math.ceil(pr / LOG_BASE);
  27491. len = k > len ? k + 1 : len + 1;
  27492. if (i > len) {
  27493. i = len;
  27494. d.length = 1;
  27495. }
  27496. // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.
  27497. d.reverse();
  27498. for (; i--;) d.push(0);
  27499. d.reverse();
  27500. }
  27501. len = xd.length;
  27502. i = yd.length;
  27503. // If yd is longer than xd, swap xd and yd so xd points to the longer array.
  27504. if (len - i < 0) {
  27505. i = len;
  27506. d = yd;
  27507. yd = xd;
  27508. xd = d;
  27509. }
  27510. // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.
  27511. for (carry = 0; i;) {
  27512. carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;
  27513. xd[i] %= BASE;
  27514. }
  27515. if (carry) {
  27516. xd.unshift(carry);
  27517. ++e;
  27518. }
  27519. // Remove trailing zeros.
  27520. // No need to check for zero, as +x + +y != 0 && -x + -y != 0
  27521. for (len = xd.length; xd[--len] == 0;) xd.pop();
  27522. y.d = xd;
  27523. y.e = getBase10Exponent(xd, e);
  27524. return external ? finalise(y, pr, rm) : y;
  27525. };
  27526. /*
  27527. * Return the number of significant digits of the value of this Decimal.
  27528. *
  27529. * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.
  27530. *
  27531. */
  27532. P.precision = P.sd = function (z) {
  27533. var k,
  27534. x = this;
  27535. if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);
  27536. if (x.d) {
  27537. k = getPrecision(x.d);
  27538. if (z && x.e + 1 > k) k = x.e + 1;
  27539. } else {
  27540. k = NaN;
  27541. }
  27542. return k;
  27543. };
  27544. /*
  27545. * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using
  27546. * rounding mode `rounding`.
  27547. *
  27548. */
  27549. P.round = function () {
  27550. var x = this,
  27551. Ctor = x.constructor;
  27552. return finalise(new Ctor(x), x.e + 1, Ctor.rounding);
  27553. };
  27554. /*
  27555. * Return a new Decimal whose value is the sine of the value in radians of this Decimal.
  27556. *
  27557. * Domain: [-Infinity, Infinity]
  27558. * Range: [-1, 1]
  27559. *
  27560. * sin(x) = x - x^3/3! + x^5/5! - ...
  27561. *
  27562. * sin(0) = 0
  27563. * sin(-0) = -0
  27564. * sin(Infinity) = NaN
  27565. * sin(-Infinity) = NaN
  27566. * sin(NaN) = NaN
  27567. *
  27568. */
  27569. P.sine = P.sin = function () {
  27570. var pr, rm,
  27571. x = this,
  27572. Ctor = x.constructor;
  27573. if (!x.isFinite()) return new Ctor(NaN);
  27574. if (x.isZero()) return new Ctor(x);
  27575. pr = Ctor.precision;
  27576. rm = Ctor.rounding;
  27577. Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;
  27578. Ctor.rounding = 1;
  27579. x = sine(Ctor, toLessThanHalfPi(Ctor, x));
  27580. Ctor.precision = pr;
  27581. Ctor.rounding = rm;
  27582. return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);
  27583. };
  27584. /*
  27585. * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`
  27586. * significant digits using rounding mode `rounding`.
  27587. *
  27588. * sqrt(-n) = N
  27589. * sqrt(N) = N
  27590. * sqrt(-I) = N
  27591. * sqrt(I) = I
  27592. * sqrt(0) = 0
  27593. * sqrt(-0) = -0
  27594. *
  27595. */
  27596. P.squareRoot = P.sqrt = function () {
  27597. var m, n, sd, r, rep, t,
  27598. x = this,
  27599. d = x.d,
  27600. e = x.e,
  27601. s = x.s,
  27602. Ctor = x.constructor;
  27603. // Negative/NaN/Infinity/zero?
  27604. if (s !== 1 || !d || !d[0]) {
  27605. return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);
  27606. }
  27607. external = false;
  27608. // Initial estimate.
  27609. s = Math.sqrt(+x);
  27610. // Math.sqrt underflow/overflow?
  27611. // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
  27612. if (s == 0 || s == 1 / 0) {
  27613. n = digitsToString(d);
  27614. if ((n.length + e) % 2 == 0) n += '0';
  27615. s = Math.sqrt(n);
  27616. e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);
  27617. if (s == 1 / 0) {
  27618. n = '5e' + e;
  27619. } else {
  27620. n = s.toExponential();
  27621. n = n.slice(0, n.indexOf('e') + 1) + e;
  27622. }
  27623. r = new Ctor(n);
  27624. } else {
  27625. r = new Ctor(s.toString());
  27626. }
  27627. sd = (e = Ctor.precision) + 3;
  27628. // Newton-Raphson iteration.
  27629. for (;;) {
  27630. t = r;
  27631. r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);
  27632. // TODO? Replace with for-loop and checkRoundingDigits.
  27633. if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {
  27634. n = n.slice(sd - 3, sd + 1);
  27635. // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or
  27636. // 4999, i.e. approaching a rounding boundary, continue the iteration.
  27637. if (n == '9999' || !rep && n == '4999') {
  27638. // On the first iteration only, check to see if rounding up gives the exact result as the
  27639. // nines may infinitely repeat.
  27640. if (!rep) {
  27641. finalise(t, e + 1, 0);
  27642. if (t.times(t).eq(x)) {
  27643. r = t;
  27644. break;
  27645. }
  27646. }
  27647. sd += 4;
  27648. rep = 1;
  27649. } else {
  27650. // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.
  27651. // If not, then there are further digits and m will be truthy.
  27652. if (!+n || !+n.slice(1) && n.charAt(0) == '5') {
  27653. // Truncate to the first rounding digit.
  27654. finalise(r, e + 1, 1);
  27655. m = !r.times(r).eq(x);
  27656. }
  27657. break;
  27658. }
  27659. }
  27660. }
  27661. external = true;
  27662. return finalise(r, e, Ctor.rounding, m);
  27663. };
  27664. /*
  27665. * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.
  27666. *
  27667. * Domain: [-Infinity, Infinity]
  27668. * Range: [-Infinity, Infinity]
  27669. *
  27670. * tan(0) = 0
  27671. * tan(-0) = -0
  27672. * tan(Infinity) = NaN
  27673. * tan(-Infinity) = NaN
  27674. * tan(NaN) = NaN
  27675. *
  27676. */
  27677. P.tangent = P.tan = function () {
  27678. var pr, rm,
  27679. x = this,
  27680. Ctor = x.constructor;
  27681. if (!x.isFinite()) return new Ctor(NaN);
  27682. if (x.isZero()) return new Ctor(x);
  27683. pr = Ctor.precision;
  27684. rm = Ctor.rounding;
  27685. Ctor.precision = pr + 10;
  27686. Ctor.rounding = 1;
  27687. x = x.sin();
  27688. x.s = 1;
  27689. x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);
  27690. Ctor.precision = pr;
  27691. Ctor.rounding = rm;
  27692. return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);
  27693. };
  27694. /*
  27695. * n * 0 = 0
  27696. * n * N = N
  27697. * n * I = I
  27698. * 0 * n = 0
  27699. * 0 * 0 = 0
  27700. * 0 * N = N
  27701. * 0 * I = N
  27702. * N * n = N
  27703. * N * 0 = N
  27704. * N * N = N
  27705. * N * I = N
  27706. * I * n = I
  27707. * I * 0 = N
  27708. * I * N = N
  27709. * I * I = I
  27710. *
  27711. * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant
  27712. * digits using rounding mode `rounding`.
  27713. *
  27714. */
  27715. P.times = P.mul = function (y) {
  27716. var carry, e, i, k, r, rL, t, xdL, ydL,
  27717. x = this,
  27718. Ctor = x.constructor,
  27719. xd = x.d,
  27720. yd = (y = new Ctor(y)).d;
  27721. y.s *= x.s;
  27722. // If either is NaN, ±Infinity or ±0...
  27723. if (!xd || !xd[0] || !yd || !yd[0]) {
  27724. return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd
  27725. // Return NaN if either is NaN.
  27726. // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.
  27727. ? NaN
  27728. // Return ±Infinity if either is ±Infinity.
  27729. // Return ±0 if either is ±0.
  27730. : !xd || !yd ? y.s / 0 : y.s * 0);
  27731. }
  27732. e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);
  27733. xdL = xd.length;
  27734. ydL = yd.length;
  27735. // Ensure xd points to the longer array.
  27736. if (xdL < ydL) {
  27737. r = xd;
  27738. xd = yd;
  27739. yd = r;
  27740. rL = xdL;
  27741. xdL = ydL;
  27742. ydL = rL;
  27743. }
  27744. // Initialise the result array with zeros.
  27745. r = [];
  27746. rL = xdL + ydL;
  27747. for (i = rL; i--;) r.push(0);
  27748. // Multiply!
  27749. for (i = ydL; --i >= 0;) {
  27750. carry = 0;
  27751. for (k = xdL + i; k > i;) {
  27752. t = r[k] + yd[i] * xd[k - i - 1] + carry;
  27753. r[k--] = t % BASE | 0;
  27754. carry = t / BASE | 0;
  27755. }
  27756. r[k] = (r[k] + carry) % BASE | 0;
  27757. }
  27758. // Remove trailing zeros.
  27759. for (; !r[--rL];) r.pop();
  27760. if (carry) ++e;
  27761. else r.shift();
  27762. y.d = r;
  27763. y.e = getBase10Exponent(r, e);
  27764. return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;
  27765. };
  27766. /*
  27767. * Return a string representing the value of this Decimal in base 2, round to `sd` significant
  27768. * digits using rounding mode `rm`.
  27769. *
  27770. * If the optional `sd` argument is present then return binary exponential notation.
  27771. *
  27772. * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
  27773. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  27774. *
  27775. */
  27776. P.toBinary = function (sd, rm) {
  27777. return toStringBinary(this, 2, sd, rm);
  27778. };
  27779. /*
  27780. * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`
  27781. * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.
  27782. *
  27783. * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.
  27784. *
  27785. * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
  27786. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  27787. *
  27788. */
  27789. P.toDecimalPlaces = P.toDP = function (dp, rm) {
  27790. var x = this,
  27791. Ctor = x.constructor;
  27792. x = new Ctor(x);
  27793. if (dp === void 0) return x;
  27794. checkInt32(dp, 0, MAX_DIGITS);
  27795. if (rm === void 0) rm = Ctor.rounding;
  27796. else checkInt32(rm, 0, 8);
  27797. return finalise(x, dp + x.e + 1, rm);
  27798. };
  27799. /*
  27800. * Return a string representing the value of this Decimal in exponential notation rounded to
  27801. * `dp` fixed decimal places using rounding mode `rounding`.
  27802. *
  27803. * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
  27804. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  27805. *
  27806. */
  27807. P.toExponential = function (dp, rm) {
  27808. var str,
  27809. x = this,
  27810. Ctor = x.constructor;
  27811. if (dp === void 0) {
  27812. str = finiteToString(x, true);
  27813. } else {
  27814. checkInt32(dp, 0, MAX_DIGITS);
  27815. if (rm === void 0) rm = Ctor.rounding;
  27816. else checkInt32(rm, 0, 8);
  27817. x = finalise(new Ctor(x), dp + 1, rm);
  27818. str = finiteToString(x, true, dp + 1);
  27819. }
  27820. return x.isNeg() && !x.isZero() ? '-' + str : str;
  27821. };
  27822. /*
  27823. * Return a string representing the value of this Decimal in normal (fixed-point) notation to
  27824. * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is
  27825. * omitted.
  27826. *
  27827. * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.
  27828. *
  27829. * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.
  27830. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  27831. *
  27832. * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.
  27833. * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.
  27834. * (-0).toFixed(3) is '0.000'.
  27835. * (-0.5).toFixed(0) is '-0'.
  27836. *
  27837. */
  27838. P.toFixed = function (dp, rm) {
  27839. var str, y,
  27840. x = this,
  27841. Ctor = x.constructor;
  27842. if (dp === void 0) {
  27843. str = finiteToString(x);
  27844. } else {
  27845. checkInt32(dp, 0, MAX_DIGITS);
  27846. if (rm === void 0) rm = Ctor.rounding;
  27847. else checkInt32(rm, 0, 8);
  27848. y = finalise(new Ctor(x), dp + x.e + 1, rm);
  27849. str = finiteToString(y, false, dp + y.e + 1);
  27850. }
  27851. // To determine whether to add the minus sign look at the value before it was rounded,
  27852. // i.e. look at `x` rather than `y`.
  27853. return x.isNeg() && !x.isZero() ? '-' + str : str;
  27854. };
  27855. /*
  27856. * Return an array representing the value of this Decimal as a simple fraction with an integer
  27857. * numerator and an integer denominator.
  27858. *
  27859. * The denominator will be a positive non-zero value less than or equal to the specified maximum
  27860. * denominator. If a maximum denominator is not specified, the denominator will be the lowest
  27861. * value necessary to represent the number exactly.
  27862. *
  27863. * [maxD] {number|string|Decimal} Maximum denominator. Integer >= 1 and < Infinity.
  27864. *
  27865. */
  27866. P.toFraction = function (maxD) {
  27867. var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,
  27868. x = this,
  27869. xd = x.d,
  27870. Ctor = x.constructor;
  27871. if (!xd) return new Ctor(x);
  27872. n1 = d0 = new Ctor(1);
  27873. d1 = n0 = new Ctor(0);
  27874. d = new Ctor(d1);
  27875. e = d.e = getPrecision(xd) - x.e - 1;
  27876. k = e % LOG_BASE;
  27877. d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);
  27878. if (maxD == null) {
  27879. // d is 10**e, the minimum max-denominator needed.
  27880. maxD = e > 0 ? d : n1;
  27881. } else {
  27882. n = new Ctor(maxD);
  27883. if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);
  27884. maxD = n.gt(d) ? (e > 0 ? d : n1) : n;
  27885. }
  27886. external = false;
  27887. n = new Ctor(digitsToString(xd));
  27888. pr = Ctor.precision;
  27889. Ctor.precision = e = xd.length * LOG_BASE * 2;
  27890. for (;;) {
  27891. q = divide(n, d, 0, 1, 1);
  27892. d2 = d0.plus(q.times(d1));
  27893. if (d2.cmp(maxD) == 1) break;
  27894. d0 = d1;
  27895. d1 = d2;
  27896. d2 = n1;
  27897. n1 = n0.plus(q.times(d2));
  27898. n0 = d2;
  27899. d2 = d;
  27900. d = n.minus(q.times(d2));
  27901. n = d2;
  27902. }
  27903. d2 = divide(maxD.minus(d0), d1, 0, 1, 1);
  27904. n0 = n0.plus(d2.times(n1));
  27905. d0 = d0.plus(d2.times(d1));
  27906. n0.s = n1.s = x.s;
  27907. // Determine which fraction is closer to x, n0/d0 or n1/d1?
  27908. r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1
  27909. ? [n1, d1] : [n0, d0];
  27910. Ctor.precision = pr;
  27911. external = true;
  27912. return r;
  27913. };
  27914. /*
  27915. * Return a string representing the value of this Decimal in base 16, round to `sd` significant
  27916. * digits using rounding mode `rm`.
  27917. *
  27918. * If the optional `sd` argument is present then return binary exponential notation.
  27919. *
  27920. * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
  27921. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  27922. *
  27923. */
  27924. P.toHexadecimal = P.toHex = function (sd, rm) {
  27925. return toStringBinary(this, 16, sd, rm);
  27926. };
  27927. /*
  27928. * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding
  27929. * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.
  27930. *
  27931. * The return value will always have the same sign as this Decimal, unless either this Decimal
  27932. * or `y` is NaN, in which case the return value will be also be NaN.
  27933. *
  27934. * The return value is not affected by the value of `precision`.
  27935. *
  27936. * y {number|string|Decimal} The magnitude to round to a multiple of.
  27937. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  27938. *
  27939. * 'toNearest() rounding mode not an integer: {rm}'
  27940. * 'toNearest() rounding mode out of range: {rm}'
  27941. *
  27942. */
  27943. P.toNearest = function (y, rm) {
  27944. var x = this,
  27945. Ctor = x.constructor;
  27946. x = new Ctor(x);
  27947. if (y == null) {
  27948. // If x is not finite, return x.
  27949. if (!x.d) return x;
  27950. y = new Ctor(1);
  27951. rm = Ctor.rounding;
  27952. } else {
  27953. y = new Ctor(y);
  27954. if (rm === void 0) {
  27955. rm = Ctor.rounding;
  27956. } else {
  27957. checkInt32(rm, 0, 8);
  27958. }
  27959. // If x is not finite, return x if y is not NaN, else NaN.
  27960. if (!x.d) return y.s ? x : y;
  27961. // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.
  27962. if (!y.d) {
  27963. if (y.s) y.s = x.s;
  27964. return y;
  27965. }
  27966. }
  27967. // If y is not zero, calculate the nearest multiple of y to x.
  27968. if (y.d[0]) {
  27969. external = false;
  27970. x = divide(x, y, 0, rm, 1).times(y);
  27971. external = true;
  27972. finalise(x);
  27973. // If y is zero, return zero with the sign of x.
  27974. } else {
  27975. y.s = x.s;
  27976. x = y;
  27977. }
  27978. return x;
  27979. };
  27980. /*
  27981. * Return the value of this Decimal converted to a number primitive.
  27982. * Zero keeps its sign.
  27983. *
  27984. */
  27985. P.toNumber = function () {
  27986. return +this;
  27987. };
  27988. /*
  27989. * Return a string representing the value of this Decimal in base 8, round to `sd` significant
  27990. * digits using rounding mode `rm`.
  27991. *
  27992. * If the optional `sd` argument is present then return binary exponential notation.
  27993. *
  27994. * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
  27995. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  27996. *
  27997. */
  27998. P.toOctal = function (sd, rm) {
  27999. return toStringBinary(this, 8, sd, rm);
  28000. };
  28001. /*
  28002. * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded
  28003. * to `precision` significant digits using rounding mode `rounding`.
  28004. *
  28005. * ECMAScript compliant.
  28006. *
  28007. * pow(x, NaN) = NaN
  28008. * pow(x, ±0) = 1
  28009. * pow(NaN, non-zero) = NaN
  28010. * pow(abs(x) > 1, +Infinity) = +Infinity
  28011. * pow(abs(x) > 1, -Infinity) = +0
  28012. * pow(abs(x) == 1, ±Infinity) = NaN
  28013. * pow(abs(x) < 1, +Infinity) = +0
  28014. * pow(abs(x) < 1, -Infinity) = +Infinity
  28015. * pow(+Infinity, y > 0) = +Infinity
  28016. * pow(+Infinity, y < 0) = +0
  28017. * pow(-Infinity, odd integer > 0) = -Infinity
  28018. * pow(-Infinity, even integer > 0) = +Infinity
  28019. * pow(-Infinity, odd integer < 0) = -0
  28020. * pow(-Infinity, even integer < 0) = +0
  28021. * pow(+0, y > 0) = +0
  28022. * pow(+0, y < 0) = +Infinity
  28023. * pow(-0, odd integer > 0) = -0
  28024. * pow(-0, even integer > 0) = +0
  28025. * pow(-0, odd integer < 0) = -Infinity
  28026. * pow(-0, even integer < 0) = +Infinity
  28027. * pow(finite x < 0, finite non-integer) = NaN
  28028. *
  28029. * For non-integer or very large exponents pow(x, y) is calculated using
  28030. *
  28031. * x^y = exp(y*ln(x))
  28032. *
  28033. * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the
  28034. * probability of an incorrectly rounded result
  28035. * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14
  28036. * i.e. 1 in 250,000,000,000,000
  28037. *
  28038. * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).
  28039. *
  28040. * y {number|string|Decimal} The power to which to raise this Decimal.
  28041. *
  28042. */
  28043. P.toPower = P.pow = function (y) {
  28044. var e, k, pr, r, rm, s,
  28045. x = this,
  28046. Ctor = x.constructor,
  28047. yn = +(y = new Ctor(y));
  28048. // Either ±Infinity, NaN or ±0?
  28049. if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));
  28050. x = new Ctor(x);
  28051. if (x.eq(1)) return x;
  28052. pr = Ctor.precision;
  28053. rm = Ctor.rounding;
  28054. if (y.eq(1)) return finalise(x, pr, rm);
  28055. // y exponent
  28056. e = mathfloor(y.e / LOG_BASE);
  28057. // If y is a small integer use the 'exponentiation by squaring' algorithm.
  28058. if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {
  28059. r = intPow(Ctor, x, k, pr);
  28060. return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);
  28061. }
  28062. s = x.s;
  28063. // if x is negative
  28064. if (s < 0) {
  28065. // if y is not an integer
  28066. if (e < y.d.length - 1) return new Ctor(NaN);
  28067. // Result is positive if x is negative and the last digit of integer y is even.
  28068. if ((y.d[e] & 1) == 0) s = 1;
  28069. // if x.eq(-1)
  28070. if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {
  28071. x.s = s;
  28072. return x;
  28073. }
  28074. }
  28075. // Estimate result exponent.
  28076. // x^y = 10^e, where e = y * log10(x)
  28077. // log10(x) = log10(x_significand) + x_exponent
  28078. // log10(x_significand) = ln(x_significand) / ln(10)
  28079. k = mathpow(+x, yn);
  28080. e = k == 0 || !isFinite(k)
  28081. ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))
  28082. : new Ctor(k + '').e;
  28083. // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.
  28084. // Overflow/underflow?
  28085. if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);
  28086. external = false;
  28087. Ctor.rounding = x.s = 1;
  28088. // Estimate the extra guard digits needed to ensure five correct rounding digits from
  28089. // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):
  28090. // new Decimal(2.32456).pow('2087987436534566.46411')
  28091. // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815
  28092. k = Math.min(12, (e + '').length);
  28093. // r = x^y = exp(y*ln(x))
  28094. r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);
  28095. // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)
  28096. if (r.d) {
  28097. // Truncate to the required precision plus five rounding digits.
  28098. r = finalise(r, pr + 5, 1);
  28099. // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate
  28100. // the result.
  28101. if (checkRoundingDigits(r.d, pr, rm)) {
  28102. e = pr + 10;
  28103. // Truncate to the increased precision plus five rounding digits.
  28104. r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);
  28105. // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).
  28106. if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {
  28107. r = finalise(r, pr + 1, 0);
  28108. }
  28109. }
  28110. }
  28111. r.s = s;
  28112. external = true;
  28113. Ctor.rounding = rm;
  28114. return finalise(r, pr, rm);
  28115. };
  28116. /*
  28117. * Return a string representing the value of this Decimal rounded to `sd` significant digits
  28118. * using rounding mode `rounding`.
  28119. *
  28120. * Return exponential notation if `sd` is less than the number of digits necessary to represent
  28121. * the integer part of the value in normal notation.
  28122. *
  28123. * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
  28124. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  28125. *
  28126. */
  28127. P.toPrecision = function (sd, rm) {
  28128. var str,
  28129. x = this,
  28130. Ctor = x.constructor;
  28131. if (sd === void 0) {
  28132. str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);
  28133. } else {
  28134. checkInt32(sd, 1, MAX_DIGITS);
  28135. if (rm === void 0) rm = Ctor.rounding;
  28136. else checkInt32(rm, 0, 8);
  28137. x = finalise(new Ctor(x), sd, rm);
  28138. str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);
  28139. }
  28140. return x.isNeg() && !x.isZero() ? '-' + str : str;
  28141. };
  28142. /*
  28143. * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`
  28144. * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if
  28145. * omitted.
  28146. *
  28147. * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.
  28148. * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
  28149. *
  28150. * 'toSD() digits out of range: {sd}'
  28151. * 'toSD() digits not an integer: {sd}'
  28152. * 'toSD() rounding mode not an integer: {rm}'
  28153. * 'toSD() rounding mode out of range: {rm}'
  28154. *
  28155. */
  28156. P.toSignificantDigits = P.toSD = function (sd, rm) {
  28157. var x = this,
  28158. Ctor = x.constructor;
  28159. if (sd === void 0) {
  28160. sd = Ctor.precision;
  28161. rm = Ctor.rounding;
  28162. } else {
  28163. checkInt32(sd, 1, MAX_DIGITS);
  28164. if (rm === void 0) rm = Ctor.rounding;
  28165. else checkInt32(rm, 0, 8);
  28166. }
  28167. return finalise(new Ctor(x), sd, rm);
  28168. };
  28169. /*
  28170. * Return a string representing the value of this Decimal.
  28171. *
  28172. * Return exponential notation if this Decimal has a positive exponent equal to or greater than
  28173. * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.
  28174. *
  28175. */
  28176. P.toString = function () {
  28177. var x = this,
  28178. Ctor = x.constructor,
  28179. str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);
  28180. return x.isNeg() && !x.isZero() ? '-' + str : str;
  28181. };
  28182. /*
  28183. * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.
  28184. *
  28185. */
  28186. P.truncated = P.trunc = function () {
  28187. return finalise(new this.constructor(this), this.e + 1, 1);
  28188. };
  28189. /*
  28190. * Return a string representing the value of this Decimal.
  28191. * Unlike `toString`, negative zero will include the minus sign.
  28192. *
  28193. */
  28194. P.valueOf = P.toJSON = function () {
  28195. var x = this,
  28196. Ctor = x.constructor,
  28197. str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);
  28198. return x.isNeg() ? '-' + str : str;
  28199. };
  28200. // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.
  28201. /*
  28202. * digitsToString P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,
  28203. * finiteToString, naturalExponential, naturalLogarithm
  28204. * checkInt32 P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,
  28205. * P.toPrecision, P.toSignificantDigits, toStringBinary, random
  28206. * checkRoundingDigits P.logarithm, P.toPower, naturalExponential, naturalLogarithm
  28207. * convertBase toStringBinary, parseOther
  28208. * cos P.cos
  28209. * divide P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,
  28210. * P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,
  28211. * P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,
  28212. * taylorSeries, atan2, parseOther
  28213. * finalise P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,
  28214. * P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,
  28215. * P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,
  28216. * P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,
  28217. * P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,
  28218. * P.truncated, divide, getLn10, getPi, naturalExponential,
  28219. * naturalLogarithm, ceil, floor, round, trunc
  28220. * finiteToString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,
  28221. * toStringBinary
  28222. * getBase10Exponent P.minus, P.plus, P.times, parseOther
  28223. * getLn10 P.logarithm, naturalLogarithm
  28224. * getPi P.acos, P.asin, P.atan, toLessThanHalfPi, atan2
  28225. * getPrecision P.precision, P.toFraction
  28226. * getZeroString digitsToString, finiteToString
  28227. * intPow P.toPower, parseOther
  28228. * isOdd toLessThanHalfPi
  28229. * maxOrMin max, min
  28230. * naturalExponential P.naturalExponential, P.toPower
  28231. * naturalLogarithm P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,
  28232. * P.toPower, naturalExponential
  28233. * nonFiniteToString finiteToString, toStringBinary
  28234. * parseDecimal Decimal
  28235. * parseOther Decimal
  28236. * sin P.sin
  28237. * taylorSeries P.cosh, P.sinh, cos, sin
  28238. * toLessThanHalfPi P.cos, P.sin
  28239. * toStringBinary P.toBinary, P.toHexadecimal, P.toOctal
  28240. * truncate intPow
  28241. *
  28242. * Throws: P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,
  28243. * naturalLogarithm, config, parseOther, random, Decimal
  28244. */
  28245. function digitsToString(d) {
  28246. var i, k, ws,
  28247. indexOfLastWord = d.length - 1,
  28248. str = '',
  28249. w = d[0];
  28250. if (indexOfLastWord > 0) {
  28251. str += w;
  28252. for (i = 1; i < indexOfLastWord; i++) {
  28253. ws = d[i] + '';
  28254. k = LOG_BASE - ws.length;
  28255. if (k) str += getZeroString(k);
  28256. str += ws;
  28257. }
  28258. w = d[i];
  28259. ws = w + '';
  28260. k = LOG_BASE - ws.length;
  28261. if (k) str += getZeroString(k);
  28262. } else if (w === 0) {
  28263. return '0';
  28264. }
  28265. // Remove trailing zeros of last w.
  28266. for (; w % 10 === 0;) w /= 10;
  28267. return str + w;
  28268. }
  28269. function checkInt32(i, min, max) {
  28270. if (i !== ~~i || i < min || i > max) {
  28271. throw Error(invalidArgument + i);
  28272. }
  28273. }
  28274. /*
  28275. * Check 5 rounding digits if `repeating` is null, 4 otherwise.
  28276. * `repeating == null` if caller is `log` or `pow`,
  28277. * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.
  28278. */
  28279. function checkRoundingDigits(d, i, rm, repeating) {
  28280. var di, k, r, rd;
  28281. // Get the length of the first word of the array d.
  28282. for (k = d[0]; k >= 10; k /= 10) --i;
  28283. // Is the rounding digit in the first word of d?
  28284. if (--i < 0) {
  28285. i += LOG_BASE;
  28286. di = 0;
  28287. } else {
  28288. di = Math.ceil((i + 1) / LOG_BASE);
  28289. i %= LOG_BASE;
  28290. }
  28291. // i is the index (0 - 6) of the rounding digit.
  28292. // E.g. if within the word 3487563 the first rounding digit is 5,
  28293. // then i = 4, k = 1000, rd = 3487563 % 1000 = 563
  28294. k = mathpow(10, LOG_BASE - i);
  28295. rd = d[di] % k | 0;
  28296. if (repeating == null) {
  28297. if (i < 3) {
  28298. if (i == 0) rd = rd / 100 | 0;
  28299. else if (i == 1) rd = rd / 10 | 0;
  28300. r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;
  28301. } else {
  28302. r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&
  28303. (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||
  28304. (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;
  28305. }
  28306. } else {
  28307. if (i < 4) {
  28308. if (i == 0) rd = rd / 1000 | 0;
  28309. else if (i == 1) rd = rd / 100 | 0;
  28310. else if (i == 2) rd = rd / 10 | 0;
  28311. r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;
  28312. } else {
  28313. r = ((repeating || rm < 4) && rd + 1 == k ||
  28314. (!repeating && rm > 3) && rd + 1 == k / 2) &&
  28315. (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;
  28316. }
  28317. }
  28318. return r;
  28319. }
  28320. // Convert string of `baseIn` to an array of numbers of `baseOut`.
  28321. // Eg. convertBase('255', 10, 16) returns [15, 15].
  28322. // Eg. convertBase('ff', 16, 10) returns [2, 5, 5].
  28323. function convertBase(str, baseIn, baseOut) {
  28324. var j,
  28325. arr = [0],
  28326. arrL,
  28327. i = 0,
  28328. strL = str.length;
  28329. for (; i < strL;) {
  28330. for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;
  28331. arr[0] += NUMERALS.indexOf(str.charAt(i++));
  28332. for (j = 0; j < arr.length; j++) {
  28333. if (arr[j] > baseOut - 1) {
  28334. if (arr[j + 1] === void 0) arr[j + 1] = 0;
  28335. arr[j + 1] += arr[j] / baseOut | 0;
  28336. arr[j] %= baseOut;
  28337. }
  28338. }
  28339. }
  28340. return arr.reverse();
  28341. }
  28342. /*
  28343. * cos(x) = 1 - x^2/2! + x^4/4! - ...
  28344. * |x| < pi/2
  28345. *
  28346. */
  28347. function cosine(Ctor, x) {
  28348. var k, len, y;
  28349. if (x.isZero()) return x;
  28350. // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1
  28351. // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1
  28352. // Estimate the optimum number of times to use the argument reduction.
  28353. len = x.d.length;
  28354. if (len < 32) {
  28355. k = Math.ceil(len / 3);
  28356. y = (1 / tinyPow(4, k)).toString();
  28357. } else {
  28358. k = 16;
  28359. y = '2.3283064365386962890625e-10';
  28360. }
  28361. Ctor.precision += k;
  28362. x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));
  28363. // Reverse argument reduction
  28364. for (var i = k; i--;) {
  28365. var cos2x = x.times(x);
  28366. x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);
  28367. }
  28368. Ctor.precision -= k;
  28369. return x;
  28370. }
  28371. /*
  28372. * Perform division in the specified base.
  28373. */
  28374. var divide = (function () {
  28375. // Assumes non-zero x and k, and hence non-zero result.
  28376. function multiplyInteger(x, k, base) {
  28377. var temp,
  28378. carry = 0,
  28379. i = x.length;
  28380. for (x = x.slice(); i--;) {
  28381. temp = x[i] * k + carry;
  28382. x[i] = temp % base | 0;
  28383. carry = temp / base | 0;
  28384. }
  28385. if (carry) x.unshift(carry);
  28386. return x;
  28387. }
  28388. function compare(a, b, aL, bL) {
  28389. var i, r;
  28390. if (aL != bL) {
  28391. r = aL > bL ? 1 : -1;
  28392. } else {
  28393. for (i = r = 0; i < aL; i++) {
  28394. if (a[i] != b[i]) {
  28395. r = a[i] > b[i] ? 1 : -1;
  28396. break;
  28397. }
  28398. }
  28399. }
  28400. return r;
  28401. }
  28402. function subtract(a, b, aL, base) {
  28403. var i = 0;
  28404. // Subtract b from a.
  28405. for (; aL--;) {
  28406. a[aL] -= i;
  28407. i = a[aL] < b[aL] ? 1 : 0;
  28408. a[aL] = i * base + a[aL] - b[aL];
  28409. }
  28410. // Remove leading zeros.
  28411. for (; !a[0] && a.length > 1;) a.shift();
  28412. }
  28413. return function (x, y, pr, rm, dp, base) {
  28414. var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,
  28415. yL, yz,
  28416. Ctor = x.constructor,
  28417. sign = x.s == y.s ? 1 : -1,
  28418. xd = x.d,
  28419. yd = y.d;
  28420. // Either NaN, Infinity or 0?
  28421. if (!xd || !xd[0] || !yd || !yd[0]) {
  28422. return new Ctor(// Return NaN if either NaN, or both Infinity or 0.
  28423. !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :
  28424. // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.
  28425. xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);
  28426. }
  28427. if (base) {
  28428. logBase = 1;
  28429. e = x.e - y.e;
  28430. } else {
  28431. base = BASE;
  28432. logBase = LOG_BASE;
  28433. e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);
  28434. }
  28435. yL = yd.length;
  28436. xL = xd.length;
  28437. q = new Ctor(sign);
  28438. qd = q.d = [];
  28439. // Result exponent may be one less than e.
  28440. // The digit array of a Decimal from toStringBinary may have trailing zeros.
  28441. for (i = 0; yd[i] == (xd[i] || 0); i++);
  28442. if (yd[i] > (xd[i] || 0)) e--;
  28443. if (pr == null) {
  28444. sd = pr = Ctor.precision;
  28445. rm = Ctor.rounding;
  28446. } else if (dp) {
  28447. sd = pr + (x.e - y.e) + 1;
  28448. } else {
  28449. sd = pr;
  28450. }
  28451. if (sd < 0) {
  28452. qd.push(1);
  28453. more = true;
  28454. } else {
  28455. // Convert precision in number of base 10 digits to base 1e7 digits.
  28456. sd = sd / logBase + 2 | 0;
  28457. i = 0;
  28458. // divisor < 1e7
  28459. if (yL == 1) {
  28460. k = 0;
  28461. yd = yd[0];
  28462. sd++;
  28463. // k is the carry.
  28464. for (; (i < xL || k) && sd--; i++) {
  28465. t = k * base + (xd[i] || 0);
  28466. qd[i] = t / yd | 0;
  28467. k = t % yd | 0;
  28468. }
  28469. more = k || i < xL;
  28470. // divisor >= 1e7
  28471. } else {
  28472. // Normalise xd and yd so highest order digit of yd is >= base/2
  28473. k = base / (yd[0] + 1) | 0;
  28474. if (k > 1) {
  28475. yd = multiplyInteger(yd, k, base);
  28476. xd = multiplyInteger(xd, k, base);
  28477. yL = yd.length;
  28478. xL = xd.length;
  28479. }
  28480. xi = yL;
  28481. rem = xd.slice(0, yL);
  28482. remL = rem.length;
  28483. // Add zeros to make remainder as long as divisor.
  28484. for (; remL < yL;) rem[remL++] = 0;
  28485. yz = yd.slice();
  28486. yz.unshift(0);
  28487. yd0 = yd[0];
  28488. if (yd[1] >= base / 2) ++yd0;
  28489. do {
  28490. k = 0;
  28491. // Compare divisor and remainder.
  28492. cmp = compare(yd, rem, yL, remL);
  28493. // If divisor < remainder.
  28494. if (cmp < 0) {
  28495. // Calculate trial digit, k.
  28496. rem0 = rem[0];
  28497. if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);
  28498. // k will be how many times the divisor goes into the current remainder.
  28499. k = rem0 / yd0 | 0;
  28500. // Algorithm:
  28501. // 1. product = divisor * trial digit (k)
  28502. // 2. if product > remainder: product -= divisor, k--
  28503. // 3. remainder -= product
  28504. // 4. if product was < remainder at 2:
  28505. // 5. compare new remainder and divisor
  28506. // 6. If remainder > divisor: remainder -= divisor, k++
  28507. if (k > 1) {
  28508. if (k >= base) k = base - 1;
  28509. // product = divisor * trial digit.
  28510. prod = multiplyInteger(yd, k, base);
  28511. prodL = prod.length;
  28512. remL = rem.length;
  28513. // Compare product and remainder.
  28514. cmp = compare(prod, rem, prodL, remL);
  28515. // product > remainder.
  28516. if (cmp == 1) {
  28517. k--;
  28518. // Subtract divisor from product.
  28519. subtract(prod, yL < prodL ? yz : yd, prodL, base);
  28520. }
  28521. } else {
  28522. // cmp is -1.
  28523. // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1
  28524. // to avoid it. If k is 1 there is a need to compare yd and rem again below.
  28525. if (k == 0) cmp = k = 1;
  28526. prod = yd.slice();
  28527. }
  28528. prodL = prod.length;
  28529. if (prodL < remL) prod.unshift(0);
  28530. // Subtract product from remainder.
  28531. subtract(rem, prod, remL, base);
  28532. // If product was < previous remainder.
  28533. if (cmp == -1) {
  28534. remL = rem.length;
  28535. // Compare divisor and new remainder.
  28536. cmp = compare(yd, rem, yL, remL);
  28537. // If divisor < new remainder, subtract divisor from remainder.
  28538. if (cmp < 1) {
  28539. k++;
  28540. // Subtract divisor from remainder.
  28541. subtract(rem, yL < remL ? yz : yd, remL, base);
  28542. }
  28543. }
  28544. remL = rem.length;
  28545. } else if (cmp === 0) {
  28546. k++;
  28547. rem = [0];
  28548. } // if cmp === 1, k will be 0
  28549. // Add the next digit, k, to the result array.
  28550. qd[i++] = k;
  28551. // Update the remainder.
  28552. if (cmp && rem[0]) {
  28553. rem[remL++] = xd[xi] || 0;
  28554. } else {
  28555. rem = [xd[xi]];
  28556. remL = 1;
  28557. }
  28558. } while ((xi++ < xL || rem[0] !== void 0) && sd--);
  28559. more = rem[0] !== void 0;
  28560. }
  28561. // Leading zero?
  28562. if (!qd[0]) qd.shift();
  28563. }
  28564. // logBase is 1 when divide is being used for base conversion.
  28565. if (logBase == 1) {
  28566. q.e = e;
  28567. inexact = more;
  28568. } else {
  28569. // To calculate q.e, first get the number of digits of qd[0].
  28570. for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;
  28571. q.e = i + e * logBase - 1;
  28572. finalise(q, dp ? pr + q.e + 1 : pr, rm, more);
  28573. }
  28574. return q;
  28575. };
  28576. })();
  28577. /*
  28578. * Round `x` to `sd` significant digits using rounding mode `rm`.
  28579. * Check for over/under-flow.
  28580. */
  28581. function finalise(x, sd, rm, isTruncated) {
  28582. var digits, i, j, k, rd, roundUp, w, xd, xdi,
  28583. Ctor = x.constructor;
  28584. // Don't round if sd is null or undefined.
  28585. out: if (sd != null) {
  28586. xd = x.d;
  28587. // Infinity/NaN.
  28588. if (!xd) return x;
  28589. // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.
  28590. // w: the word of xd containing rd, a base 1e7 number.
  28591. // xdi: the index of w within xd.
  28592. // digits: the number of digits of w.
  28593. // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if
  28594. // they had leading zeros)
  28595. // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).
  28596. // Get the length of the first word of the digits array xd.
  28597. for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;
  28598. i = sd - digits;
  28599. // Is the rounding digit in the first word of xd?
  28600. if (i < 0) {
  28601. i += LOG_BASE;
  28602. j = sd;
  28603. w = xd[xdi = 0];
  28604. // Get the rounding digit at index j of w.
  28605. rd = w / mathpow(10, digits - j - 1) % 10 | 0;
  28606. } else {
  28607. xdi = Math.ceil((i + 1) / LOG_BASE);
  28608. k = xd.length;
  28609. if (xdi >= k) {
  28610. if (isTruncated) {
  28611. // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.
  28612. for (; k++ <= xdi;) xd.push(0);
  28613. w = rd = 0;
  28614. digits = 1;
  28615. i %= LOG_BASE;
  28616. j = i - LOG_BASE + 1;
  28617. } else {
  28618. break out;
  28619. }
  28620. } else {
  28621. w = k = xd[xdi];
  28622. // Get the number of digits of w.
  28623. for (digits = 1; k >= 10; k /= 10) digits++;
  28624. // Get the index of rd within w.
  28625. i %= LOG_BASE;
  28626. // Get the index of rd within w, adjusted for leading zeros.
  28627. // The number of leading zeros of w is given by LOG_BASE - digits.
  28628. j = i - LOG_BASE + digits;
  28629. // Get the rounding digit at index j of w.
  28630. rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;
  28631. }
  28632. }
  28633. // Are there any non-zero digits after the rounding digit?
  28634. isTruncated = isTruncated || sd < 0 ||
  28635. xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));
  28636. // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right
  28637. // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression
  28638. // will give 714.
  28639. roundUp = rm < 4
  28640. ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
  28641. : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&
  28642. // Check whether the digit to the left of the rounding digit is odd.
  28643. ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||
  28644. rm == (x.s < 0 ? 8 : 7));
  28645. if (sd < 1 || !xd[0]) {
  28646. xd.length = 0;
  28647. if (roundUp) {
  28648. // Convert sd to decimal places.
  28649. sd -= x.e + 1;
  28650. // 1, 0.1, 0.01, 0.001, 0.0001 etc.
  28651. xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);
  28652. x.e = -sd || 0;
  28653. } else {
  28654. // Zero.
  28655. xd[0] = x.e = 0;
  28656. }
  28657. return x;
  28658. }
  28659. // Remove excess digits.
  28660. if (i == 0) {
  28661. xd.length = xdi;
  28662. k = 1;
  28663. xdi--;
  28664. } else {
  28665. xd.length = xdi + 1;
  28666. k = mathpow(10, LOG_BASE - i);
  28667. // E.g. 56700 becomes 56000 if 7 is the rounding digit.
  28668. // j > 0 means i > number of leading zeros of w.
  28669. xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;
  28670. }
  28671. if (roundUp) {
  28672. for (;;) {
  28673. // Is the digit to be rounded up in the first word of xd?
  28674. if (xdi == 0) {
  28675. // i will be the length of xd[0] before k is added.
  28676. for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;
  28677. j = xd[0] += k;
  28678. for (k = 1; j >= 10; j /= 10) k++;
  28679. // if i != k the length has increased.
  28680. if (i != k) {
  28681. x.e++;
  28682. if (xd[0] == BASE) xd[0] = 1;
  28683. }
  28684. break;
  28685. } else {
  28686. xd[xdi] += k;
  28687. if (xd[xdi] != BASE) break;
  28688. xd[xdi--] = 0;
  28689. k = 1;
  28690. }
  28691. }
  28692. }
  28693. // Remove trailing zeros.
  28694. for (i = xd.length; xd[--i] === 0;) xd.pop();
  28695. }
  28696. if (external) {
  28697. // Overflow?
  28698. if (x.e > Ctor.maxE) {
  28699. // Infinity.
  28700. x.d = null;
  28701. x.e = NaN;
  28702. // Underflow?
  28703. } else if (x.e < Ctor.minE) {
  28704. // Zero.
  28705. x.e = 0;
  28706. x.d = [0];
  28707. // Ctor.underflow = true;
  28708. } // else Ctor.underflow = false;
  28709. }
  28710. return x;
  28711. }
  28712. function finiteToString(x, isExp, sd) {
  28713. if (!x.isFinite()) return nonFiniteToString(x);
  28714. var k,
  28715. e = x.e,
  28716. str = digitsToString(x.d),
  28717. len = str.length;
  28718. if (isExp) {
  28719. if (sd && (k = sd - len) > 0) {
  28720. str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);
  28721. } else if (len > 1) {
  28722. str = str.charAt(0) + '.' + str.slice(1);
  28723. }
  28724. str = str + (x.e < 0 ? 'e' : 'e+') + x.e;
  28725. } else if (e < 0) {
  28726. str = '0.' + getZeroString(-e - 1) + str;
  28727. if (sd && (k = sd - len) > 0) str += getZeroString(k);
  28728. } else if (e >= len) {
  28729. str += getZeroString(e + 1 - len);
  28730. if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);
  28731. } else {
  28732. if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);
  28733. if (sd && (k = sd - len) > 0) {
  28734. if (e + 1 === len) str += '.';
  28735. str += getZeroString(k);
  28736. }
  28737. }
  28738. return str;
  28739. }
  28740. // Calculate the base 10 exponent from the base 1e7 exponent.
  28741. function getBase10Exponent(digits, e) {
  28742. var w = digits[0];
  28743. // Add the number of digits of the first word of the digits array.
  28744. for ( e *= LOG_BASE; w >= 10; w /= 10) e++;
  28745. return e;
  28746. }
  28747. function getLn10(Ctor, sd, pr) {
  28748. if (sd > LN10_PRECISION) {
  28749. // Reset global state in case the exception is caught.
  28750. external = true;
  28751. if (pr) Ctor.precision = pr;
  28752. throw Error(precisionLimitExceeded);
  28753. }
  28754. return finalise(new Ctor(LN10), sd, 1, true);
  28755. }
  28756. function getPi(Ctor, sd, rm) {
  28757. if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);
  28758. return finalise(new Ctor(PI), sd, rm, true);
  28759. }
  28760. function getPrecision(digits) {
  28761. var w = digits.length - 1,
  28762. len = w * LOG_BASE + 1;
  28763. w = digits[w];
  28764. // If non-zero...
  28765. if (w) {
  28766. // Subtract the number of trailing zeros of the last word.
  28767. for (; w % 10 == 0; w /= 10) len--;
  28768. // Add the number of digits of the first word.
  28769. for (w = digits[0]; w >= 10; w /= 10) len++;
  28770. }
  28771. return len;
  28772. }
  28773. function getZeroString(k) {
  28774. var zs = '';
  28775. for (; k--;) zs += '0';
  28776. return zs;
  28777. }
  28778. /*
  28779. * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an
  28780. * integer of type number.
  28781. *
  28782. * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.
  28783. *
  28784. */
  28785. function intPow(Ctor, x, n, pr) {
  28786. var isTruncated,
  28787. r = new Ctor(1),
  28788. // Max n of 9007199254740991 takes 53 loop iterations.
  28789. // Maximum digits array length; leaves [28, 34] guard digits.
  28790. k = Math.ceil(pr / LOG_BASE + 4);
  28791. external = false;
  28792. for (;;) {
  28793. if (n % 2) {
  28794. r = r.times(x);
  28795. if (truncate(r.d, k)) isTruncated = true;
  28796. }
  28797. n = mathfloor(n / 2);
  28798. if (n === 0) {
  28799. // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.
  28800. n = r.d.length - 1;
  28801. if (isTruncated && r.d[n] === 0) ++r.d[n];
  28802. break;
  28803. }
  28804. x = x.times(x);
  28805. truncate(x.d, k);
  28806. }
  28807. external = true;
  28808. return r;
  28809. }
  28810. function isOdd(n) {
  28811. return n.d[n.d.length - 1] & 1;
  28812. }
  28813. /*
  28814. * Handle `max` and `min`. `ltgt` is 'lt' or 'gt'.
  28815. */
  28816. function maxOrMin(Ctor, args, ltgt) {
  28817. var y,
  28818. x = new Ctor(args[0]),
  28819. i = 0;
  28820. for (; ++i < args.length;) {
  28821. y = new Ctor(args[i]);
  28822. if (!y.s) {
  28823. x = y;
  28824. break;
  28825. } else if (x[ltgt](y)) {
  28826. x = y;
  28827. }
  28828. }
  28829. return x;
  28830. }
  28831. /*
  28832. * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant
  28833. * digits.
  28834. *
  28835. * Taylor/Maclaurin series.
  28836. *
  28837. * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...
  28838. *
  28839. * Argument reduction:
  28840. * Repeat x = x / 32, k += 5, until |x| < 0.1
  28841. * exp(x) = exp(x / 2^k)^(2^k)
  28842. *
  28843. * Previously, the argument was initially reduced by
  28844. * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)
  28845. * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was
  28846. * found to be slower than just dividing repeatedly by 32 as above.
  28847. *
  28848. * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000
  28849. * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000
  28850. * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)
  28851. *
  28852. * exp(Infinity) = Infinity
  28853. * exp(-Infinity) = 0
  28854. * exp(NaN) = NaN
  28855. * exp(±0) = 1
  28856. *
  28857. * exp(x) is non-terminating for any finite, non-zero x.
  28858. *
  28859. * The result will always be correctly rounded.
  28860. *
  28861. */
  28862. function naturalExponential(x, sd) {
  28863. var denominator, guard, j, pow, sum, t, wpr,
  28864. rep = 0,
  28865. i = 0,
  28866. k = 0,
  28867. Ctor = x.constructor,
  28868. rm = Ctor.rounding,
  28869. pr = Ctor.precision;
  28870. // 0/NaN/Infinity?
  28871. if (!x.d || !x.d[0] || x.e > 17) {
  28872. return new Ctor(x.d
  28873. ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0
  28874. : x.s ? x.s < 0 ? 0 : x : 0 / 0);
  28875. }
  28876. if (sd == null) {
  28877. external = false;
  28878. wpr = pr;
  28879. } else {
  28880. wpr = sd;
  28881. }
  28882. t = new Ctor(0.03125);
  28883. // while abs(x) >= 0.1
  28884. while (x.e > -2) {
  28885. // x = x / 2^5
  28886. x = x.times(t);
  28887. k += 5;
  28888. }
  28889. // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision
  28890. // necessary to ensure the first 4 rounding digits are correct.
  28891. guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;
  28892. wpr += guard;
  28893. denominator = pow = sum = new Ctor(1);
  28894. Ctor.precision = wpr;
  28895. for (;;) {
  28896. pow = finalise(pow.times(x), wpr, 1);
  28897. denominator = denominator.times(++i);
  28898. t = sum.plus(divide(pow, denominator, wpr, 1));
  28899. if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {
  28900. j = k;
  28901. while (j--) sum = finalise(sum.times(sum), wpr, 1);
  28902. // Check to see if the first 4 rounding digits are [49]999.
  28903. // If so, repeat the summation with a higher precision, otherwise
  28904. // e.g. with precision: 18, rounding: 1
  28905. // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)
  28906. // `wpr - guard` is the index of first rounding digit.
  28907. if (sd == null) {
  28908. if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {
  28909. Ctor.precision = wpr += 10;
  28910. denominator = pow = t = new Ctor(1);
  28911. i = 0;
  28912. rep++;
  28913. } else {
  28914. return finalise(sum, Ctor.precision = pr, rm, external = true);
  28915. }
  28916. } else {
  28917. Ctor.precision = pr;
  28918. return sum;
  28919. }
  28920. }
  28921. sum = t;
  28922. }
  28923. }
  28924. /*
  28925. * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant
  28926. * digits.
  28927. *
  28928. * ln(-n) = NaN
  28929. * ln(0) = -Infinity
  28930. * ln(-0) = -Infinity
  28931. * ln(1) = 0
  28932. * ln(Infinity) = Infinity
  28933. * ln(-Infinity) = NaN
  28934. * ln(NaN) = NaN
  28935. *
  28936. * ln(n) (n != 1) is non-terminating.
  28937. *
  28938. */
  28939. function naturalLogarithm(y, sd) {
  28940. var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,
  28941. n = 1,
  28942. guard = 10,
  28943. x = y,
  28944. xd = x.d,
  28945. Ctor = x.constructor,
  28946. rm = Ctor.rounding,
  28947. pr = Ctor.precision;
  28948. // Is x negative or Infinity, NaN, 0 or 1?
  28949. if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {
  28950. return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);
  28951. }
  28952. if (sd == null) {
  28953. external = false;
  28954. wpr = pr;
  28955. } else {
  28956. wpr = sd;
  28957. }
  28958. Ctor.precision = wpr += guard;
  28959. c = digitsToString(xd);
  28960. c0 = c.charAt(0);
  28961. if (Math.abs(e = x.e) < 1.5e15) {
  28962. // Argument reduction.
  28963. // The series converges faster the closer the argument is to 1, so using
  28964. // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b
  28965. // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,
  28966. // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can
  28967. // later be divided by this number, then separate out the power of 10 using
  28968. // ln(a*10^b) = ln(a) + b*ln(10).
  28969. // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).
  28970. //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {
  28971. // max n is 6 (gives 0.7 - 1.3)
  28972. while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {
  28973. x = x.times(y);
  28974. c = digitsToString(x.d);
  28975. c0 = c.charAt(0);
  28976. n++;
  28977. }
  28978. e = x.e;
  28979. if (c0 > 1) {
  28980. x = new Ctor('0.' + c);
  28981. e++;
  28982. } else {
  28983. x = new Ctor(c0 + '.' + c.slice(1));
  28984. }
  28985. } else {
  28986. // The argument reduction method above may result in overflow if the argument y is a massive
  28987. // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this
  28988. // function using ln(x*10^e) = ln(x) + e*ln(10).
  28989. t = getLn10(Ctor, wpr + 2, pr).times(e + '');
  28990. x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);
  28991. Ctor.precision = pr;
  28992. return sd == null ? finalise(x, pr, rm, external = true) : x;
  28993. }
  28994. // x1 is x reduced to a value near 1.
  28995. x1 = x;
  28996. // Taylor series.
  28997. // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)
  28998. // where x = (y - 1)/(y + 1) (|x| < 1)
  28999. sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);
  29000. x2 = finalise(x.times(x), wpr, 1);
  29001. denominator = 3;
  29002. for (;;) {
  29003. numerator = finalise(numerator.times(x2), wpr, 1);
  29004. t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));
  29005. if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {
  29006. sum = sum.times(2);
  29007. // Reverse the argument reduction. Check that e is not 0 because, besides preventing an
  29008. // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.
  29009. if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));
  29010. sum = divide(sum, new Ctor(n), wpr, 1);
  29011. // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has
  29012. // been repeated previously) and the first 4 rounding digits 9999?
  29013. // If so, restart the summation with a higher precision, otherwise
  29014. // e.g. with precision: 12, rounding: 1
  29015. // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.
  29016. // `wpr - guard` is the index of first rounding digit.
  29017. if (sd == null) {
  29018. if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {
  29019. Ctor.precision = wpr += guard;
  29020. t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);
  29021. x2 = finalise(x.times(x), wpr, 1);
  29022. denominator = rep = 1;
  29023. } else {
  29024. return finalise(sum, Ctor.precision = pr, rm, external = true);
  29025. }
  29026. } else {
  29027. Ctor.precision = pr;
  29028. return sum;
  29029. }
  29030. }
  29031. sum = t;
  29032. denominator += 2;
  29033. }
  29034. }
  29035. // ±Infinity, NaN.
  29036. function nonFiniteToString(x) {
  29037. // Unsigned.
  29038. return String(x.s * x.s / 0);
  29039. }
  29040. /*
  29041. * Parse the value of a new Decimal `x` from string `str`.
  29042. */
  29043. function parseDecimal(x, str) {
  29044. var e, i, len;
  29045. // Decimal point?
  29046. if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
  29047. // Exponential form?
  29048. if ((i = str.search(/e/i)) > 0) {
  29049. // Determine exponent.
  29050. if (e < 0) e = i;
  29051. e += +str.slice(i + 1);
  29052. str = str.substring(0, i);
  29053. } else if (e < 0) {
  29054. // Integer.
  29055. e = str.length;
  29056. }
  29057. // Determine leading zeros.
  29058. for (i = 0; str.charCodeAt(i) === 48; i++);
  29059. // Determine trailing zeros.
  29060. for (len = str.length; str.charCodeAt(len - 1) === 48; --len);
  29061. str = str.slice(i, len);
  29062. if (str) {
  29063. len -= i;
  29064. x.e = e = e - i - 1;
  29065. x.d = [];
  29066. // Transform base
  29067. // e is the base 10 exponent.
  29068. // i is where to slice str to get the first word of the digits array.
  29069. i = (e + 1) % LOG_BASE;
  29070. if (e < 0) i += LOG_BASE;
  29071. if (i < len) {
  29072. if (i) x.d.push(+str.slice(0, i));
  29073. for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));
  29074. str = str.slice(i);
  29075. i = LOG_BASE - str.length;
  29076. } else {
  29077. i -= len;
  29078. }
  29079. for (; i--;) str += '0';
  29080. x.d.push(+str);
  29081. if (external) {
  29082. // Overflow?
  29083. if (x.e > x.constructor.maxE) {
  29084. // Infinity.
  29085. x.d = null;
  29086. x.e = NaN;
  29087. // Underflow?
  29088. } else if (x.e < x.constructor.minE) {
  29089. // Zero.
  29090. x.e = 0;
  29091. x.d = [0];
  29092. // x.constructor.underflow = true;
  29093. } // else x.constructor.underflow = false;
  29094. }
  29095. } else {
  29096. // Zero.
  29097. x.e = 0;
  29098. x.d = [0];
  29099. }
  29100. return x;
  29101. }
  29102. /*
  29103. * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.
  29104. */
  29105. function parseOther(x, str) {
  29106. var base, Ctor, divisor, i, isFloat, len, p, xd, xe;
  29107. if (str.indexOf('_') > -1) {
  29108. str = str.replace(/(\d)_(?=\d)/g, '$1');
  29109. if (isDecimal.test(str)) return parseDecimal(x, str);
  29110. } else if (str === 'Infinity' || str === 'NaN') {
  29111. if (!+str) x.s = NaN;
  29112. x.e = NaN;
  29113. x.d = null;
  29114. return x;
  29115. }
  29116. if (isHex.test(str)) {
  29117. base = 16;
  29118. str = str.toLowerCase();
  29119. } else if (isBinary.test(str)) {
  29120. base = 2;
  29121. } else if (isOctal.test(str)) {
  29122. base = 8;
  29123. } else {
  29124. throw Error(invalidArgument + str);
  29125. }
  29126. // Is there a binary exponent part?
  29127. i = str.search(/p/i);
  29128. if (i > 0) {
  29129. p = +str.slice(i + 1);
  29130. str = str.substring(2, i);
  29131. } else {
  29132. str = str.slice(2);
  29133. }
  29134. // Convert `str` as an integer then divide the result by `base` raised to a power such that the
  29135. // fraction part will be restored.
  29136. i = str.indexOf('.');
  29137. isFloat = i >= 0;
  29138. Ctor = x.constructor;
  29139. if (isFloat) {
  29140. str = str.replace('.', '');
  29141. len = str.length;
  29142. i = len - i;
  29143. // log[10](16) = 1.2041... , log[10](88) = 1.9444....
  29144. divisor = intPow(Ctor, new Ctor(base), i, i * 2);
  29145. }
  29146. xd = convertBase(str, base, BASE);
  29147. xe = xd.length - 1;
  29148. // Remove trailing zeros.
  29149. for (i = xe; xd[i] === 0; --i) xd.pop();
  29150. if (i < 0) return new Ctor(x.s * 0);
  29151. x.e = getBase10Exponent(xd, xe);
  29152. x.d = xd;
  29153. external = false;
  29154. // At what precision to perform the division to ensure exact conversion?
  29155. // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)
  29156. // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412
  29157. // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.
  29158. // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount
  29159. // Therefore using 4 * the number of digits of str will always be enough.
  29160. if (isFloat) x = divide(x, divisor, len * 4);
  29161. // Multiply by the binary exponent part if present.
  29162. if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));
  29163. external = true;
  29164. return x;
  29165. }
  29166. /*
  29167. * sin(x) = x - x^3/3! + x^5/5! - ...
  29168. * |x| < pi/2
  29169. *
  29170. */
  29171. function sine(Ctor, x) {
  29172. var k,
  29173. len = x.d.length;
  29174. if (len < 3) {
  29175. return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);
  29176. }
  29177. // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)
  29178. // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)
  29179. // and sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))
  29180. // Estimate the optimum number of times to use the argument reduction.
  29181. k = 1.4 * Math.sqrt(len);
  29182. k = k > 16 ? 16 : k | 0;
  29183. x = x.times(1 / tinyPow(5, k));
  29184. x = taylorSeries(Ctor, 2, x, x);
  29185. // Reverse argument reduction
  29186. var sin2_x,
  29187. d5 = new Ctor(5),
  29188. d16 = new Ctor(16),
  29189. d20 = new Ctor(20);
  29190. for (; k--;) {
  29191. sin2_x = x.times(x);
  29192. x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));
  29193. }
  29194. return x;
  29195. }
  29196. // Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.
  29197. function taylorSeries(Ctor, n, x, y, isHyperbolic) {
  29198. var j, t, u, x2,
  29199. i = 1,
  29200. pr = Ctor.precision,
  29201. k = Math.ceil(pr / LOG_BASE);
  29202. external = false;
  29203. x2 = x.times(x);
  29204. u = new Ctor(y);
  29205. for (;;) {
  29206. t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);
  29207. u = isHyperbolic ? y.plus(t) : y.minus(t);
  29208. y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);
  29209. t = u.plus(y);
  29210. if (t.d[k] !== void 0) {
  29211. for (j = k; t.d[j] === u.d[j] && j--;);
  29212. if (j == -1) break;
  29213. }
  29214. j = u;
  29215. u = y;
  29216. y = t;
  29217. t = j;
  29218. i++;
  29219. }
  29220. external = true;
  29221. t.d.length = k + 1;
  29222. return t;
  29223. }
  29224. // Exponent e must be positive and non-zero.
  29225. function tinyPow(b, e) {
  29226. var n = b;
  29227. while (--e) n *= b;
  29228. return n;
  29229. }
  29230. // Return the absolute value of `x` reduced to less than or equal to half pi.
  29231. function toLessThanHalfPi(Ctor, x) {
  29232. var t,
  29233. isNeg = x.s < 0,
  29234. pi = getPi(Ctor, Ctor.precision, 1),
  29235. halfPi = pi.times(0.5);
  29236. x = x.abs();
  29237. if (x.lte(halfPi)) {
  29238. quadrant = isNeg ? 4 : 1;
  29239. return x;
  29240. }
  29241. t = x.divToInt(pi);
  29242. if (t.isZero()) {
  29243. quadrant = isNeg ? 3 : 2;
  29244. } else {
  29245. x = x.minus(t.times(pi));
  29246. // 0 <= x < pi
  29247. if (x.lte(halfPi)) {
  29248. quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);
  29249. return x;
  29250. }
  29251. quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);
  29252. }
  29253. return x.minus(pi).abs();
  29254. }
  29255. /*
  29256. * Return the value of Decimal `x` as a string in base `baseOut`.
  29257. *
  29258. * If the optional `sd` argument is present include a binary exponent suffix.
  29259. */
  29260. function toStringBinary(x, baseOut, sd, rm) {
  29261. var base, e, i, k, len, roundUp, str, xd, y,
  29262. Ctor = x.constructor,
  29263. isExp = sd !== void 0;
  29264. if (isExp) {
  29265. checkInt32(sd, 1, MAX_DIGITS);
  29266. if (rm === void 0) rm = Ctor.rounding;
  29267. else checkInt32(rm, 0, 8);
  29268. } else {
  29269. sd = Ctor.precision;
  29270. rm = Ctor.rounding;
  29271. }
  29272. if (!x.isFinite()) {
  29273. str = nonFiniteToString(x);
  29274. } else {
  29275. str = finiteToString(x);
  29276. i = str.indexOf('.');
  29277. // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:
  29278. // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))
  29279. // minBinaryExponent = floor(decimalExponent * log[2](10))
  29280. // log[2](10) = 3.321928094887362347870319429489390175864
  29281. if (isExp) {
  29282. base = 2;
  29283. if (baseOut == 16) {
  29284. sd = sd * 4 - 3;
  29285. } else if (baseOut == 8) {
  29286. sd = sd * 3 - 2;
  29287. }
  29288. } else {
  29289. base = baseOut;
  29290. }
  29291. // Convert the number as an integer then divide the result by its base raised to a power such
  29292. // that the fraction part will be restored.
  29293. // Non-integer.
  29294. if (i >= 0) {
  29295. str = str.replace('.', '');
  29296. y = new Ctor(1);
  29297. y.e = str.length - i;
  29298. y.d = convertBase(finiteToString(y), 10, base);
  29299. y.e = y.d.length;
  29300. }
  29301. xd = convertBase(str, 10, base);
  29302. e = len = xd.length;
  29303. // Remove trailing zeros.
  29304. for (; xd[--len] == 0;) xd.pop();
  29305. if (!xd[0]) {
  29306. str = isExp ? '0p+0' : '0';
  29307. } else {
  29308. if (i < 0) {
  29309. e--;
  29310. } else {
  29311. x = new Ctor(x);
  29312. x.d = xd;
  29313. x.e = e;
  29314. x = divide(x, y, sd, rm, 0, base);
  29315. xd = x.d;
  29316. e = x.e;
  29317. roundUp = inexact;
  29318. }
  29319. // The rounding digit, i.e. the digit after the digit that may be rounded up.
  29320. i = xd[sd];
  29321. k = base / 2;
  29322. roundUp = roundUp || xd[sd + 1] !== void 0;
  29323. roundUp = rm < 4
  29324. ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))
  29325. : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||
  29326. rm === (x.s < 0 ? 8 : 7));
  29327. xd.length = sd;
  29328. if (roundUp) {
  29329. // Rounding up may mean the previous digit has to be rounded up and so on.
  29330. for (; ++xd[--sd] > base - 1;) {
  29331. xd[sd] = 0;
  29332. if (!sd) {
  29333. ++e;
  29334. xd.unshift(1);
  29335. }
  29336. }
  29337. }
  29338. // Determine trailing zeros.
  29339. for (len = xd.length; !xd[len - 1]; --len);
  29340. // E.g. [4, 11, 15] becomes 4bf.
  29341. for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);
  29342. // Add binary exponent suffix?
  29343. if (isExp) {
  29344. if (len > 1) {
  29345. if (baseOut == 16 || baseOut == 8) {
  29346. i = baseOut == 16 ? 4 : 3;
  29347. for (--len; len % i; len++) str += '0';
  29348. xd = convertBase(str, base, baseOut);
  29349. for (len = xd.length; !xd[len - 1]; --len);
  29350. // xd[0] will always be be 1
  29351. for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);
  29352. } else {
  29353. str = str.charAt(0) + '.' + str.slice(1);
  29354. }
  29355. }
  29356. str = str + (e < 0 ? 'p' : 'p+') + e;
  29357. } else if (e < 0) {
  29358. for (; ++e;) str = '0' + str;
  29359. str = '0.' + str;
  29360. } else {
  29361. if (++e > len) for (e -= len; e-- ;) str += '0';
  29362. else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);
  29363. }
  29364. }
  29365. str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;
  29366. }
  29367. return x.s < 0 ? '-' + str : str;
  29368. }
  29369. // Does not strip trailing zeros.
  29370. function truncate(arr, len) {
  29371. if (arr.length > len) {
  29372. arr.length = len;
  29373. return true;
  29374. }
  29375. }
  29376. // Decimal methods
  29377. /*
  29378. * abs
  29379. * acos
  29380. * acosh
  29381. * add
  29382. * asin
  29383. * asinh
  29384. * atan
  29385. * atanh
  29386. * atan2
  29387. * cbrt
  29388. * ceil
  29389. * clamp
  29390. * clone
  29391. * config
  29392. * cos
  29393. * cosh
  29394. * div
  29395. * exp
  29396. * floor
  29397. * hypot
  29398. * ln
  29399. * log
  29400. * log2
  29401. * log10
  29402. * max
  29403. * min
  29404. * mod
  29405. * mul
  29406. * pow
  29407. * random
  29408. * round
  29409. * set
  29410. * sign
  29411. * sin
  29412. * sinh
  29413. * sqrt
  29414. * sub
  29415. * sum
  29416. * tan
  29417. * tanh
  29418. * trunc
  29419. */
  29420. /*
  29421. * Return a new Decimal whose value is the absolute value of `x`.
  29422. *
  29423. * x {number|string|Decimal}
  29424. *
  29425. */
  29426. function abs(x) {
  29427. return new this(x).abs();
  29428. }
  29429. /*
  29430. * Return a new Decimal whose value is the arccosine in radians of `x`.
  29431. *
  29432. * x {number|string|Decimal}
  29433. *
  29434. */
  29435. function acos(x) {
  29436. return new this(x).acos();
  29437. }
  29438. /*
  29439. * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to
  29440. * `precision` significant digits using rounding mode `rounding`.
  29441. *
  29442. * x {number|string|Decimal} A value in radians.
  29443. *
  29444. */
  29445. function acosh(x) {
  29446. return new this(x).acosh();
  29447. }
  29448. /*
  29449. * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant
  29450. * digits using rounding mode `rounding`.
  29451. *
  29452. * x {number|string|Decimal}
  29453. * y {number|string|Decimal}
  29454. *
  29455. */
  29456. function add(x, y) {
  29457. return new this(x).plus(y);
  29458. }
  29459. /*
  29460. * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`
  29461. * significant digits using rounding mode `rounding`.
  29462. *
  29463. * x {number|string|Decimal}
  29464. *
  29465. */
  29466. function asin(x) {
  29467. return new this(x).asin();
  29468. }
  29469. /*
  29470. * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to
  29471. * `precision` significant digits using rounding mode `rounding`.
  29472. *
  29473. * x {number|string|Decimal} A value in radians.
  29474. *
  29475. */
  29476. function asinh(x) {
  29477. return new this(x).asinh();
  29478. }
  29479. /*
  29480. * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`
  29481. * significant digits using rounding mode `rounding`.
  29482. *
  29483. * x {number|string|Decimal}
  29484. *
  29485. */
  29486. function atan(x) {
  29487. return new this(x).atan();
  29488. }
  29489. /*
  29490. * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to
  29491. * `precision` significant digits using rounding mode `rounding`.
  29492. *
  29493. * x {number|string|Decimal} A value in radians.
  29494. *
  29495. */
  29496. function atanh(x) {
  29497. return new this(x).atanh();
  29498. }
  29499. /*
  29500. * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi
  29501. * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.
  29502. *
  29503. * Domain: [-Infinity, Infinity]
  29504. * Range: [-pi, pi]
  29505. *
  29506. * y {number|string|Decimal} The y-coordinate.
  29507. * x {number|string|Decimal} The x-coordinate.
  29508. *
  29509. * atan2(±0, -0) = ±pi
  29510. * atan2(±0, +0) = ±0
  29511. * atan2(±0, -x) = ±pi for x > 0
  29512. * atan2(±0, x) = ±0 for x > 0
  29513. * atan2(-y, ±0) = -pi/2 for y > 0
  29514. * atan2(y, ±0) = pi/2 for y > 0
  29515. * atan2(±y, -Infinity) = ±pi for finite y > 0
  29516. * atan2(±y, +Infinity) = ±0 for finite y > 0
  29517. * atan2(±Infinity, x) = ±pi/2 for finite x
  29518. * atan2(±Infinity, -Infinity) = ±3*pi/4
  29519. * atan2(±Infinity, +Infinity) = ±pi/4
  29520. * atan2(NaN, x) = NaN
  29521. * atan2(y, NaN) = NaN
  29522. *
  29523. */
  29524. function atan2(y, x) {
  29525. y = new this(y);
  29526. x = new this(x);
  29527. var r,
  29528. pr = this.precision,
  29529. rm = this.rounding,
  29530. wpr = pr + 4;
  29531. // Either NaN
  29532. if (!y.s || !x.s) {
  29533. r = new this(NaN);
  29534. // Both ±Infinity
  29535. } else if (!y.d && !x.d) {
  29536. r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);
  29537. r.s = y.s;
  29538. // x is ±Infinity or y is ±0
  29539. } else if (!x.d || y.isZero()) {
  29540. r = x.s < 0 ? getPi(this, pr, rm) : new this(0);
  29541. r.s = y.s;
  29542. // y is ±Infinity or x is ±0
  29543. } else if (!y.d || x.isZero()) {
  29544. r = getPi(this, wpr, 1).times(0.5);
  29545. r.s = y.s;
  29546. // Both non-zero and finite
  29547. } else if (x.s < 0) {
  29548. this.precision = wpr;
  29549. this.rounding = 1;
  29550. r = this.atan(divide(y, x, wpr, 1));
  29551. x = getPi(this, wpr, 1);
  29552. this.precision = pr;
  29553. this.rounding = rm;
  29554. r = y.s < 0 ? r.minus(x) : r.plus(x);
  29555. } else {
  29556. r = this.atan(divide(y, x, wpr, 1));
  29557. }
  29558. return r;
  29559. }
  29560. /*
  29561. * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant
  29562. * digits using rounding mode `rounding`.
  29563. *
  29564. * x {number|string|Decimal}
  29565. *
  29566. */
  29567. function cbrt(x) {
  29568. return new this(x).cbrt();
  29569. }
  29570. /*
  29571. * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.
  29572. *
  29573. * x {number|string|Decimal}
  29574. *
  29575. */
  29576. function ceil(x) {
  29577. return finalise(x = new this(x), x.e + 1, 2);
  29578. }
  29579. /*
  29580. * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.
  29581. *
  29582. * x {number|string|Decimal}
  29583. * min {number|string|Decimal}
  29584. * max {number|string|Decimal}
  29585. *
  29586. */
  29587. function clamp(x, min, max) {
  29588. return new this(x).clamp(min, max);
  29589. }
  29590. /*
  29591. * Configure global settings for a Decimal constructor.
  29592. *
  29593. * `obj` is an object with one or more of the following properties,
  29594. *
  29595. * precision {number}
  29596. * rounding {number}
  29597. * toExpNeg {number}
  29598. * toExpPos {number}
  29599. * maxE {number}
  29600. * minE {number}
  29601. * modulo {number}
  29602. * crypto {boolean|number}
  29603. * defaults {true}
  29604. *
  29605. * E.g. Decimal.config({ precision: 20, rounding: 4 })
  29606. *
  29607. */
  29608. function config(obj) {
  29609. if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');
  29610. var i, p, v,
  29611. useDefaults = obj.defaults === true,
  29612. ps = [
  29613. 'precision', 1, MAX_DIGITS,
  29614. 'rounding', 0, 8,
  29615. 'toExpNeg', -EXP_LIMIT, 0,
  29616. 'toExpPos', 0, EXP_LIMIT,
  29617. 'maxE', 0, EXP_LIMIT,
  29618. 'minE', -EXP_LIMIT, 0,
  29619. 'modulo', 0, 9
  29620. ];
  29621. for (i = 0; i < ps.length; i += 3) {
  29622. if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];
  29623. if ((v = obj[p]) !== void 0) {
  29624. if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;
  29625. else throw Error(invalidArgument + p + ': ' + v);
  29626. }
  29627. }
  29628. if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];
  29629. if ((v = obj[p]) !== void 0) {
  29630. if (v === true || v === false || v === 0 || v === 1) {
  29631. if (v) {
  29632. if (typeof crypto != 'undefined' && crypto &&
  29633. (crypto.getRandomValues || crypto.randomBytes)) {
  29634. this[p] = true;
  29635. } else {
  29636. throw Error(cryptoUnavailable);
  29637. }
  29638. } else {
  29639. this[p] = false;
  29640. }
  29641. } else {
  29642. throw Error(invalidArgument + p + ': ' + v);
  29643. }
  29644. }
  29645. return this;
  29646. }
  29647. /*
  29648. * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant
  29649. * digits using rounding mode `rounding`.
  29650. *
  29651. * x {number|string|Decimal} A value in radians.
  29652. *
  29653. */
  29654. function cos(x) {
  29655. return new this(x).cos();
  29656. }
  29657. /*
  29658. * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision
  29659. * significant digits using rounding mode `rounding`.
  29660. *
  29661. * x {number|string|Decimal} A value in radians.
  29662. *
  29663. */
  29664. function cosh(x) {
  29665. return new this(x).cosh();
  29666. }
  29667. /*
  29668. * Create and return a Decimal constructor with the same configuration properties as this Decimal
  29669. * constructor.
  29670. *
  29671. */
  29672. function clone(obj) {
  29673. var i, p, ps;
  29674. /*
  29675. * The Decimal constructor and exported function.
  29676. * Return a new Decimal instance.
  29677. *
  29678. * v {number|string|Decimal} A numeric value.
  29679. *
  29680. */
  29681. function Decimal(v) {
  29682. var e, i, t,
  29683. x = this;
  29684. // Decimal called without new.
  29685. if (!(x instanceof Decimal)) return new Decimal(v);
  29686. // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor
  29687. // which points to Object.
  29688. x.constructor = Decimal;
  29689. // Duplicate.
  29690. if (isDecimalInstance(v)) {
  29691. x.s = v.s;
  29692. if (external) {
  29693. if (!v.d || v.e > Decimal.maxE) {
  29694. // Infinity.
  29695. x.e = NaN;
  29696. x.d = null;
  29697. } else if (v.e < Decimal.minE) {
  29698. // Zero.
  29699. x.e = 0;
  29700. x.d = [0];
  29701. } else {
  29702. x.e = v.e;
  29703. x.d = v.d.slice();
  29704. }
  29705. } else {
  29706. x.e = v.e;
  29707. x.d = v.d ? v.d.slice() : v.d;
  29708. }
  29709. return;
  29710. }
  29711. t = typeof v;
  29712. if (t === 'number') {
  29713. if (v === 0) {
  29714. x.s = 1 / v < 0 ? -1 : 1;
  29715. x.e = 0;
  29716. x.d = [0];
  29717. return;
  29718. }
  29719. if (v < 0) {
  29720. v = -v;
  29721. x.s = -1;
  29722. } else {
  29723. x.s = 1;
  29724. }
  29725. // Fast path for small integers.
  29726. if (v === ~~v && v < 1e7) {
  29727. for (e = 0, i = v; i >= 10; i /= 10) e++;
  29728. if (external) {
  29729. if (e > Decimal.maxE) {
  29730. x.e = NaN;
  29731. x.d = null;
  29732. } else if (e < Decimal.minE) {
  29733. x.e = 0;
  29734. x.d = [0];
  29735. } else {
  29736. x.e = e;
  29737. x.d = [v];
  29738. }
  29739. } else {
  29740. x.e = e;
  29741. x.d = [v];
  29742. }
  29743. return;
  29744. // Infinity, NaN.
  29745. } else if (v * 0 !== 0) {
  29746. if (!v) x.s = NaN;
  29747. x.e = NaN;
  29748. x.d = null;
  29749. return;
  29750. }
  29751. return parseDecimal(x, v.toString());
  29752. } else if (t !== 'string') {
  29753. throw Error(invalidArgument + v);
  29754. }
  29755. // Minus sign?
  29756. if ((i = v.charCodeAt(0)) === 45) {
  29757. v = v.slice(1);
  29758. x.s = -1;
  29759. } else {
  29760. // Plus sign?
  29761. if (i === 43) v = v.slice(1);
  29762. x.s = 1;
  29763. }
  29764. return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);
  29765. }
  29766. Decimal.prototype = P;
  29767. Decimal.ROUND_UP = 0;
  29768. Decimal.ROUND_DOWN = 1;
  29769. Decimal.ROUND_CEIL = 2;
  29770. Decimal.ROUND_FLOOR = 3;
  29771. Decimal.ROUND_HALF_UP = 4;
  29772. Decimal.ROUND_HALF_DOWN = 5;
  29773. Decimal.ROUND_HALF_EVEN = 6;
  29774. Decimal.ROUND_HALF_CEIL = 7;
  29775. Decimal.ROUND_HALF_FLOOR = 8;
  29776. Decimal.EUCLID = 9;
  29777. Decimal.config = Decimal.set = config;
  29778. Decimal.clone = clone;
  29779. Decimal.isDecimal = isDecimalInstance;
  29780. Decimal.abs = abs;
  29781. Decimal.acos = acos;
  29782. Decimal.acosh = acosh; // ES6
  29783. Decimal.add = add;
  29784. Decimal.asin = asin;
  29785. Decimal.asinh = asinh; // ES6
  29786. Decimal.atan = atan;
  29787. Decimal.atanh = atanh; // ES6
  29788. Decimal.atan2 = atan2;
  29789. Decimal.cbrt = cbrt; // ES6
  29790. Decimal.ceil = ceil;
  29791. Decimal.clamp = clamp;
  29792. Decimal.cos = cos;
  29793. Decimal.cosh = cosh; // ES6
  29794. Decimal.div = div;
  29795. Decimal.exp = exp;
  29796. Decimal.floor = floor;
  29797. Decimal.hypot = hypot; // ES6
  29798. Decimal.ln = ln;
  29799. Decimal.log = log;
  29800. Decimal.log10 = log10; // ES6
  29801. Decimal.log2 = log2; // ES6
  29802. Decimal.max = max;
  29803. Decimal.min = min;
  29804. Decimal.mod = mod;
  29805. Decimal.mul = mul;
  29806. Decimal.pow = pow;
  29807. Decimal.random = random;
  29808. Decimal.round = round;
  29809. Decimal.sign = sign; // ES6
  29810. Decimal.sin = sin;
  29811. Decimal.sinh = sinh; // ES6
  29812. Decimal.sqrt = sqrt;
  29813. Decimal.sub = sub;
  29814. Decimal.sum = sum;
  29815. Decimal.tan = tan;
  29816. Decimal.tanh = tanh; // ES6
  29817. Decimal.trunc = trunc; // ES6
  29818. if (obj === void 0) obj = {};
  29819. if (obj) {
  29820. if (obj.defaults !== true) {
  29821. ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];
  29822. for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];
  29823. }
  29824. }
  29825. Decimal.config(obj);
  29826. return Decimal;
  29827. }
  29828. /*
  29829. * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant
  29830. * digits using rounding mode `rounding`.
  29831. *
  29832. * x {number|string|Decimal}
  29833. * y {number|string|Decimal}
  29834. *
  29835. */
  29836. function div(x, y) {
  29837. return new this(x).div(y);
  29838. }
  29839. /*
  29840. * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`
  29841. * significant digits using rounding mode `rounding`.
  29842. *
  29843. * x {number|string|Decimal} The power to which to raise the base of the natural log.
  29844. *
  29845. */
  29846. function exp(x) {
  29847. return new this(x).exp();
  29848. }
  29849. /*
  29850. * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.
  29851. *
  29852. * x {number|string|Decimal}
  29853. *
  29854. */
  29855. function floor(x) {
  29856. return finalise(x = new this(x), x.e + 1, 3);
  29857. }
  29858. /*
  29859. * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,
  29860. * rounded to `precision` significant digits using rounding mode `rounding`.
  29861. *
  29862. * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)
  29863. *
  29864. * arguments {number|string|Decimal}
  29865. *
  29866. */
  29867. function hypot() {
  29868. var i, n,
  29869. t = new this(0);
  29870. external = false;
  29871. for (i = 0; i < arguments.length;) {
  29872. n = new this(arguments[i++]);
  29873. if (!n.d) {
  29874. if (n.s) {
  29875. external = true;
  29876. return new this(1 / 0);
  29877. }
  29878. t = n;
  29879. } else if (t.d) {
  29880. t = t.plus(n.times(n));
  29881. }
  29882. }
  29883. external = true;
  29884. return t.sqrt();
  29885. }
  29886. /*
  29887. * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),
  29888. * otherwise return false.
  29889. *
  29890. */
  29891. function isDecimalInstance(obj) {
  29892. return obj instanceof Decimal || obj && obj.toStringTag === tag || false;
  29893. }
  29894. /*
  29895. * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`
  29896. * significant digits using rounding mode `rounding`.
  29897. *
  29898. * x {number|string|Decimal}
  29899. *
  29900. */
  29901. function ln(x) {
  29902. return new this(x).ln();
  29903. }
  29904. /*
  29905. * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base
  29906. * is specified, rounded to `precision` significant digits using rounding mode `rounding`.
  29907. *
  29908. * log[y](x)
  29909. *
  29910. * x {number|string|Decimal} The argument of the logarithm.
  29911. * y {number|string|Decimal} The base of the logarithm.
  29912. *
  29913. */
  29914. function log(x, y) {
  29915. return new this(x).log(y);
  29916. }
  29917. /*
  29918. * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`
  29919. * significant digits using rounding mode `rounding`.
  29920. *
  29921. * x {number|string|Decimal}
  29922. *
  29923. */
  29924. function log2(x) {
  29925. return new this(x).log(2);
  29926. }
  29927. /*
  29928. * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`
  29929. * significant digits using rounding mode `rounding`.
  29930. *
  29931. * x {number|string|Decimal}
  29932. *
  29933. */
  29934. function log10(x) {
  29935. return new this(x).log(10);
  29936. }
  29937. /*
  29938. * Return a new Decimal whose value is the maximum of the arguments.
  29939. *
  29940. * arguments {number|string|Decimal}
  29941. *
  29942. */
  29943. function max() {
  29944. return maxOrMin(this, arguments, 'lt');
  29945. }
  29946. /*
  29947. * Return a new Decimal whose value is the minimum of the arguments.
  29948. *
  29949. * arguments {number|string|Decimal}
  29950. *
  29951. */
  29952. function min() {
  29953. return maxOrMin(this, arguments, 'gt');
  29954. }
  29955. /*
  29956. * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits
  29957. * using rounding mode `rounding`.
  29958. *
  29959. * x {number|string|Decimal}
  29960. * y {number|string|Decimal}
  29961. *
  29962. */
  29963. function mod(x, y) {
  29964. return new this(x).mod(y);
  29965. }
  29966. /*
  29967. * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant
  29968. * digits using rounding mode `rounding`.
  29969. *
  29970. * x {number|string|Decimal}
  29971. * y {number|string|Decimal}
  29972. *
  29973. */
  29974. function mul(x, y) {
  29975. return new this(x).mul(y);
  29976. }
  29977. /*
  29978. * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision
  29979. * significant digits using rounding mode `rounding`.
  29980. *
  29981. * x {number|string|Decimal} The base.
  29982. * y {number|string|Decimal} The exponent.
  29983. *
  29984. */
  29985. function pow(x, y) {
  29986. return new this(x).pow(y);
  29987. }
  29988. /*
  29989. * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with
  29990. * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros
  29991. * are produced).
  29992. *
  29993. * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.
  29994. *
  29995. */
  29996. function random(sd) {
  29997. var d, e, k, n,
  29998. i = 0,
  29999. r = new this(1),
  30000. rd = [];
  30001. if (sd === void 0) sd = this.precision;
  30002. else checkInt32(sd, 1, MAX_DIGITS);
  30003. k = Math.ceil(sd / LOG_BASE);
  30004. if (!this.crypto) {
  30005. for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;
  30006. // Browsers supporting crypto.getRandomValues.
  30007. } else if (crypto.getRandomValues) {
  30008. d = crypto.getRandomValues(new Uint32Array(k));
  30009. for (; i < k;) {
  30010. n = d[i];
  30011. // 0 <= n < 4294967296
  30012. // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).
  30013. if (n >= 4.29e9) {
  30014. d[i] = crypto.getRandomValues(new Uint32Array(1))[0];
  30015. } else {
  30016. // 0 <= n <= 4289999999
  30017. // 0 <= (n % 1e7) <= 9999999
  30018. rd[i++] = n % 1e7;
  30019. }
  30020. }
  30021. // Node.js supporting crypto.randomBytes.
  30022. } else if (crypto.randomBytes) {
  30023. // buffer
  30024. d = crypto.randomBytes(k *= 4);
  30025. for (; i < k;) {
  30026. // 0 <= n < 2147483648
  30027. n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);
  30028. // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).
  30029. if (n >= 2.14e9) {
  30030. crypto.randomBytes(4).copy(d, i);
  30031. } else {
  30032. // 0 <= n <= 2139999999
  30033. // 0 <= (n % 1e7) <= 9999999
  30034. rd.push(n % 1e7);
  30035. i += 4;
  30036. }
  30037. }
  30038. i = k / 4;
  30039. } else {
  30040. throw Error(cryptoUnavailable);
  30041. }
  30042. k = rd[--i];
  30043. sd %= LOG_BASE;
  30044. // Convert trailing digits to zeros according to sd.
  30045. if (k && sd) {
  30046. n = mathpow(10, LOG_BASE - sd);
  30047. rd[i] = (k / n | 0) * n;
  30048. }
  30049. // Remove trailing words which are zero.
  30050. for (; rd[i] === 0; i--) rd.pop();
  30051. // Zero?
  30052. if (i < 0) {
  30053. e = 0;
  30054. rd = [0];
  30055. } else {
  30056. e = -1;
  30057. // Remove leading words which are zero and adjust exponent accordingly.
  30058. for (; rd[0] === 0; e -= LOG_BASE) rd.shift();
  30059. // Count the digits of the first word of rd to determine leading zeros.
  30060. for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;
  30061. // Adjust the exponent for leading zeros of the first word of rd.
  30062. if (k < LOG_BASE) e -= LOG_BASE - k;
  30063. }
  30064. r.e = e;
  30065. r.d = rd;
  30066. return r;
  30067. }
  30068. /*
  30069. * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.
  30070. *
  30071. * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).
  30072. *
  30073. * x {number|string|Decimal}
  30074. *
  30075. */
  30076. function round(x) {
  30077. return finalise(x = new this(x), x.e + 1, this.rounding);
  30078. }
  30079. /*
  30080. * Return
  30081. * 1 if x > 0,
  30082. * -1 if x < 0,
  30083. * 0 if x is 0,
  30084. * -0 if x is -0,
  30085. * NaN otherwise
  30086. *
  30087. * x {number|string|Decimal}
  30088. *
  30089. */
  30090. function sign(x) {
  30091. x = new this(x);
  30092. return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;
  30093. }
  30094. /*
  30095. * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits
  30096. * using rounding mode `rounding`.
  30097. *
  30098. * x {number|string|Decimal} A value in radians.
  30099. *
  30100. */
  30101. function sin(x) {
  30102. return new this(x).sin();
  30103. }
  30104. /*
  30105. * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`
  30106. * significant digits using rounding mode `rounding`.
  30107. *
  30108. * x {number|string|Decimal} A value in radians.
  30109. *
  30110. */
  30111. function sinh(x) {
  30112. return new this(x).sinh();
  30113. }
  30114. /*
  30115. * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant
  30116. * digits using rounding mode `rounding`.
  30117. *
  30118. * x {number|string|Decimal}
  30119. *
  30120. */
  30121. function sqrt(x) {
  30122. return new this(x).sqrt();
  30123. }
  30124. /*
  30125. * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits
  30126. * using rounding mode `rounding`.
  30127. *
  30128. * x {number|string|Decimal}
  30129. * y {number|string|Decimal}
  30130. *
  30131. */
  30132. function sub(x, y) {
  30133. return new this(x).sub(y);
  30134. }
  30135. /*
  30136. * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`
  30137. * significant digits using rounding mode `rounding`.
  30138. *
  30139. * Only the result is rounded, not the intermediate calculations.
  30140. *
  30141. * arguments {number|string|Decimal}
  30142. *
  30143. */
  30144. function sum() {
  30145. var i = 0,
  30146. args = arguments,
  30147. x = new this(args[i]);
  30148. external = false;
  30149. for (; x.s && ++i < args.length;) x = x.plus(args[i]);
  30150. external = true;
  30151. return finalise(x, this.precision, this.rounding);
  30152. }
  30153. /*
  30154. * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant
  30155. * digits using rounding mode `rounding`.
  30156. *
  30157. * x {number|string|Decimal} A value in radians.
  30158. *
  30159. */
  30160. function tan(x) {
  30161. return new this(x).tan();
  30162. }
  30163. /*
  30164. * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`
  30165. * significant digits using rounding mode `rounding`.
  30166. *
  30167. * x {number|string|Decimal} A value in radians.
  30168. *
  30169. */
  30170. function tanh(x) {
  30171. return new this(x).tanh();
  30172. }
  30173. /*
  30174. * Return a new Decimal whose value is `x` truncated to an integer.
  30175. *
  30176. * x {number|string|Decimal}
  30177. *
  30178. */
  30179. function trunc(x) {
  30180. return finalise(x = new this(x), x.e + 1, 1);
  30181. }
  30182. // Create and configure initial Decimal constructor.
  30183. Decimal = clone(DEFAULTS);
  30184. Decimal.prototype.constructor = Decimal;
  30185. Decimal['default'] = Decimal.Decimal = Decimal;
  30186. // Create the internal constants from their string values.
  30187. LN10 = new Decimal(LN10);
  30188. PI = new Decimal(PI);
  30189. // Export.
  30190. // AMD.
  30191. if (true) {
  30192. !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {
  30193. return Decimal;
  30194. }).call(exports, __webpack_require__, exports, module),
  30195. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  30196. // Node and other environments that support module.exports.
  30197. } else {}
  30198. })(this);
  30199. /***/ }),
  30200. /***/ 4289:
  30201. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  30202. "use strict";
  30203. var keys = __webpack_require__(82215);
  30204. var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
  30205. var toStr = Object.prototype.toString;
  30206. var concat = Array.prototype.concat;
  30207. var origDefineProperty = Object.defineProperty;
  30208. var isFunction = function (fn) {
  30209. return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
  30210. };
  30211. var arePropertyDescriptorsSupported = function () {
  30212. var obj = {};
  30213. try {
  30214. origDefineProperty(obj, 'x', { enumerable: false, value: obj });
  30215. // eslint-disable-next-line no-unused-vars, no-restricted-syntax
  30216. for (var _ in obj) { // jscs:ignore disallowUnusedVariables
  30217. return false;
  30218. }
  30219. return obj.x === obj;
  30220. } catch (e) { /* this is IE 8. */
  30221. return false;
  30222. }
  30223. };
  30224. var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();
  30225. var defineProperty = function (object, name, value, predicate) {
  30226. if (name in object && (!isFunction(predicate) || !predicate())) {
  30227. return;
  30228. }
  30229. if (supportsDescriptors) {
  30230. origDefineProperty(object, name, {
  30231. configurable: true,
  30232. enumerable: false,
  30233. value: value,
  30234. writable: true
  30235. });
  30236. } else {
  30237. object[name] = value;
  30238. }
  30239. };
  30240. var defineProperties = function (object, map) {
  30241. var predicates = arguments.length > 2 ? arguments[2] : {};
  30242. var props = keys(map);
  30243. if (hasSymbols) {
  30244. props = concat.call(props, Object.getOwnPropertySymbols(map));
  30245. }
  30246. for (var i = 0; i < props.length; i += 1) {
  30247. defineProperty(object, props[i], map[props[i]], predicates[props[i]]);
  30248. }
  30249. };
  30250. defineProperties.supportsDescriptors = !!supportsDescriptors;
  30251. module.exports = defineProperties;
  30252. /***/ }),
  30253. /***/ 15251:
  30254. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  30255. "use strict";
  30256. exports.utils = __webpack_require__(11278);
  30257. exports.Cipher = __webpack_require__(55756);
  30258. exports.DES = __webpack_require__(70778);
  30259. exports.CBC = __webpack_require__(39051);
  30260. exports.EDE = __webpack_require__(50651);
  30261. /***/ }),
  30262. /***/ 39051:
  30263. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  30264. "use strict";
  30265. var assert = __webpack_require__(79746);
  30266. var inherits = __webpack_require__(35717);
  30267. var proto = {};
  30268. function CBCState(iv) {
  30269. assert.equal(iv.length, 8, 'Invalid IV length');
  30270. this.iv = new Array(8);
  30271. for (var i = 0; i < this.iv.length; i++)
  30272. this.iv[i] = iv[i];
  30273. }
  30274. function instantiate(Base) {
  30275. function CBC(options) {
  30276. Base.call(this, options);
  30277. this._cbcInit();
  30278. }
  30279. inherits(CBC, Base);
  30280. var keys = Object.keys(proto);
  30281. for (var i = 0; i < keys.length; i++) {
  30282. var key = keys[i];
  30283. CBC.prototype[key] = proto[key];
  30284. }
  30285. CBC.create = function create(options) {
  30286. return new CBC(options);
  30287. };
  30288. return CBC;
  30289. }
  30290. exports.instantiate = instantiate;
  30291. proto._cbcInit = function _cbcInit() {
  30292. var state = new CBCState(this.options.iv);
  30293. this._cbcState = state;
  30294. };
  30295. proto._update = function _update(inp, inOff, out, outOff) {
  30296. var state = this._cbcState;
  30297. var superProto = this.constructor.super_.prototype;
  30298. var iv = state.iv;
  30299. if (this.type === 'encrypt') {
  30300. for (var i = 0; i < this.blockSize; i++)
  30301. iv[i] ^= inp[inOff + i];
  30302. superProto._update.call(this, iv, 0, out, outOff);
  30303. for (var i = 0; i < this.blockSize; i++)
  30304. iv[i] = out[outOff + i];
  30305. } else {
  30306. superProto._update.call(this, inp, inOff, out, outOff);
  30307. for (var i = 0; i < this.blockSize; i++)
  30308. out[outOff + i] ^= iv[i];
  30309. for (var i = 0; i < this.blockSize; i++)
  30310. iv[i] = inp[inOff + i];
  30311. }
  30312. };
  30313. /***/ }),
  30314. /***/ 55756:
  30315. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  30316. "use strict";
  30317. var assert = __webpack_require__(79746);
  30318. function Cipher(options) {
  30319. this.options = options;
  30320. this.type = this.options.type;
  30321. this.blockSize = 8;
  30322. this._init();
  30323. this.buffer = new Array(this.blockSize);
  30324. this.bufferOff = 0;
  30325. }
  30326. module.exports = Cipher;
  30327. Cipher.prototype._init = function _init() {
  30328. // Might be overrided
  30329. };
  30330. Cipher.prototype.update = function update(data) {
  30331. if (data.length === 0)
  30332. return [];
  30333. if (this.type === 'decrypt')
  30334. return this._updateDecrypt(data);
  30335. else
  30336. return this._updateEncrypt(data);
  30337. };
  30338. Cipher.prototype._buffer = function _buffer(data, off) {
  30339. // Append data to buffer
  30340. var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
  30341. for (var i = 0; i < min; i++)
  30342. this.buffer[this.bufferOff + i] = data[off + i];
  30343. this.bufferOff += min;
  30344. // Shift next
  30345. return min;
  30346. };
  30347. Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
  30348. this._update(this.buffer, 0, out, off);
  30349. this.bufferOff = 0;
  30350. return this.blockSize;
  30351. };
  30352. Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
  30353. var inputOff = 0;
  30354. var outputOff = 0;
  30355. var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
  30356. var out = new Array(count * this.blockSize);
  30357. if (this.bufferOff !== 0) {
  30358. inputOff += this._buffer(data, inputOff);
  30359. if (this.bufferOff === this.buffer.length)
  30360. outputOff += this._flushBuffer(out, outputOff);
  30361. }
  30362. // Write blocks
  30363. var max = data.length - ((data.length - inputOff) % this.blockSize);
  30364. for (; inputOff < max; inputOff += this.blockSize) {
  30365. this._update(data, inputOff, out, outputOff);
  30366. outputOff += this.blockSize;
  30367. }
  30368. // Queue rest
  30369. for (; inputOff < data.length; inputOff++, this.bufferOff++)
  30370. this.buffer[this.bufferOff] = data[inputOff];
  30371. return out;
  30372. };
  30373. Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
  30374. var inputOff = 0;
  30375. var outputOff = 0;
  30376. var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
  30377. var out = new Array(count * this.blockSize);
  30378. // TODO(indutny): optimize it, this is far from optimal
  30379. for (; count > 0; count--) {
  30380. inputOff += this._buffer(data, inputOff);
  30381. outputOff += this._flushBuffer(out, outputOff);
  30382. }
  30383. // Buffer rest of the input
  30384. inputOff += this._buffer(data, inputOff);
  30385. return out;
  30386. };
  30387. Cipher.prototype.final = function final(buffer) {
  30388. var first;
  30389. if (buffer)
  30390. first = this.update(buffer);
  30391. var last;
  30392. if (this.type === 'encrypt')
  30393. last = this._finalEncrypt();
  30394. else
  30395. last = this._finalDecrypt();
  30396. if (first)
  30397. return first.concat(last);
  30398. else
  30399. return last;
  30400. };
  30401. Cipher.prototype._pad = function _pad(buffer, off) {
  30402. if (off === 0)
  30403. return false;
  30404. while (off < buffer.length)
  30405. buffer[off++] = 0;
  30406. return true;
  30407. };
  30408. Cipher.prototype._finalEncrypt = function _finalEncrypt() {
  30409. if (!this._pad(this.buffer, this.bufferOff))
  30410. return [];
  30411. var out = new Array(this.blockSize);
  30412. this._update(this.buffer, 0, out, 0);
  30413. return out;
  30414. };
  30415. Cipher.prototype._unpad = function _unpad(buffer) {
  30416. return buffer;
  30417. };
  30418. Cipher.prototype._finalDecrypt = function _finalDecrypt() {
  30419. assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
  30420. var out = new Array(this.blockSize);
  30421. this._flushBuffer(out, 0);
  30422. return this._unpad(out);
  30423. };
  30424. /***/ }),
  30425. /***/ 70778:
  30426. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  30427. "use strict";
  30428. var assert = __webpack_require__(79746);
  30429. var inherits = __webpack_require__(35717);
  30430. var utils = __webpack_require__(11278);
  30431. var Cipher = __webpack_require__(55756);
  30432. function DESState() {
  30433. this.tmp = new Array(2);
  30434. this.keys = null;
  30435. }
  30436. function DES(options) {
  30437. Cipher.call(this, options);
  30438. var state = new DESState();
  30439. this._desState = state;
  30440. this.deriveKeys(state, options.key);
  30441. }
  30442. inherits(DES, Cipher);
  30443. module.exports = DES;
  30444. DES.create = function create(options) {
  30445. return new DES(options);
  30446. };
  30447. var shiftTable = [
  30448. 1, 1, 2, 2, 2, 2, 2, 2,
  30449. 1, 2, 2, 2, 2, 2, 2, 1
  30450. ];
  30451. DES.prototype.deriveKeys = function deriveKeys(state, key) {
  30452. state.keys = new Array(16 * 2);
  30453. assert.equal(key.length, this.blockSize, 'Invalid key length');
  30454. var kL = utils.readUInt32BE(key, 0);
  30455. var kR = utils.readUInt32BE(key, 4);
  30456. utils.pc1(kL, kR, state.tmp, 0);
  30457. kL = state.tmp[0];
  30458. kR = state.tmp[1];
  30459. for (var i = 0; i < state.keys.length; i += 2) {
  30460. var shift = shiftTable[i >>> 1];
  30461. kL = utils.r28shl(kL, shift);
  30462. kR = utils.r28shl(kR, shift);
  30463. utils.pc2(kL, kR, state.keys, i);
  30464. }
  30465. };
  30466. DES.prototype._update = function _update(inp, inOff, out, outOff) {
  30467. var state = this._desState;
  30468. var l = utils.readUInt32BE(inp, inOff);
  30469. var r = utils.readUInt32BE(inp, inOff + 4);
  30470. // Initial Permutation
  30471. utils.ip(l, r, state.tmp, 0);
  30472. l = state.tmp[0];
  30473. r = state.tmp[1];
  30474. if (this.type === 'encrypt')
  30475. this._encrypt(state, l, r, state.tmp, 0);
  30476. else
  30477. this._decrypt(state, l, r, state.tmp, 0);
  30478. l = state.tmp[0];
  30479. r = state.tmp[1];
  30480. utils.writeUInt32BE(out, l, outOff);
  30481. utils.writeUInt32BE(out, r, outOff + 4);
  30482. };
  30483. DES.prototype._pad = function _pad(buffer, off) {
  30484. var value = buffer.length - off;
  30485. for (var i = off; i < buffer.length; i++)
  30486. buffer[i] = value;
  30487. return true;
  30488. };
  30489. DES.prototype._unpad = function _unpad(buffer) {
  30490. var pad = buffer[buffer.length - 1];
  30491. for (var i = buffer.length - pad; i < buffer.length; i++)
  30492. assert.equal(buffer[i], pad);
  30493. return buffer.slice(0, buffer.length - pad);
  30494. };
  30495. DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
  30496. var l = lStart;
  30497. var r = rStart;
  30498. // Apply f() x16 times
  30499. for (var i = 0; i < state.keys.length; i += 2) {
  30500. var keyL = state.keys[i];
  30501. var keyR = state.keys[i + 1];
  30502. // f(r, k)
  30503. utils.expand(r, state.tmp, 0);
  30504. keyL ^= state.tmp[0];
  30505. keyR ^= state.tmp[1];
  30506. var s = utils.substitute(keyL, keyR);
  30507. var f = utils.permute(s);
  30508. var t = r;
  30509. r = (l ^ f) >>> 0;
  30510. l = t;
  30511. }
  30512. // Reverse Initial Permutation
  30513. utils.rip(r, l, out, off);
  30514. };
  30515. DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
  30516. var l = rStart;
  30517. var r = lStart;
  30518. // Apply f() x16 times
  30519. for (var i = state.keys.length - 2; i >= 0; i -= 2) {
  30520. var keyL = state.keys[i];
  30521. var keyR = state.keys[i + 1];
  30522. // f(r, k)
  30523. utils.expand(l, state.tmp, 0);
  30524. keyL ^= state.tmp[0];
  30525. keyR ^= state.tmp[1];
  30526. var s = utils.substitute(keyL, keyR);
  30527. var f = utils.permute(s);
  30528. var t = l;
  30529. l = (r ^ f) >>> 0;
  30530. r = t;
  30531. }
  30532. // Reverse Initial Permutation
  30533. utils.rip(l, r, out, off);
  30534. };
  30535. /***/ }),
  30536. /***/ 50651:
  30537. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  30538. "use strict";
  30539. var assert = __webpack_require__(79746);
  30540. var inherits = __webpack_require__(35717);
  30541. var Cipher = __webpack_require__(55756);
  30542. var DES = __webpack_require__(70778);
  30543. function EDEState(type, key) {
  30544. assert.equal(key.length, 24, 'Invalid key length');
  30545. var k1 = key.slice(0, 8);
  30546. var k2 = key.slice(8, 16);
  30547. var k3 = key.slice(16, 24);
  30548. if (type === 'encrypt') {
  30549. this.ciphers = [
  30550. DES.create({ type: 'encrypt', key: k1 }),
  30551. DES.create({ type: 'decrypt', key: k2 }),
  30552. DES.create({ type: 'encrypt', key: k3 })
  30553. ];
  30554. } else {
  30555. this.ciphers = [
  30556. DES.create({ type: 'decrypt', key: k3 }),
  30557. DES.create({ type: 'encrypt', key: k2 }),
  30558. DES.create({ type: 'decrypt', key: k1 })
  30559. ];
  30560. }
  30561. }
  30562. function EDE(options) {
  30563. Cipher.call(this, options);
  30564. var state = new EDEState(this.type, this.options.key);
  30565. this._edeState = state;
  30566. }
  30567. inherits(EDE, Cipher);
  30568. module.exports = EDE;
  30569. EDE.create = function create(options) {
  30570. return new EDE(options);
  30571. };
  30572. EDE.prototype._update = function _update(inp, inOff, out, outOff) {
  30573. var state = this._edeState;
  30574. state.ciphers[0]._update(inp, inOff, out, outOff);
  30575. state.ciphers[1]._update(out, outOff, out, outOff);
  30576. state.ciphers[2]._update(out, outOff, out, outOff);
  30577. };
  30578. EDE.prototype._pad = DES.prototype._pad;
  30579. EDE.prototype._unpad = DES.prototype._unpad;
  30580. /***/ }),
  30581. /***/ 11278:
  30582. /***/ ((__unused_webpack_module, exports) => {
  30583. "use strict";
  30584. exports.readUInt32BE = function readUInt32BE(bytes, off) {
  30585. var res = (bytes[0 + off] << 24) |
  30586. (bytes[1 + off] << 16) |
  30587. (bytes[2 + off] << 8) |
  30588. bytes[3 + off];
  30589. return res >>> 0;
  30590. };
  30591. exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
  30592. bytes[0 + off] = value >>> 24;
  30593. bytes[1 + off] = (value >>> 16) & 0xff;
  30594. bytes[2 + off] = (value >>> 8) & 0xff;
  30595. bytes[3 + off] = value & 0xff;
  30596. };
  30597. exports.ip = function ip(inL, inR, out, off) {
  30598. var outL = 0;
  30599. var outR = 0;
  30600. for (var i = 6; i >= 0; i -= 2) {
  30601. for (var j = 0; j <= 24; j += 8) {
  30602. outL <<= 1;
  30603. outL |= (inR >>> (j + i)) & 1;
  30604. }
  30605. for (var j = 0; j <= 24; j += 8) {
  30606. outL <<= 1;
  30607. outL |= (inL >>> (j + i)) & 1;
  30608. }
  30609. }
  30610. for (var i = 6; i >= 0; i -= 2) {
  30611. for (var j = 1; j <= 25; j += 8) {
  30612. outR <<= 1;
  30613. outR |= (inR >>> (j + i)) & 1;
  30614. }
  30615. for (var j = 1; j <= 25; j += 8) {
  30616. outR <<= 1;
  30617. outR |= (inL >>> (j + i)) & 1;
  30618. }
  30619. }
  30620. out[off + 0] = outL >>> 0;
  30621. out[off + 1] = outR >>> 0;
  30622. };
  30623. exports.rip = function rip(inL, inR, out, off) {
  30624. var outL = 0;
  30625. var outR = 0;
  30626. for (var i = 0; i < 4; i++) {
  30627. for (var j = 24; j >= 0; j -= 8) {
  30628. outL <<= 1;
  30629. outL |= (inR >>> (j + i)) & 1;
  30630. outL <<= 1;
  30631. outL |= (inL >>> (j + i)) & 1;
  30632. }
  30633. }
  30634. for (var i = 4; i < 8; i++) {
  30635. for (var j = 24; j >= 0; j -= 8) {
  30636. outR <<= 1;
  30637. outR |= (inR >>> (j + i)) & 1;
  30638. outR <<= 1;
  30639. outR |= (inL >>> (j + i)) & 1;
  30640. }
  30641. }
  30642. out[off + 0] = outL >>> 0;
  30643. out[off + 1] = outR >>> 0;
  30644. };
  30645. exports.pc1 = function pc1(inL, inR, out, off) {
  30646. var outL = 0;
  30647. var outR = 0;
  30648. // 7, 15, 23, 31, 39, 47, 55, 63
  30649. // 6, 14, 22, 30, 39, 47, 55, 63
  30650. // 5, 13, 21, 29, 39, 47, 55, 63
  30651. // 4, 12, 20, 28
  30652. for (var i = 7; i >= 5; i--) {
  30653. for (var j = 0; j <= 24; j += 8) {
  30654. outL <<= 1;
  30655. outL |= (inR >> (j + i)) & 1;
  30656. }
  30657. for (var j = 0; j <= 24; j += 8) {
  30658. outL <<= 1;
  30659. outL |= (inL >> (j + i)) & 1;
  30660. }
  30661. }
  30662. for (var j = 0; j <= 24; j += 8) {
  30663. outL <<= 1;
  30664. outL |= (inR >> (j + i)) & 1;
  30665. }
  30666. // 1, 9, 17, 25, 33, 41, 49, 57
  30667. // 2, 10, 18, 26, 34, 42, 50, 58
  30668. // 3, 11, 19, 27, 35, 43, 51, 59
  30669. // 36, 44, 52, 60
  30670. for (var i = 1; i <= 3; i++) {
  30671. for (var j = 0; j <= 24; j += 8) {
  30672. outR <<= 1;
  30673. outR |= (inR >> (j + i)) & 1;
  30674. }
  30675. for (var j = 0; j <= 24; j += 8) {
  30676. outR <<= 1;
  30677. outR |= (inL >> (j + i)) & 1;
  30678. }
  30679. }
  30680. for (var j = 0; j <= 24; j += 8) {
  30681. outR <<= 1;
  30682. outR |= (inL >> (j + i)) & 1;
  30683. }
  30684. out[off + 0] = outL >>> 0;
  30685. out[off + 1] = outR >>> 0;
  30686. };
  30687. exports.r28shl = function r28shl(num, shift) {
  30688. return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
  30689. };
  30690. var pc2table = [
  30691. // inL => outL
  30692. 14, 11, 17, 4, 27, 23, 25, 0,
  30693. 13, 22, 7, 18, 5, 9, 16, 24,
  30694. 2, 20, 12, 21, 1, 8, 15, 26,
  30695. // inR => outR
  30696. 15, 4, 25, 19, 9, 1, 26, 16,
  30697. 5, 11, 23, 8, 12, 7, 17, 0,
  30698. 22, 3, 10, 14, 6, 20, 27, 24
  30699. ];
  30700. exports.pc2 = function pc2(inL, inR, out, off) {
  30701. var outL = 0;
  30702. var outR = 0;
  30703. var len = pc2table.length >>> 1;
  30704. for (var i = 0; i < len; i++) {
  30705. outL <<= 1;
  30706. outL |= (inL >>> pc2table[i]) & 0x1;
  30707. }
  30708. for (var i = len; i < pc2table.length; i++) {
  30709. outR <<= 1;
  30710. outR |= (inR >>> pc2table[i]) & 0x1;
  30711. }
  30712. out[off + 0] = outL >>> 0;
  30713. out[off + 1] = outR >>> 0;
  30714. };
  30715. exports.expand = function expand(r, out, off) {
  30716. var outL = 0;
  30717. var outR = 0;
  30718. outL = ((r & 1) << 5) | (r >>> 27);
  30719. for (var i = 23; i >= 15; i -= 4) {
  30720. outL <<= 6;
  30721. outL |= (r >>> i) & 0x3f;
  30722. }
  30723. for (var i = 11; i >= 3; i -= 4) {
  30724. outR |= (r >>> i) & 0x3f;
  30725. outR <<= 6;
  30726. }
  30727. outR |= ((r & 0x1f) << 1) | (r >>> 31);
  30728. out[off + 0] = outL >>> 0;
  30729. out[off + 1] = outR >>> 0;
  30730. };
  30731. var sTable = [
  30732. 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
  30733. 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
  30734. 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
  30735. 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
  30736. 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
  30737. 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
  30738. 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
  30739. 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
  30740. 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
  30741. 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
  30742. 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
  30743. 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
  30744. 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
  30745. 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
  30746. 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
  30747. 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
  30748. 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
  30749. 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
  30750. 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
  30751. 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
  30752. 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
  30753. 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
  30754. 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
  30755. 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
  30756. 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
  30757. 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
  30758. 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
  30759. 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
  30760. 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
  30761. 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
  30762. 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
  30763. 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
  30764. ];
  30765. exports.substitute = function substitute(inL, inR) {
  30766. var out = 0;
  30767. for (var i = 0; i < 4; i++) {
  30768. var b = (inL >>> (18 - i * 6)) & 0x3f;
  30769. var sb = sTable[i * 0x40 + b];
  30770. out <<= 4;
  30771. out |= sb;
  30772. }
  30773. for (var i = 0; i < 4; i++) {
  30774. var b = (inR >>> (18 - i * 6)) & 0x3f;
  30775. var sb = sTable[4 * 0x40 + i * 0x40 + b];
  30776. out <<= 4;
  30777. out |= sb;
  30778. }
  30779. return out >>> 0;
  30780. };
  30781. var permuteTable = [
  30782. 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
  30783. 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
  30784. ];
  30785. exports.permute = function permute(num) {
  30786. var out = 0;
  30787. for (var i = 0; i < permuteTable.length; i++) {
  30788. out <<= 1;
  30789. out |= (num >>> permuteTable[i]) & 0x1;
  30790. }
  30791. return out >>> 0;
  30792. };
  30793. exports.padSplit = function padSplit(num, size, group) {
  30794. var str = num.toString(2);
  30795. while (str.length < size)
  30796. str = '0' + str;
  30797. var out = [];
  30798. for (var i = 0; i < size; i += group)
  30799. out.push(str.slice(i, i + group));
  30800. return out.join(' ');
  30801. };
  30802. /***/ }),
  30803. /***/ 62607:
  30804. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  30805. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  30806. var generatePrime = __webpack_require__(43590)
  30807. var primes = __webpack_require__(29799)
  30808. var DH = __webpack_require__(57426)
  30809. function getDiffieHellman (mod) {
  30810. var prime = new Buffer(primes[mod].prime, 'hex')
  30811. var gen = new Buffer(primes[mod].gen, 'hex')
  30812. return new DH(prime, gen)
  30813. }
  30814. var ENCODINGS = {
  30815. 'binary': true, 'hex': true, 'base64': true
  30816. }
  30817. function createDiffieHellman (prime, enc, generator, genc) {
  30818. if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
  30819. return createDiffieHellman(prime, 'binary', enc, generator)
  30820. }
  30821. enc = enc || 'binary'
  30822. genc = genc || 'binary'
  30823. generator = generator || new Buffer([2])
  30824. if (!Buffer.isBuffer(generator)) {
  30825. generator = new Buffer(generator, genc)
  30826. }
  30827. if (typeof prime === 'number') {
  30828. return new DH(generatePrime(prime, generator), generator, true)
  30829. }
  30830. if (!Buffer.isBuffer(prime)) {
  30831. prime = new Buffer(prime, enc)
  30832. }
  30833. return new DH(prime, generator, true)
  30834. }
  30835. exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
  30836. exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
  30837. /***/ }),
  30838. /***/ 57426:
  30839. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  30840. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  30841. var BN = __webpack_require__(83620);
  30842. var MillerRabin = __webpack_require__(63047);
  30843. var millerRabin = new MillerRabin();
  30844. var TWENTYFOUR = new BN(24);
  30845. var ELEVEN = new BN(11);
  30846. var TEN = new BN(10);
  30847. var THREE = new BN(3);
  30848. var SEVEN = new BN(7);
  30849. var primes = __webpack_require__(43590);
  30850. var randomBytes = __webpack_require__(61798);
  30851. module.exports = DH;
  30852. function setPublicKey(pub, enc) {
  30853. enc = enc || 'utf8';
  30854. if (!Buffer.isBuffer(pub)) {
  30855. pub = new Buffer(pub, enc);
  30856. }
  30857. this._pub = new BN(pub);
  30858. return this;
  30859. }
  30860. function setPrivateKey(priv, enc) {
  30861. enc = enc || 'utf8';
  30862. if (!Buffer.isBuffer(priv)) {
  30863. priv = new Buffer(priv, enc);
  30864. }
  30865. this._priv = new BN(priv);
  30866. return this;
  30867. }
  30868. var primeCache = {};
  30869. function checkPrime(prime, generator) {
  30870. var gen = generator.toString('hex');
  30871. var hex = [gen, prime.toString(16)].join('_');
  30872. if (hex in primeCache) {
  30873. return primeCache[hex];
  30874. }
  30875. var error = 0;
  30876. if (prime.isEven() ||
  30877. !primes.simpleSieve ||
  30878. !primes.fermatTest(prime) ||
  30879. !millerRabin.test(prime)) {
  30880. //not a prime so +1
  30881. error += 1;
  30882. if (gen === '02' || gen === '05') {
  30883. // we'd be able to check the generator
  30884. // it would fail so +8
  30885. error += 8;
  30886. } else {
  30887. //we wouldn't be able to test the generator
  30888. // so +4
  30889. error += 4;
  30890. }
  30891. primeCache[hex] = error;
  30892. return error;
  30893. }
  30894. if (!millerRabin.test(prime.shrn(1))) {
  30895. //not a safe prime
  30896. error += 2;
  30897. }
  30898. var rem;
  30899. switch (gen) {
  30900. case '02':
  30901. if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
  30902. // unsuidable generator
  30903. error += 8;
  30904. }
  30905. break;
  30906. case '05':
  30907. rem = prime.mod(TEN);
  30908. if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
  30909. // prime mod 10 needs to equal 3 or 7
  30910. error += 8;
  30911. }
  30912. break;
  30913. default:
  30914. error += 4;
  30915. }
  30916. primeCache[hex] = error;
  30917. return error;
  30918. }
  30919. function DH(prime, generator, malleable) {
  30920. this.setGenerator(generator);
  30921. this.__prime = new BN(prime);
  30922. this._prime = BN.mont(this.__prime);
  30923. this._primeLen = prime.length;
  30924. this._pub = undefined;
  30925. this._priv = undefined;
  30926. this._primeCode = undefined;
  30927. if (malleable) {
  30928. this.setPublicKey = setPublicKey;
  30929. this.setPrivateKey = setPrivateKey;
  30930. } else {
  30931. this._primeCode = 8;
  30932. }
  30933. }
  30934. Object.defineProperty(DH.prototype, 'verifyError', {
  30935. enumerable: true,
  30936. get: function () {
  30937. if (typeof this._primeCode !== 'number') {
  30938. this._primeCode = checkPrime(this.__prime, this.__gen);
  30939. }
  30940. return this._primeCode;
  30941. }
  30942. });
  30943. DH.prototype.generateKeys = function () {
  30944. if (!this._priv) {
  30945. this._priv = new BN(randomBytes(this._primeLen));
  30946. }
  30947. this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
  30948. return this.getPublicKey();
  30949. };
  30950. DH.prototype.computeSecret = function (other) {
  30951. other = new BN(other);
  30952. other = other.toRed(this._prime);
  30953. var secret = other.redPow(this._priv).fromRed();
  30954. var out = new Buffer(secret.toArray());
  30955. var prime = this.getPrime();
  30956. if (out.length < prime.length) {
  30957. var front = new Buffer(prime.length - out.length);
  30958. front.fill(0);
  30959. out = Buffer.concat([front, out]);
  30960. }
  30961. return out;
  30962. };
  30963. DH.prototype.getPublicKey = function getPublicKey(enc) {
  30964. return formatReturnValue(this._pub, enc);
  30965. };
  30966. DH.prototype.getPrivateKey = function getPrivateKey(enc) {
  30967. return formatReturnValue(this._priv, enc);
  30968. };
  30969. DH.prototype.getPrime = function (enc) {
  30970. return formatReturnValue(this.__prime, enc);
  30971. };
  30972. DH.prototype.getGenerator = function (enc) {
  30973. return formatReturnValue(this._gen, enc);
  30974. };
  30975. DH.prototype.setGenerator = function (gen, enc) {
  30976. enc = enc || 'utf8';
  30977. if (!Buffer.isBuffer(gen)) {
  30978. gen = new Buffer(gen, enc);
  30979. }
  30980. this.__gen = gen;
  30981. this._gen = new BN(gen);
  30982. return this;
  30983. };
  30984. function formatReturnValue(bn, enc) {
  30985. var buf = new Buffer(bn.toArray());
  30986. if (!enc) {
  30987. return buf;
  30988. } else {
  30989. return buf.toString(enc);
  30990. }
  30991. }
  30992. /***/ }),
  30993. /***/ 43590:
  30994. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  30995. var randomBytes = __webpack_require__(61798);
  30996. module.exports = findPrime;
  30997. findPrime.simpleSieve = simpleSieve;
  30998. findPrime.fermatTest = fermatTest;
  30999. var BN = __webpack_require__(83620);
  31000. var TWENTYFOUR = new BN(24);
  31001. var MillerRabin = __webpack_require__(63047);
  31002. var millerRabin = new MillerRabin();
  31003. var ONE = new BN(1);
  31004. var TWO = new BN(2);
  31005. var FIVE = new BN(5);
  31006. var SIXTEEN = new BN(16);
  31007. var EIGHT = new BN(8);
  31008. var TEN = new BN(10);
  31009. var THREE = new BN(3);
  31010. var SEVEN = new BN(7);
  31011. var ELEVEN = new BN(11);
  31012. var FOUR = new BN(4);
  31013. var TWELVE = new BN(12);
  31014. var primes = null;
  31015. function _getPrimes() {
  31016. if (primes !== null)
  31017. return primes;
  31018. var limit = 0x100000;
  31019. var res = [];
  31020. res[0] = 2;
  31021. for (var i = 1, k = 3; k < limit; k += 2) {
  31022. var sqrt = Math.ceil(Math.sqrt(k));
  31023. for (var j = 0; j < i && res[j] <= sqrt; j++)
  31024. if (k % res[j] === 0)
  31025. break;
  31026. if (i !== j && res[j] <= sqrt)
  31027. continue;
  31028. res[i++] = k;
  31029. }
  31030. primes = res;
  31031. return res;
  31032. }
  31033. function simpleSieve(p) {
  31034. var primes = _getPrimes();
  31035. for (var i = 0; i < primes.length; i++)
  31036. if (p.modn(primes[i]) === 0) {
  31037. if (p.cmpn(primes[i]) === 0) {
  31038. return true;
  31039. } else {
  31040. return false;
  31041. }
  31042. }
  31043. return true;
  31044. }
  31045. function fermatTest(p) {
  31046. var red = BN.mont(p);
  31047. return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
  31048. }
  31049. function findPrime(bits, gen) {
  31050. if (bits < 16) {
  31051. // this is what openssl does
  31052. if (gen === 2 || gen === 5) {
  31053. return new BN([0x8c, 0x7b]);
  31054. } else {
  31055. return new BN([0x8c, 0x27]);
  31056. }
  31057. }
  31058. gen = new BN(gen);
  31059. var num, n2;
  31060. while (true) {
  31061. num = new BN(randomBytes(Math.ceil(bits / 8)));
  31062. while (num.bitLength() > bits) {
  31063. num.ishrn(1);
  31064. }
  31065. if (num.isEven()) {
  31066. num.iadd(ONE);
  31067. }
  31068. if (!num.testn(1)) {
  31069. num.iadd(TWO);
  31070. }
  31071. if (!gen.cmp(TWO)) {
  31072. while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
  31073. num.iadd(FOUR);
  31074. }
  31075. } else if (!gen.cmp(FIVE)) {
  31076. while (num.mod(TEN).cmp(THREE)) {
  31077. num.iadd(FOUR);
  31078. }
  31079. }
  31080. n2 = num.shrn(1);
  31081. if (simpleSieve(n2) && simpleSieve(num) &&
  31082. fermatTest(n2) && fermatTest(num) &&
  31083. millerRabin.test(n2) && millerRabin.test(num)) {
  31084. return num;
  31085. }
  31086. }
  31087. }
  31088. /***/ }),
  31089. /***/ 83620:
  31090. /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
  31091. /* module decorator */ module = __webpack_require__.nmd(module);
  31092. (function (module, exports) {
  31093. 'use strict';
  31094. // Utils
  31095. function assert (val, msg) {
  31096. if (!val) throw new Error(msg || 'Assertion failed');
  31097. }
  31098. // Could use `inherits` module, but don't want to move from single file
  31099. // architecture yet.
  31100. function inherits (ctor, superCtor) {
  31101. ctor.super_ = superCtor;
  31102. var TempCtor = function () {};
  31103. TempCtor.prototype = superCtor.prototype;
  31104. ctor.prototype = new TempCtor();
  31105. ctor.prototype.constructor = ctor;
  31106. }
  31107. // BN
  31108. function BN (number, base, endian) {
  31109. if (BN.isBN(number)) {
  31110. return number;
  31111. }
  31112. this.negative = 0;
  31113. this.words = null;
  31114. this.length = 0;
  31115. // Reduction context
  31116. this.red = null;
  31117. if (number !== null) {
  31118. if (base === 'le' || base === 'be') {
  31119. endian = base;
  31120. base = 10;
  31121. }
  31122. this._init(number || 0, base || 10, endian || 'be');
  31123. }
  31124. }
  31125. if (typeof module === 'object') {
  31126. module.exports = BN;
  31127. } else {
  31128. exports.BN = BN;
  31129. }
  31130. BN.BN = BN;
  31131. BN.wordSize = 26;
  31132. var Buffer;
  31133. try {
  31134. if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {
  31135. Buffer = window.Buffer;
  31136. } else {
  31137. Buffer = (__webpack_require__(7748).Buffer);
  31138. }
  31139. } catch (e) {
  31140. }
  31141. BN.isBN = function isBN (num) {
  31142. if (num instanceof BN) {
  31143. return true;
  31144. }
  31145. return num !== null && typeof num === 'object' &&
  31146. num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
  31147. };
  31148. BN.max = function max (left, right) {
  31149. if (left.cmp(right) > 0) return left;
  31150. return right;
  31151. };
  31152. BN.min = function min (left, right) {
  31153. if (left.cmp(right) < 0) return left;
  31154. return right;
  31155. };
  31156. BN.prototype._init = function init (number, base, endian) {
  31157. if (typeof number === 'number') {
  31158. return this._initNumber(number, base, endian);
  31159. }
  31160. if (typeof number === 'object') {
  31161. return this._initArray(number, base, endian);
  31162. }
  31163. if (base === 'hex') {
  31164. base = 16;
  31165. }
  31166. assert(base === (base | 0) && base >= 2 && base <= 36);
  31167. number = number.toString().replace(/\s+/g, '');
  31168. var start = 0;
  31169. if (number[0] === '-') {
  31170. start++;
  31171. this.negative = 1;
  31172. }
  31173. if (start < number.length) {
  31174. if (base === 16) {
  31175. this._parseHex(number, start, endian);
  31176. } else {
  31177. this._parseBase(number, base, start);
  31178. if (endian === 'le') {
  31179. this._initArray(this.toArray(), base, endian);
  31180. }
  31181. }
  31182. }
  31183. };
  31184. BN.prototype._initNumber = function _initNumber (number, base, endian) {
  31185. if (number < 0) {
  31186. this.negative = 1;
  31187. number = -number;
  31188. }
  31189. if (number < 0x4000000) {
  31190. this.words = [ number & 0x3ffffff ];
  31191. this.length = 1;
  31192. } else if (number < 0x10000000000000) {
  31193. this.words = [
  31194. number & 0x3ffffff,
  31195. (number / 0x4000000) & 0x3ffffff
  31196. ];
  31197. this.length = 2;
  31198. } else {
  31199. assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
  31200. this.words = [
  31201. number & 0x3ffffff,
  31202. (number / 0x4000000) & 0x3ffffff,
  31203. 1
  31204. ];
  31205. this.length = 3;
  31206. }
  31207. if (endian !== 'le') return;
  31208. // Reverse the bytes
  31209. this._initArray(this.toArray(), base, endian);
  31210. };
  31211. BN.prototype._initArray = function _initArray (number, base, endian) {
  31212. // Perhaps a Uint8Array
  31213. assert(typeof number.length === 'number');
  31214. if (number.length <= 0) {
  31215. this.words = [ 0 ];
  31216. this.length = 1;
  31217. return this;
  31218. }
  31219. this.length = Math.ceil(number.length / 3);
  31220. this.words = new Array(this.length);
  31221. for (var i = 0; i < this.length; i++) {
  31222. this.words[i] = 0;
  31223. }
  31224. var j, w;
  31225. var off = 0;
  31226. if (endian === 'be') {
  31227. for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
  31228. w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
  31229. this.words[j] |= (w << off) & 0x3ffffff;
  31230. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  31231. off += 24;
  31232. if (off >= 26) {
  31233. off -= 26;
  31234. j++;
  31235. }
  31236. }
  31237. } else if (endian === 'le') {
  31238. for (i = 0, j = 0; i < number.length; i += 3) {
  31239. w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
  31240. this.words[j] |= (w << off) & 0x3ffffff;
  31241. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  31242. off += 24;
  31243. if (off >= 26) {
  31244. off -= 26;
  31245. j++;
  31246. }
  31247. }
  31248. }
  31249. return this.strip();
  31250. };
  31251. function parseHex4Bits (string, index) {
  31252. var c = string.charCodeAt(index);
  31253. // 'A' - 'F'
  31254. if (c >= 65 && c <= 70) {
  31255. return c - 55;
  31256. // 'a' - 'f'
  31257. } else if (c >= 97 && c <= 102) {
  31258. return c - 87;
  31259. // '0' - '9'
  31260. } else {
  31261. return (c - 48) & 0xf;
  31262. }
  31263. }
  31264. function parseHexByte (string, lowerBound, index) {
  31265. var r = parseHex4Bits(string, index);
  31266. if (index - 1 >= lowerBound) {
  31267. r |= parseHex4Bits(string, index - 1) << 4;
  31268. }
  31269. return r;
  31270. }
  31271. BN.prototype._parseHex = function _parseHex (number, start, endian) {
  31272. // Create possibly bigger array to ensure that it fits the number
  31273. this.length = Math.ceil((number.length - start) / 6);
  31274. this.words = new Array(this.length);
  31275. for (var i = 0; i < this.length; i++) {
  31276. this.words[i] = 0;
  31277. }
  31278. // 24-bits chunks
  31279. var off = 0;
  31280. var j = 0;
  31281. var w;
  31282. if (endian === 'be') {
  31283. for (i = number.length - 1; i >= start; i -= 2) {
  31284. w = parseHexByte(number, start, i) << off;
  31285. this.words[j] |= w & 0x3ffffff;
  31286. if (off >= 18) {
  31287. off -= 18;
  31288. j += 1;
  31289. this.words[j] |= w >>> 26;
  31290. } else {
  31291. off += 8;
  31292. }
  31293. }
  31294. } else {
  31295. var parseLength = number.length - start;
  31296. for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {
  31297. w = parseHexByte(number, start, i) << off;
  31298. this.words[j] |= w & 0x3ffffff;
  31299. if (off >= 18) {
  31300. off -= 18;
  31301. j += 1;
  31302. this.words[j] |= w >>> 26;
  31303. } else {
  31304. off += 8;
  31305. }
  31306. }
  31307. }
  31308. this.strip();
  31309. };
  31310. function parseBase (str, start, end, mul) {
  31311. var r = 0;
  31312. var len = Math.min(str.length, end);
  31313. for (var i = start; i < len; i++) {
  31314. var c = str.charCodeAt(i) - 48;
  31315. r *= mul;
  31316. // 'a'
  31317. if (c >= 49) {
  31318. r += c - 49 + 0xa;
  31319. // 'A'
  31320. } else if (c >= 17) {
  31321. r += c - 17 + 0xa;
  31322. // '0' - '9'
  31323. } else {
  31324. r += c;
  31325. }
  31326. }
  31327. return r;
  31328. }
  31329. BN.prototype._parseBase = function _parseBase (number, base, start) {
  31330. // Initialize as zero
  31331. this.words = [ 0 ];
  31332. this.length = 1;
  31333. // Find length of limb in base
  31334. for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
  31335. limbLen++;
  31336. }
  31337. limbLen--;
  31338. limbPow = (limbPow / base) | 0;
  31339. var total = number.length - start;
  31340. var mod = total % limbLen;
  31341. var end = Math.min(total, total - mod) + start;
  31342. var word = 0;
  31343. for (var i = start; i < end; i += limbLen) {
  31344. word = parseBase(number, i, i + limbLen, base);
  31345. this.imuln(limbPow);
  31346. if (this.words[0] + word < 0x4000000) {
  31347. this.words[0] += word;
  31348. } else {
  31349. this._iaddn(word);
  31350. }
  31351. }
  31352. if (mod !== 0) {
  31353. var pow = 1;
  31354. word = parseBase(number, i, number.length, base);
  31355. for (i = 0; i < mod; i++) {
  31356. pow *= base;
  31357. }
  31358. this.imuln(pow);
  31359. if (this.words[0] + word < 0x4000000) {
  31360. this.words[0] += word;
  31361. } else {
  31362. this._iaddn(word);
  31363. }
  31364. }
  31365. this.strip();
  31366. };
  31367. BN.prototype.copy = function copy (dest) {
  31368. dest.words = new Array(this.length);
  31369. for (var i = 0; i < this.length; i++) {
  31370. dest.words[i] = this.words[i];
  31371. }
  31372. dest.length = this.length;
  31373. dest.negative = this.negative;
  31374. dest.red = this.red;
  31375. };
  31376. BN.prototype.clone = function clone () {
  31377. var r = new BN(null);
  31378. this.copy(r);
  31379. return r;
  31380. };
  31381. BN.prototype._expand = function _expand (size) {
  31382. while (this.length < size) {
  31383. this.words[this.length++] = 0;
  31384. }
  31385. return this;
  31386. };
  31387. // Remove leading `0` from `this`
  31388. BN.prototype.strip = function strip () {
  31389. while (this.length > 1 && this.words[this.length - 1] === 0) {
  31390. this.length--;
  31391. }
  31392. return this._normSign();
  31393. };
  31394. BN.prototype._normSign = function _normSign () {
  31395. // -0 = 0
  31396. if (this.length === 1 && this.words[0] === 0) {
  31397. this.negative = 0;
  31398. }
  31399. return this;
  31400. };
  31401. BN.prototype.inspect = function inspect () {
  31402. return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  31403. };
  31404. /*
  31405. var zeros = [];
  31406. var groupSizes = [];
  31407. var groupBases = [];
  31408. var s = '';
  31409. var i = -1;
  31410. while (++i < BN.wordSize) {
  31411. zeros[i] = s;
  31412. s += '0';
  31413. }
  31414. groupSizes[0] = 0;
  31415. groupSizes[1] = 0;
  31416. groupBases[0] = 0;
  31417. groupBases[1] = 0;
  31418. var base = 2 - 1;
  31419. while (++base < 36 + 1) {
  31420. var groupSize = 0;
  31421. var groupBase = 1;
  31422. while (groupBase < (1 << BN.wordSize) / base) {
  31423. groupBase *= base;
  31424. groupSize += 1;
  31425. }
  31426. groupSizes[base] = groupSize;
  31427. groupBases[base] = groupBase;
  31428. }
  31429. */
  31430. var zeros = [
  31431. '',
  31432. '0',
  31433. '00',
  31434. '000',
  31435. '0000',
  31436. '00000',
  31437. '000000',
  31438. '0000000',
  31439. '00000000',
  31440. '000000000',
  31441. '0000000000',
  31442. '00000000000',
  31443. '000000000000',
  31444. '0000000000000',
  31445. '00000000000000',
  31446. '000000000000000',
  31447. '0000000000000000',
  31448. '00000000000000000',
  31449. '000000000000000000',
  31450. '0000000000000000000',
  31451. '00000000000000000000',
  31452. '000000000000000000000',
  31453. '0000000000000000000000',
  31454. '00000000000000000000000',
  31455. '000000000000000000000000',
  31456. '0000000000000000000000000'
  31457. ];
  31458. var groupSizes = [
  31459. 0, 0,
  31460. 25, 16, 12, 11, 10, 9, 8,
  31461. 8, 7, 7, 7, 7, 6, 6,
  31462. 6, 6, 6, 6, 6, 5, 5,
  31463. 5, 5, 5, 5, 5, 5, 5,
  31464. 5, 5, 5, 5, 5, 5, 5
  31465. ];
  31466. var groupBases = [
  31467. 0, 0,
  31468. 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
  31469. 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
  31470. 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
  31471. 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
  31472. 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
  31473. ];
  31474. BN.prototype.toString = function toString (base, padding) {
  31475. base = base || 10;
  31476. padding = padding | 0 || 1;
  31477. var out;
  31478. if (base === 16 || base === 'hex') {
  31479. out = '';
  31480. var off = 0;
  31481. var carry = 0;
  31482. for (var i = 0; i < this.length; i++) {
  31483. var w = this.words[i];
  31484. var word = (((w << off) | carry) & 0xffffff).toString(16);
  31485. carry = (w >>> (24 - off)) & 0xffffff;
  31486. if (carry !== 0 || i !== this.length - 1) {
  31487. out = zeros[6 - word.length] + word + out;
  31488. } else {
  31489. out = word + out;
  31490. }
  31491. off += 2;
  31492. if (off >= 26) {
  31493. off -= 26;
  31494. i--;
  31495. }
  31496. }
  31497. if (carry !== 0) {
  31498. out = carry.toString(16) + out;
  31499. }
  31500. while (out.length % padding !== 0) {
  31501. out = '0' + out;
  31502. }
  31503. if (this.negative !== 0) {
  31504. out = '-' + out;
  31505. }
  31506. return out;
  31507. }
  31508. if (base === (base | 0) && base >= 2 && base <= 36) {
  31509. // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
  31510. var groupSize = groupSizes[base];
  31511. // var groupBase = Math.pow(base, groupSize);
  31512. var groupBase = groupBases[base];
  31513. out = '';
  31514. var c = this.clone();
  31515. c.negative = 0;
  31516. while (!c.isZero()) {
  31517. var r = c.modn(groupBase).toString(base);
  31518. c = c.idivn(groupBase);
  31519. if (!c.isZero()) {
  31520. out = zeros[groupSize - r.length] + r + out;
  31521. } else {
  31522. out = r + out;
  31523. }
  31524. }
  31525. if (this.isZero()) {
  31526. out = '0' + out;
  31527. }
  31528. while (out.length % padding !== 0) {
  31529. out = '0' + out;
  31530. }
  31531. if (this.negative !== 0) {
  31532. out = '-' + out;
  31533. }
  31534. return out;
  31535. }
  31536. assert(false, 'Base should be between 2 and 36');
  31537. };
  31538. BN.prototype.toNumber = function toNumber () {
  31539. var ret = this.words[0];
  31540. if (this.length === 2) {
  31541. ret += this.words[1] * 0x4000000;
  31542. } else if (this.length === 3 && this.words[2] === 0x01) {
  31543. // NOTE: at this stage it is known that the top bit is set
  31544. ret += 0x10000000000000 + (this.words[1] * 0x4000000);
  31545. } else if (this.length > 2) {
  31546. assert(false, 'Number can only safely store up to 53 bits');
  31547. }
  31548. return (this.negative !== 0) ? -ret : ret;
  31549. };
  31550. BN.prototype.toJSON = function toJSON () {
  31551. return this.toString(16);
  31552. };
  31553. BN.prototype.toBuffer = function toBuffer (endian, length) {
  31554. assert(typeof Buffer !== 'undefined');
  31555. return this.toArrayLike(Buffer, endian, length);
  31556. };
  31557. BN.prototype.toArray = function toArray (endian, length) {
  31558. return this.toArrayLike(Array, endian, length);
  31559. };
  31560. BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
  31561. var byteLength = this.byteLength();
  31562. var reqLength = length || Math.max(1, byteLength);
  31563. assert(byteLength <= reqLength, 'byte array longer than desired length');
  31564. assert(reqLength > 0, 'Requested array length <= 0');
  31565. this.strip();
  31566. var littleEndian = endian === 'le';
  31567. var res = new ArrayType(reqLength);
  31568. var b, i;
  31569. var q = this.clone();
  31570. if (!littleEndian) {
  31571. // Assume big-endian
  31572. for (i = 0; i < reqLength - byteLength; i++) {
  31573. res[i] = 0;
  31574. }
  31575. for (i = 0; !q.isZero(); i++) {
  31576. b = q.andln(0xff);
  31577. q.iushrn(8);
  31578. res[reqLength - i - 1] = b;
  31579. }
  31580. } else {
  31581. for (i = 0; !q.isZero(); i++) {
  31582. b = q.andln(0xff);
  31583. q.iushrn(8);
  31584. res[i] = b;
  31585. }
  31586. for (; i < reqLength; i++) {
  31587. res[i] = 0;
  31588. }
  31589. }
  31590. return res;
  31591. };
  31592. if (Math.clz32) {
  31593. BN.prototype._countBits = function _countBits (w) {
  31594. return 32 - Math.clz32(w);
  31595. };
  31596. } else {
  31597. BN.prototype._countBits = function _countBits (w) {
  31598. var t = w;
  31599. var r = 0;
  31600. if (t >= 0x1000) {
  31601. r += 13;
  31602. t >>>= 13;
  31603. }
  31604. if (t >= 0x40) {
  31605. r += 7;
  31606. t >>>= 7;
  31607. }
  31608. if (t >= 0x8) {
  31609. r += 4;
  31610. t >>>= 4;
  31611. }
  31612. if (t >= 0x02) {
  31613. r += 2;
  31614. t >>>= 2;
  31615. }
  31616. return r + t;
  31617. };
  31618. }
  31619. BN.prototype._zeroBits = function _zeroBits (w) {
  31620. // Short-cut
  31621. if (w === 0) return 26;
  31622. var t = w;
  31623. var r = 0;
  31624. if ((t & 0x1fff) === 0) {
  31625. r += 13;
  31626. t >>>= 13;
  31627. }
  31628. if ((t & 0x7f) === 0) {
  31629. r += 7;
  31630. t >>>= 7;
  31631. }
  31632. if ((t & 0xf) === 0) {
  31633. r += 4;
  31634. t >>>= 4;
  31635. }
  31636. if ((t & 0x3) === 0) {
  31637. r += 2;
  31638. t >>>= 2;
  31639. }
  31640. if ((t & 0x1) === 0) {
  31641. r++;
  31642. }
  31643. return r;
  31644. };
  31645. // Return number of used bits in a BN
  31646. BN.prototype.bitLength = function bitLength () {
  31647. var w = this.words[this.length - 1];
  31648. var hi = this._countBits(w);
  31649. return (this.length - 1) * 26 + hi;
  31650. };
  31651. function toBitArray (num) {
  31652. var w = new Array(num.bitLength());
  31653. for (var bit = 0; bit < w.length; bit++) {
  31654. var off = (bit / 26) | 0;
  31655. var wbit = bit % 26;
  31656. w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
  31657. }
  31658. return w;
  31659. }
  31660. // Number of trailing zero bits
  31661. BN.prototype.zeroBits = function zeroBits () {
  31662. if (this.isZero()) return 0;
  31663. var r = 0;
  31664. for (var i = 0; i < this.length; i++) {
  31665. var b = this._zeroBits(this.words[i]);
  31666. r += b;
  31667. if (b !== 26) break;
  31668. }
  31669. return r;
  31670. };
  31671. BN.prototype.byteLength = function byteLength () {
  31672. return Math.ceil(this.bitLength() / 8);
  31673. };
  31674. BN.prototype.toTwos = function toTwos (width) {
  31675. if (this.negative !== 0) {
  31676. return this.abs().inotn(width).iaddn(1);
  31677. }
  31678. return this.clone();
  31679. };
  31680. BN.prototype.fromTwos = function fromTwos (width) {
  31681. if (this.testn(width - 1)) {
  31682. return this.notn(width).iaddn(1).ineg();
  31683. }
  31684. return this.clone();
  31685. };
  31686. BN.prototype.isNeg = function isNeg () {
  31687. return this.negative !== 0;
  31688. };
  31689. // Return negative clone of `this`
  31690. BN.prototype.neg = function neg () {
  31691. return this.clone().ineg();
  31692. };
  31693. BN.prototype.ineg = function ineg () {
  31694. if (!this.isZero()) {
  31695. this.negative ^= 1;
  31696. }
  31697. return this;
  31698. };
  31699. // Or `num` with `this` in-place
  31700. BN.prototype.iuor = function iuor (num) {
  31701. while (this.length < num.length) {
  31702. this.words[this.length++] = 0;
  31703. }
  31704. for (var i = 0; i < num.length; i++) {
  31705. this.words[i] = this.words[i] | num.words[i];
  31706. }
  31707. return this.strip();
  31708. };
  31709. BN.prototype.ior = function ior (num) {
  31710. assert((this.negative | num.negative) === 0);
  31711. return this.iuor(num);
  31712. };
  31713. // Or `num` with `this`
  31714. BN.prototype.or = function or (num) {
  31715. if (this.length > num.length) return this.clone().ior(num);
  31716. return num.clone().ior(this);
  31717. };
  31718. BN.prototype.uor = function uor (num) {
  31719. if (this.length > num.length) return this.clone().iuor(num);
  31720. return num.clone().iuor(this);
  31721. };
  31722. // And `num` with `this` in-place
  31723. BN.prototype.iuand = function iuand (num) {
  31724. // b = min-length(num, this)
  31725. var b;
  31726. if (this.length > num.length) {
  31727. b = num;
  31728. } else {
  31729. b = this;
  31730. }
  31731. for (var i = 0; i < b.length; i++) {
  31732. this.words[i] = this.words[i] & num.words[i];
  31733. }
  31734. this.length = b.length;
  31735. return this.strip();
  31736. };
  31737. BN.prototype.iand = function iand (num) {
  31738. assert((this.negative | num.negative) === 0);
  31739. return this.iuand(num);
  31740. };
  31741. // And `num` with `this`
  31742. BN.prototype.and = function and (num) {
  31743. if (this.length > num.length) return this.clone().iand(num);
  31744. return num.clone().iand(this);
  31745. };
  31746. BN.prototype.uand = function uand (num) {
  31747. if (this.length > num.length) return this.clone().iuand(num);
  31748. return num.clone().iuand(this);
  31749. };
  31750. // Xor `num` with `this` in-place
  31751. BN.prototype.iuxor = function iuxor (num) {
  31752. // a.length > b.length
  31753. var a;
  31754. var b;
  31755. if (this.length > num.length) {
  31756. a = this;
  31757. b = num;
  31758. } else {
  31759. a = num;
  31760. b = this;
  31761. }
  31762. for (var i = 0; i < b.length; i++) {
  31763. this.words[i] = a.words[i] ^ b.words[i];
  31764. }
  31765. if (this !== a) {
  31766. for (; i < a.length; i++) {
  31767. this.words[i] = a.words[i];
  31768. }
  31769. }
  31770. this.length = a.length;
  31771. return this.strip();
  31772. };
  31773. BN.prototype.ixor = function ixor (num) {
  31774. assert((this.negative | num.negative) === 0);
  31775. return this.iuxor(num);
  31776. };
  31777. // Xor `num` with `this`
  31778. BN.prototype.xor = function xor (num) {
  31779. if (this.length > num.length) return this.clone().ixor(num);
  31780. return num.clone().ixor(this);
  31781. };
  31782. BN.prototype.uxor = function uxor (num) {
  31783. if (this.length > num.length) return this.clone().iuxor(num);
  31784. return num.clone().iuxor(this);
  31785. };
  31786. // Not ``this`` with ``width`` bitwidth
  31787. BN.prototype.inotn = function inotn (width) {
  31788. assert(typeof width === 'number' && width >= 0);
  31789. var bytesNeeded = Math.ceil(width / 26) | 0;
  31790. var bitsLeft = width % 26;
  31791. // Extend the buffer with leading zeroes
  31792. this._expand(bytesNeeded);
  31793. if (bitsLeft > 0) {
  31794. bytesNeeded--;
  31795. }
  31796. // Handle complete words
  31797. for (var i = 0; i < bytesNeeded; i++) {
  31798. this.words[i] = ~this.words[i] & 0x3ffffff;
  31799. }
  31800. // Handle the residue
  31801. if (bitsLeft > 0) {
  31802. this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
  31803. }
  31804. // And remove leading zeroes
  31805. return this.strip();
  31806. };
  31807. BN.prototype.notn = function notn (width) {
  31808. return this.clone().inotn(width);
  31809. };
  31810. // Set `bit` of `this`
  31811. BN.prototype.setn = function setn (bit, val) {
  31812. assert(typeof bit === 'number' && bit >= 0);
  31813. var off = (bit / 26) | 0;
  31814. var wbit = bit % 26;
  31815. this._expand(off + 1);
  31816. if (val) {
  31817. this.words[off] = this.words[off] | (1 << wbit);
  31818. } else {
  31819. this.words[off] = this.words[off] & ~(1 << wbit);
  31820. }
  31821. return this.strip();
  31822. };
  31823. // Add `num` to `this` in-place
  31824. BN.prototype.iadd = function iadd (num) {
  31825. var r;
  31826. // negative + positive
  31827. if (this.negative !== 0 && num.negative === 0) {
  31828. this.negative = 0;
  31829. r = this.isub(num);
  31830. this.negative ^= 1;
  31831. return this._normSign();
  31832. // positive + negative
  31833. } else if (this.negative === 0 && num.negative !== 0) {
  31834. num.negative = 0;
  31835. r = this.isub(num);
  31836. num.negative = 1;
  31837. return r._normSign();
  31838. }
  31839. // a.length > b.length
  31840. var a, b;
  31841. if (this.length > num.length) {
  31842. a = this;
  31843. b = num;
  31844. } else {
  31845. a = num;
  31846. b = this;
  31847. }
  31848. var carry = 0;
  31849. for (var i = 0; i < b.length; i++) {
  31850. r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
  31851. this.words[i] = r & 0x3ffffff;
  31852. carry = r >>> 26;
  31853. }
  31854. for (; carry !== 0 && i < a.length; i++) {
  31855. r = (a.words[i] | 0) + carry;
  31856. this.words[i] = r & 0x3ffffff;
  31857. carry = r >>> 26;
  31858. }
  31859. this.length = a.length;
  31860. if (carry !== 0) {
  31861. this.words[this.length] = carry;
  31862. this.length++;
  31863. // Copy the rest of the words
  31864. } else if (a !== this) {
  31865. for (; i < a.length; i++) {
  31866. this.words[i] = a.words[i];
  31867. }
  31868. }
  31869. return this;
  31870. };
  31871. // Add `num` to `this`
  31872. BN.prototype.add = function add (num) {
  31873. var res;
  31874. if (num.negative !== 0 && this.negative === 0) {
  31875. num.negative = 0;
  31876. res = this.sub(num);
  31877. num.negative ^= 1;
  31878. return res;
  31879. } else if (num.negative === 0 && this.negative !== 0) {
  31880. this.negative = 0;
  31881. res = num.sub(this);
  31882. this.negative = 1;
  31883. return res;
  31884. }
  31885. if (this.length > num.length) return this.clone().iadd(num);
  31886. return num.clone().iadd(this);
  31887. };
  31888. // Subtract `num` from `this` in-place
  31889. BN.prototype.isub = function isub (num) {
  31890. // this - (-num) = this + num
  31891. if (num.negative !== 0) {
  31892. num.negative = 0;
  31893. var r = this.iadd(num);
  31894. num.negative = 1;
  31895. return r._normSign();
  31896. // -this - num = -(this + num)
  31897. } else if (this.negative !== 0) {
  31898. this.negative = 0;
  31899. this.iadd(num);
  31900. this.negative = 1;
  31901. return this._normSign();
  31902. }
  31903. // At this point both numbers are positive
  31904. var cmp = this.cmp(num);
  31905. // Optimization - zeroify
  31906. if (cmp === 0) {
  31907. this.negative = 0;
  31908. this.length = 1;
  31909. this.words[0] = 0;
  31910. return this;
  31911. }
  31912. // a > b
  31913. var a, b;
  31914. if (cmp > 0) {
  31915. a = this;
  31916. b = num;
  31917. } else {
  31918. a = num;
  31919. b = this;
  31920. }
  31921. var carry = 0;
  31922. for (var i = 0; i < b.length; i++) {
  31923. r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
  31924. carry = r >> 26;
  31925. this.words[i] = r & 0x3ffffff;
  31926. }
  31927. for (; carry !== 0 && i < a.length; i++) {
  31928. r = (a.words[i] | 0) + carry;
  31929. carry = r >> 26;
  31930. this.words[i] = r & 0x3ffffff;
  31931. }
  31932. // Copy rest of the words
  31933. if (carry === 0 && i < a.length && a !== this) {
  31934. for (; i < a.length; i++) {
  31935. this.words[i] = a.words[i];
  31936. }
  31937. }
  31938. this.length = Math.max(this.length, i);
  31939. if (a !== this) {
  31940. this.negative = 1;
  31941. }
  31942. return this.strip();
  31943. };
  31944. // Subtract `num` from `this`
  31945. BN.prototype.sub = function sub (num) {
  31946. return this.clone().isub(num);
  31947. };
  31948. function smallMulTo (self, num, out) {
  31949. out.negative = num.negative ^ self.negative;
  31950. var len = (self.length + num.length) | 0;
  31951. out.length = len;
  31952. len = (len - 1) | 0;
  31953. // Peel one iteration (compiler can't do it, because of code complexity)
  31954. var a = self.words[0] | 0;
  31955. var b = num.words[0] | 0;
  31956. var r = a * b;
  31957. var lo = r & 0x3ffffff;
  31958. var carry = (r / 0x4000000) | 0;
  31959. out.words[0] = lo;
  31960. for (var k = 1; k < len; k++) {
  31961. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  31962. // note that ncarry could be >= 0x3ffffff
  31963. var ncarry = carry >>> 26;
  31964. var rword = carry & 0x3ffffff;
  31965. var maxJ = Math.min(k, num.length - 1);
  31966. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  31967. var i = (k - j) | 0;
  31968. a = self.words[i] | 0;
  31969. b = num.words[j] | 0;
  31970. r = a * b + rword;
  31971. ncarry += (r / 0x4000000) | 0;
  31972. rword = r & 0x3ffffff;
  31973. }
  31974. out.words[k] = rword | 0;
  31975. carry = ncarry | 0;
  31976. }
  31977. if (carry !== 0) {
  31978. out.words[k] = carry | 0;
  31979. } else {
  31980. out.length--;
  31981. }
  31982. return out.strip();
  31983. }
  31984. // TODO(indutny): it may be reasonable to omit it for users who don't need
  31985. // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
  31986. // multiplication (like elliptic secp256k1).
  31987. var comb10MulTo = function comb10MulTo (self, num, out) {
  31988. var a = self.words;
  31989. var b = num.words;
  31990. var o = out.words;
  31991. var c = 0;
  31992. var lo;
  31993. var mid;
  31994. var hi;
  31995. var a0 = a[0] | 0;
  31996. var al0 = a0 & 0x1fff;
  31997. var ah0 = a0 >>> 13;
  31998. var a1 = a[1] | 0;
  31999. var al1 = a1 & 0x1fff;
  32000. var ah1 = a1 >>> 13;
  32001. var a2 = a[2] | 0;
  32002. var al2 = a2 & 0x1fff;
  32003. var ah2 = a2 >>> 13;
  32004. var a3 = a[3] | 0;
  32005. var al3 = a3 & 0x1fff;
  32006. var ah3 = a3 >>> 13;
  32007. var a4 = a[4] | 0;
  32008. var al4 = a4 & 0x1fff;
  32009. var ah4 = a4 >>> 13;
  32010. var a5 = a[5] | 0;
  32011. var al5 = a5 & 0x1fff;
  32012. var ah5 = a5 >>> 13;
  32013. var a6 = a[6] | 0;
  32014. var al6 = a6 & 0x1fff;
  32015. var ah6 = a6 >>> 13;
  32016. var a7 = a[7] | 0;
  32017. var al7 = a7 & 0x1fff;
  32018. var ah7 = a7 >>> 13;
  32019. var a8 = a[8] | 0;
  32020. var al8 = a8 & 0x1fff;
  32021. var ah8 = a8 >>> 13;
  32022. var a9 = a[9] | 0;
  32023. var al9 = a9 & 0x1fff;
  32024. var ah9 = a9 >>> 13;
  32025. var b0 = b[0] | 0;
  32026. var bl0 = b0 & 0x1fff;
  32027. var bh0 = b0 >>> 13;
  32028. var b1 = b[1] | 0;
  32029. var bl1 = b1 & 0x1fff;
  32030. var bh1 = b1 >>> 13;
  32031. var b2 = b[2] | 0;
  32032. var bl2 = b2 & 0x1fff;
  32033. var bh2 = b2 >>> 13;
  32034. var b3 = b[3] | 0;
  32035. var bl3 = b3 & 0x1fff;
  32036. var bh3 = b3 >>> 13;
  32037. var b4 = b[4] | 0;
  32038. var bl4 = b4 & 0x1fff;
  32039. var bh4 = b4 >>> 13;
  32040. var b5 = b[5] | 0;
  32041. var bl5 = b5 & 0x1fff;
  32042. var bh5 = b5 >>> 13;
  32043. var b6 = b[6] | 0;
  32044. var bl6 = b6 & 0x1fff;
  32045. var bh6 = b6 >>> 13;
  32046. var b7 = b[7] | 0;
  32047. var bl7 = b7 & 0x1fff;
  32048. var bh7 = b7 >>> 13;
  32049. var b8 = b[8] | 0;
  32050. var bl8 = b8 & 0x1fff;
  32051. var bh8 = b8 >>> 13;
  32052. var b9 = b[9] | 0;
  32053. var bl9 = b9 & 0x1fff;
  32054. var bh9 = b9 >>> 13;
  32055. out.negative = self.negative ^ num.negative;
  32056. out.length = 19;
  32057. /* k = 0 */
  32058. lo = Math.imul(al0, bl0);
  32059. mid = Math.imul(al0, bh0);
  32060. mid = (mid + Math.imul(ah0, bl0)) | 0;
  32061. hi = Math.imul(ah0, bh0);
  32062. var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32063. c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
  32064. w0 &= 0x3ffffff;
  32065. /* k = 1 */
  32066. lo = Math.imul(al1, bl0);
  32067. mid = Math.imul(al1, bh0);
  32068. mid = (mid + Math.imul(ah1, bl0)) | 0;
  32069. hi = Math.imul(ah1, bh0);
  32070. lo = (lo + Math.imul(al0, bl1)) | 0;
  32071. mid = (mid + Math.imul(al0, bh1)) | 0;
  32072. mid = (mid + Math.imul(ah0, bl1)) | 0;
  32073. hi = (hi + Math.imul(ah0, bh1)) | 0;
  32074. var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32075. c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
  32076. w1 &= 0x3ffffff;
  32077. /* k = 2 */
  32078. lo = Math.imul(al2, bl0);
  32079. mid = Math.imul(al2, bh0);
  32080. mid = (mid + Math.imul(ah2, bl0)) | 0;
  32081. hi = Math.imul(ah2, bh0);
  32082. lo = (lo + Math.imul(al1, bl1)) | 0;
  32083. mid = (mid + Math.imul(al1, bh1)) | 0;
  32084. mid = (mid + Math.imul(ah1, bl1)) | 0;
  32085. hi = (hi + Math.imul(ah1, bh1)) | 0;
  32086. lo = (lo + Math.imul(al0, bl2)) | 0;
  32087. mid = (mid + Math.imul(al0, bh2)) | 0;
  32088. mid = (mid + Math.imul(ah0, bl2)) | 0;
  32089. hi = (hi + Math.imul(ah0, bh2)) | 0;
  32090. var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32091. c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
  32092. w2 &= 0x3ffffff;
  32093. /* k = 3 */
  32094. lo = Math.imul(al3, bl0);
  32095. mid = Math.imul(al3, bh0);
  32096. mid = (mid + Math.imul(ah3, bl0)) | 0;
  32097. hi = Math.imul(ah3, bh0);
  32098. lo = (lo + Math.imul(al2, bl1)) | 0;
  32099. mid = (mid + Math.imul(al2, bh1)) | 0;
  32100. mid = (mid + Math.imul(ah2, bl1)) | 0;
  32101. hi = (hi + Math.imul(ah2, bh1)) | 0;
  32102. lo = (lo + Math.imul(al1, bl2)) | 0;
  32103. mid = (mid + Math.imul(al1, bh2)) | 0;
  32104. mid = (mid + Math.imul(ah1, bl2)) | 0;
  32105. hi = (hi + Math.imul(ah1, bh2)) | 0;
  32106. lo = (lo + Math.imul(al0, bl3)) | 0;
  32107. mid = (mid + Math.imul(al0, bh3)) | 0;
  32108. mid = (mid + Math.imul(ah0, bl3)) | 0;
  32109. hi = (hi + Math.imul(ah0, bh3)) | 0;
  32110. var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32111. c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
  32112. w3 &= 0x3ffffff;
  32113. /* k = 4 */
  32114. lo = Math.imul(al4, bl0);
  32115. mid = Math.imul(al4, bh0);
  32116. mid = (mid + Math.imul(ah4, bl0)) | 0;
  32117. hi = Math.imul(ah4, bh0);
  32118. lo = (lo + Math.imul(al3, bl1)) | 0;
  32119. mid = (mid + Math.imul(al3, bh1)) | 0;
  32120. mid = (mid + Math.imul(ah3, bl1)) | 0;
  32121. hi = (hi + Math.imul(ah3, bh1)) | 0;
  32122. lo = (lo + Math.imul(al2, bl2)) | 0;
  32123. mid = (mid + Math.imul(al2, bh2)) | 0;
  32124. mid = (mid + Math.imul(ah2, bl2)) | 0;
  32125. hi = (hi + Math.imul(ah2, bh2)) | 0;
  32126. lo = (lo + Math.imul(al1, bl3)) | 0;
  32127. mid = (mid + Math.imul(al1, bh3)) | 0;
  32128. mid = (mid + Math.imul(ah1, bl3)) | 0;
  32129. hi = (hi + Math.imul(ah1, bh3)) | 0;
  32130. lo = (lo + Math.imul(al0, bl4)) | 0;
  32131. mid = (mid + Math.imul(al0, bh4)) | 0;
  32132. mid = (mid + Math.imul(ah0, bl4)) | 0;
  32133. hi = (hi + Math.imul(ah0, bh4)) | 0;
  32134. var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32135. c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
  32136. w4 &= 0x3ffffff;
  32137. /* k = 5 */
  32138. lo = Math.imul(al5, bl0);
  32139. mid = Math.imul(al5, bh0);
  32140. mid = (mid + Math.imul(ah5, bl0)) | 0;
  32141. hi = Math.imul(ah5, bh0);
  32142. lo = (lo + Math.imul(al4, bl1)) | 0;
  32143. mid = (mid + Math.imul(al4, bh1)) | 0;
  32144. mid = (mid + Math.imul(ah4, bl1)) | 0;
  32145. hi = (hi + Math.imul(ah4, bh1)) | 0;
  32146. lo = (lo + Math.imul(al3, bl2)) | 0;
  32147. mid = (mid + Math.imul(al3, bh2)) | 0;
  32148. mid = (mid + Math.imul(ah3, bl2)) | 0;
  32149. hi = (hi + Math.imul(ah3, bh2)) | 0;
  32150. lo = (lo + Math.imul(al2, bl3)) | 0;
  32151. mid = (mid + Math.imul(al2, bh3)) | 0;
  32152. mid = (mid + Math.imul(ah2, bl3)) | 0;
  32153. hi = (hi + Math.imul(ah2, bh3)) | 0;
  32154. lo = (lo + Math.imul(al1, bl4)) | 0;
  32155. mid = (mid + Math.imul(al1, bh4)) | 0;
  32156. mid = (mid + Math.imul(ah1, bl4)) | 0;
  32157. hi = (hi + Math.imul(ah1, bh4)) | 0;
  32158. lo = (lo + Math.imul(al0, bl5)) | 0;
  32159. mid = (mid + Math.imul(al0, bh5)) | 0;
  32160. mid = (mid + Math.imul(ah0, bl5)) | 0;
  32161. hi = (hi + Math.imul(ah0, bh5)) | 0;
  32162. var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32163. c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
  32164. w5 &= 0x3ffffff;
  32165. /* k = 6 */
  32166. lo = Math.imul(al6, bl0);
  32167. mid = Math.imul(al6, bh0);
  32168. mid = (mid + Math.imul(ah6, bl0)) | 0;
  32169. hi = Math.imul(ah6, bh0);
  32170. lo = (lo + Math.imul(al5, bl1)) | 0;
  32171. mid = (mid + Math.imul(al5, bh1)) | 0;
  32172. mid = (mid + Math.imul(ah5, bl1)) | 0;
  32173. hi = (hi + Math.imul(ah5, bh1)) | 0;
  32174. lo = (lo + Math.imul(al4, bl2)) | 0;
  32175. mid = (mid + Math.imul(al4, bh2)) | 0;
  32176. mid = (mid + Math.imul(ah4, bl2)) | 0;
  32177. hi = (hi + Math.imul(ah4, bh2)) | 0;
  32178. lo = (lo + Math.imul(al3, bl3)) | 0;
  32179. mid = (mid + Math.imul(al3, bh3)) | 0;
  32180. mid = (mid + Math.imul(ah3, bl3)) | 0;
  32181. hi = (hi + Math.imul(ah3, bh3)) | 0;
  32182. lo = (lo + Math.imul(al2, bl4)) | 0;
  32183. mid = (mid + Math.imul(al2, bh4)) | 0;
  32184. mid = (mid + Math.imul(ah2, bl4)) | 0;
  32185. hi = (hi + Math.imul(ah2, bh4)) | 0;
  32186. lo = (lo + Math.imul(al1, bl5)) | 0;
  32187. mid = (mid + Math.imul(al1, bh5)) | 0;
  32188. mid = (mid + Math.imul(ah1, bl5)) | 0;
  32189. hi = (hi + Math.imul(ah1, bh5)) | 0;
  32190. lo = (lo + Math.imul(al0, bl6)) | 0;
  32191. mid = (mid + Math.imul(al0, bh6)) | 0;
  32192. mid = (mid + Math.imul(ah0, bl6)) | 0;
  32193. hi = (hi + Math.imul(ah0, bh6)) | 0;
  32194. var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32195. c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
  32196. w6 &= 0x3ffffff;
  32197. /* k = 7 */
  32198. lo = Math.imul(al7, bl0);
  32199. mid = Math.imul(al7, bh0);
  32200. mid = (mid + Math.imul(ah7, bl0)) | 0;
  32201. hi = Math.imul(ah7, bh0);
  32202. lo = (lo + Math.imul(al6, bl1)) | 0;
  32203. mid = (mid + Math.imul(al6, bh1)) | 0;
  32204. mid = (mid + Math.imul(ah6, bl1)) | 0;
  32205. hi = (hi + Math.imul(ah6, bh1)) | 0;
  32206. lo = (lo + Math.imul(al5, bl2)) | 0;
  32207. mid = (mid + Math.imul(al5, bh2)) | 0;
  32208. mid = (mid + Math.imul(ah5, bl2)) | 0;
  32209. hi = (hi + Math.imul(ah5, bh2)) | 0;
  32210. lo = (lo + Math.imul(al4, bl3)) | 0;
  32211. mid = (mid + Math.imul(al4, bh3)) | 0;
  32212. mid = (mid + Math.imul(ah4, bl3)) | 0;
  32213. hi = (hi + Math.imul(ah4, bh3)) | 0;
  32214. lo = (lo + Math.imul(al3, bl4)) | 0;
  32215. mid = (mid + Math.imul(al3, bh4)) | 0;
  32216. mid = (mid + Math.imul(ah3, bl4)) | 0;
  32217. hi = (hi + Math.imul(ah3, bh4)) | 0;
  32218. lo = (lo + Math.imul(al2, bl5)) | 0;
  32219. mid = (mid + Math.imul(al2, bh5)) | 0;
  32220. mid = (mid + Math.imul(ah2, bl5)) | 0;
  32221. hi = (hi + Math.imul(ah2, bh5)) | 0;
  32222. lo = (lo + Math.imul(al1, bl6)) | 0;
  32223. mid = (mid + Math.imul(al1, bh6)) | 0;
  32224. mid = (mid + Math.imul(ah1, bl6)) | 0;
  32225. hi = (hi + Math.imul(ah1, bh6)) | 0;
  32226. lo = (lo + Math.imul(al0, bl7)) | 0;
  32227. mid = (mid + Math.imul(al0, bh7)) | 0;
  32228. mid = (mid + Math.imul(ah0, bl7)) | 0;
  32229. hi = (hi + Math.imul(ah0, bh7)) | 0;
  32230. var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32231. c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
  32232. w7 &= 0x3ffffff;
  32233. /* k = 8 */
  32234. lo = Math.imul(al8, bl0);
  32235. mid = Math.imul(al8, bh0);
  32236. mid = (mid + Math.imul(ah8, bl0)) | 0;
  32237. hi = Math.imul(ah8, bh0);
  32238. lo = (lo + Math.imul(al7, bl1)) | 0;
  32239. mid = (mid + Math.imul(al7, bh1)) | 0;
  32240. mid = (mid + Math.imul(ah7, bl1)) | 0;
  32241. hi = (hi + Math.imul(ah7, bh1)) | 0;
  32242. lo = (lo + Math.imul(al6, bl2)) | 0;
  32243. mid = (mid + Math.imul(al6, bh2)) | 0;
  32244. mid = (mid + Math.imul(ah6, bl2)) | 0;
  32245. hi = (hi + Math.imul(ah6, bh2)) | 0;
  32246. lo = (lo + Math.imul(al5, bl3)) | 0;
  32247. mid = (mid + Math.imul(al5, bh3)) | 0;
  32248. mid = (mid + Math.imul(ah5, bl3)) | 0;
  32249. hi = (hi + Math.imul(ah5, bh3)) | 0;
  32250. lo = (lo + Math.imul(al4, bl4)) | 0;
  32251. mid = (mid + Math.imul(al4, bh4)) | 0;
  32252. mid = (mid + Math.imul(ah4, bl4)) | 0;
  32253. hi = (hi + Math.imul(ah4, bh4)) | 0;
  32254. lo = (lo + Math.imul(al3, bl5)) | 0;
  32255. mid = (mid + Math.imul(al3, bh5)) | 0;
  32256. mid = (mid + Math.imul(ah3, bl5)) | 0;
  32257. hi = (hi + Math.imul(ah3, bh5)) | 0;
  32258. lo = (lo + Math.imul(al2, bl6)) | 0;
  32259. mid = (mid + Math.imul(al2, bh6)) | 0;
  32260. mid = (mid + Math.imul(ah2, bl6)) | 0;
  32261. hi = (hi + Math.imul(ah2, bh6)) | 0;
  32262. lo = (lo + Math.imul(al1, bl7)) | 0;
  32263. mid = (mid + Math.imul(al1, bh7)) | 0;
  32264. mid = (mid + Math.imul(ah1, bl7)) | 0;
  32265. hi = (hi + Math.imul(ah1, bh7)) | 0;
  32266. lo = (lo + Math.imul(al0, bl8)) | 0;
  32267. mid = (mid + Math.imul(al0, bh8)) | 0;
  32268. mid = (mid + Math.imul(ah0, bl8)) | 0;
  32269. hi = (hi + Math.imul(ah0, bh8)) | 0;
  32270. var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32271. c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
  32272. w8 &= 0x3ffffff;
  32273. /* k = 9 */
  32274. lo = Math.imul(al9, bl0);
  32275. mid = Math.imul(al9, bh0);
  32276. mid = (mid + Math.imul(ah9, bl0)) | 0;
  32277. hi = Math.imul(ah9, bh0);
  32278. lo = (lo + Math.imul(al8, bl1)) | 0;
  32279. mid = (mid + Math.imul(al8, bh1)) | 0;
  32280. mid = (mid + Math.imul(ah8, bl1)) | 0;
  32281. hi = (hi + Math.imul(ah8, bh1)) | 0;
  32282. lo = (lo + Math.imul(al7, bl2)) | 0;
  32283. mid = (mid + Math.imul(al7, bh2)) | 0;
  32284. mid = (mid + Math.imul(ah7, bl2)) | 0;
  32285. hi = (hi + Math.imul(ah7, bh2)) | 0;
  32286. lo = (lo + Math.imul(al6, bl3)) | 0;
  32287. mid = (mid + Math.imul(al6, bh3)) | 0;
  32288. mid = (mid + Math.imul(ah6, bl3)) | 0;
  32289. hi = (hi + Math.imul(ah6, bh3)) | 0;
  32290. lo = (lo + Math.imul(al5, bl4)) | 0;
  32291. mid = (mid + Math.imul(al5, bh4)) | 0;
  32292. mid = (mid + Math.imul(ah5, bl4)) | 0;
  32293. hi = (hi + Math.imul(ah5, bh4)) | 0;
  32294. lo = (lo + Math.imul(al4, bl5)) | 0;
  32295. mid = (mid + Math.imul(al4, bh5)) | 0;
  32296. mid = (mid + Math.imul(ah4, bl5)) | 0;
  32297. hi = (hi + Math.imul(ah4, bh5)) | 0;
  32298. lo = (lo + Math.imul(al3, bl6)) | 0;
  32299. mid = (mid + Math.imul(al3, bh6)) | 0;
  32300. mid = (mid + Math.imul(ah3, bl6)) | 0;
  32301. hi = (hi + Math.imul(ah3, bh6)) | 0;
  32302. lo = (lo + Math.imul(al2, bl7)) | 0;
  32303. mid = (mid + Math.imul(al2, bh7)) | 0;
  32304. mid = (mid + Math.imul(ah2, bl7)) | 0;
  32305. hi = (hi + Math.imul(ah2, bh7)) | 0;
  32306. lo = (lo + Math.imul(al1, bl8)) | 0;
  32307. mid = (mid + Math.imul(al1, bh8)) | 0;
  32308. mid = (mid + Math.imul(ah1, bl8)) | 0;
  32309. hi = (hi + Math.imul(ah1, bh8)) | 0;
  32310. lo = (lo + Math.imul(al0, bl9)) | 0;
  32311. mid = (mid + Math.imul(al0, bh9)) | 0;
  32312. mid = (mid + Math.imul(ah0, bl9)) | 0;
  32313. hi = (hi + Math.imul(ah0, bh9)) | 0;
  32314. var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32315. c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
  32316. w9 &= 0x3ffffff;
  32317. /* k = 10 */
  32318. lo = Math.imul(al9, bl1);
  32319. mid = Math.imul(al9, bh1);
  32320. mid = (mid + Math.imul(ah9, bl1)) | 0;
  32321. hi = Math.imul(ah9, bh1);
  32322. lo = (lo + Math.imul(al8, bl2)) | 0;
  32323. mid = (mid + Math.imul(al8, bh2)) | 0;
  32324. mid = (mid + Math.imul(ah8, bl2)) | 0;
  32325. hi = (hi + Math.imul(ah8, bh2)) | 0;
  32326. lo = (lo + Math.imul(al7, bl3)) | 0;
  32327. mid = (mid + Math.imul(al7, bh3)) | 0;
  32328. mid = (mid + Math.imul(ah7, bl3)) | 0;
  32329. hi = (hi + Math.imul(ah7, bh3)) | 0;
  32330. lo = (lo + Math.imul(al6, bl4)) | 0;
  32331. mid = (mid + Math.imul(al6, bh4)) | 0;
  32332. mid = (mid + Math.imul(ah6, bl4)) | 0;
  32333. hi = (hi + Math.imul(ah6, bh4)) | 0;
  32334. lo = (lo + Math.imul(al5, bl5)) | 0;
  32335. mid = (mid + Math.imul(al5, bh5)) | 0;
  32336. mid = (mid + Math.imul(ah5, bl5)) | 0;
  32337. hi = (hi + Math.imul(ah5, bh5)) | 0;
  32338. lo = (lo + Math.imul(al4, bl6)) | 0;
  32339. mid = (mid + Math.imul(al4, bh6)) | 0;
  32340. mid = (mid + Math.imul(ah4, bl6)) | 0;
  32341. hi = (hi + Math.imul(ah4, bh6)) | 0;
  32342. lo = (lo + Math.imul(al3, bl7)) | 0;
  32343. mid = (mid + Math.imul(al3, bh7)) | 0;
  32344. mid = (mid + Math.imul(ah3, bl7)) | 0;
  32345. hi = (hi + Math.imul(ah3, bh7)) | 0;
  32346. lo = (lo + Math.imul(al2, bl8)) | 0;
  32347. mid = (mid + Math.imul(al2, bh8)) | 0;
  32348. mid = (mid + Math.imul(ah2, bl8)) | 0;
  32349. hi = (hi + Math.imul(ah2, bh8)) | 0;
  32350. lo = (lo + Math.imul(al1, bl9)) | 0;
  32351. mid = (mid + Math.imul(al1, bh9)) | 0;
  32352. mid = (mid + Math.imul(ah1, bl9)) | 0;
  32353. hi = (hi + Math.imul(ah1, bh9)) | 0;
  32354. var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32355. c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
  32356. w10 &= 0x3ffffff;
  32357. /* k = 11 */
  32358. lo = Math.imul(al9, bl2);
  32359. mid = Math.imul(al9, bh2);
  32360. mid = (mid + Math.imul(ah9, bl2)) | 0;
  32361. hi = Math.imul(ah9, bh2);
  32362. lo = (lo + Math.imul(al8, bl3)) | 0;
  32363. mid = (mid + Math.imul(al8, bh3)) | 0;
  32364. mid = (mid + Math.imul(ah8, bl3)) | 0;
  32365. hi = (hi + Math.imul(ah8, bh3)) | 0;
  32366. lo = (lo + Math.imul(al7, bl4)) | 0;
  32367. mid = (mid + Math.imul(al7, bh4)) | 0;
  32368. mid = (mid + Math.imul(ah7, bl4)) | 0;
  32369. hi = (hi + Math.imul(ah7, bh4)) | 0;
  32370. lo = (lo + Math.imul(al6, bl5)) | 0;
  32371. mid = (mid + Math.imul(al6, bh5)) | 0;
  32372. mid = (mid + Math.imul(ah6, bl5)) | 0;
  32373. hi = (hi + Math.imul(ah6, bh5)) | 0;
  32374. lo = (lo + Math.imul(al5, bl6)) | 0;
  32375. mid = (mid + Math.imul(al5, bh6)) | 0;
  32376. mid = (mid + Math.imul(ah5, bl6)) | 0;
  32377. hi = (hi + Math.imul(ah5, bh6)) | 0;
  32378. lo = (lo + Math.imul(al4, bl7)) | 0;
  32379. mid = (mid + Math.imul(al4, bh7)) | 0;
  32380. mid = (mid + Math.imul(ah4, bl7)) | 0;
  32381. hi = (hi + Math.imul(ah4, bh7)) | 0;
  32382. lo = (lo + Math.imul(al3, bl8)) | 0;
  32383. mid = (mid + Math.imul(al3, bh8)) | 0;
  32384. mid = (mid + Math.imul(ah3, bl8)) | 0;
  32385. hi = (hi + Math.imul(ah3, bh8)) | 0;
  32386. lo = (lo + Math.imul(al2, bl9)) | 0;
  32387. mid = (mid + Math.imul(al2, bh9)) | 0;
  32388. mid = (mid + Math.imul(ah2, bl9)) | 0;
  32389. hi = (hi + Math.imul(ah2, bh9)) | 0;
  32390. var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32391. c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
  32392. w11 &= 0x3ffffff;
  32393. /* k = 12 */
  32394. lo = Math.imul(al9, bl3);
  32395. mid = Math.imul(al9, bh3);
  32396. mid = (mid + Math.imul(ah9, bl3)) | 0;
  32397. hi = Math.imul(ah9, bh3);
  32398. lo = (lo + Math.imul(al8, bl4)) | 0;
  32399. mid = (mid + Math.imul(al8, bh4)) | 0;
  32400. mid = (mid + Math.imul(ah8, bl4)) | 0;
  32401. hi = (hi + Math.imul(ah8, bh4)) | 0;
  32402. lo = (lo + Math.imul(al7, bl5)) | 0;
  32403. mid = (mid + Math.imul(al7, bh5)) | 0;
  32404. mid = (mid + Math.imul(ah7, bl5)) | 0;
  32405. hi = (hi + Math.imul(ah7, bh5)) | 0;
  32406. lo = (lo + Math.imul(al6, bl6)) | 0;
  32407. mid = (mid + Math.imul(al6, bh6)) | 0;
  32408. mid = (mid + Math.imul(ah6, bl6)) | 0;
  32409. hi = (hi + Math.imul(ah6, bh6)) | 0;
  32410. lo = (lo + Math.imul(al5, bl7)) | 0;
  32411. mid = (mid + Math.imul(al5, bh7)) | 0;
  32412. mid = (mid + Math.imul(ah5, bl7)) | 0;
  32413. hi = (hi + Math.imul(ah5, bh7)) | 0;
  32414. lo = (lo + Math.imul(al4, bl8)) | 0;
  32415. mid = (mid + Math.imul(al4, bh8)) | 0;
  32416. mid = (mid + Math.imul(ah4, bl8)) | 0;
  32417. hi = (hi + Math.imul(ah4, bh8)) | 0;
  32418. lo = (lo + Math.imul(al3, bl9)) | 0;
  32419. mid = (mid + Math.imul(al3, bh9)) | 0;
  32420. mid = (mid + Math.imul(ah3, bl9)) | 0;
  32421. hi = (hi + Math.imul(ah3, bh9)) | 0;
  32422. var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32423. c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
  32424. w12 &= 0x3ffffff;
  32425. /* k = 13 */
  32426. lo = Math.imul(al9, bl4);
  32427. mid = Math.imul(al9, bh4);
  32428. mid = (mid + Math.imul(ah9, bl4)) | 0;
  32429. hi = Math.imul(ah9, bh4);
  32430. lo = (lo + Math.imul(al8, bl5)) | 0;
  32431. mid = (mid + Math.imul(al8, bh5)) | 0;
  32432. mid = (mid + Math.imul(ah8, bl5)) | 0;
  32433. hi = (hi + Math.imul(ah8, bh5)) | 0;
  32434. lo = (lo + Math.imul(al7, bl6)) | 0;
  32435. mid = (mid + Math.imul(al7, bh6)) | 0;
  32436. mid = (mid + Math.imul(ah7, bl6)) | 0;
  32437. hi = (hi + Math.imul(ah7, bh6)) | 0;
  32438. lo = (lo + Math.imul(al6, bl7)) | 0;
  32439. mid = (mid + Math.imul(al6, bh7)) | 0;
  32440. mid = (mid + Math.imul(ah6, bl7)) | 0;
  32441. hi = (hi + Math.imul(ah6, bh7)) | 0;
  32442. lo = (lo + Math.imul(al5, bl8)) | 0;
  32443. mid = (mid + Math.imul(al5, bh8)) | 0;
  32444. mid = (mid + Math.imul(ah5, bl8)) | 0;
  32445. hi = (hi + Math.imul(ah5, bh8)) | 0;
  32446. lo = (lo + Math.imul(al4, bl9)) | 0;
  32447. mid = (mid + Math.imul(al4, bh9)) | 0;
  32448. mid = (mid + Math.imul(ah4, bl9)) | 0;
  32449. hi = (hi + Math.imul(ah4, bh9)) | 0;
  32450. var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32451. c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
  32452. w13 &= 0x3ffffff;
  32453. /* k = 14 */
  32454. lo = Math.imul(al9, bl5);
  32455. mid = Math.imul(al9, bh5);
  32456. mid = (mid + Math.imul(ah9, bl5)) | 0;
  32457. hi = Math.imul(ah9, bh5);
  32458. lo = (lo + Math.imul(al8, bl6)) | 0;
  32459. mid = (mid + Math.imul(al8, bh6)) | 0;
  32460. mid = (mid + Math.imul(ah8, bl6)) | 0;
  32461. hi = (hi + Math.imul(ah8, bh6)) | 0;
  32462. lo = (lo + Math.imul(al7, bl7)) | 0;
  32463. mid = (mid + Math.imul(al7, bh7)) | 0;
  32464. mid = (mid + Math.imul(ah7, bl7)) | 0;
  32465. hi = (hi + Math.imul(ah7, bh7)) | 0;
  32466. lo = (lo + Math.imul(al6, bl8)) | 0;
  32467. mid = (mid + Math.imul(al6, bh8)) | 0;
  32468. mid = (mid + Math.imul(ah6, bl8)) | 0;
  32469. hi = (hi + Math.imul(ah6, bh8)) | 0;
  32470. lo = (lo + Math.imul(al5, bl9)) | 0;
  32471. mid = (mid + Math.imul(al5, bh9)) | 0;
  32472. mid = (mid + Math.imul(ah5, bl9)) | 0;
  32473. hi = (hi + Math.imul(ah5, bh9)) | 0;
  32474. var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32475. c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
  32476. w14 &= 0x3ffffff;
  32477. /* k = 15 */
  32478. lo = Math.imul(al9, bl6);
  32479. mid = Math.imul(al9, bh6);
  32480. mid = (mid + Math.imul(ah9, bl6)) | 0;
  32481. hi = Math.imul(ah9, bh6);
  32482. lo = (lo + Math.imul(al8, bl7)) | 0;
  32483. mid = (mid + Math.imul(al8, bh7)) | 0;
  32484. mid = (mid + Math.imul(ah8, bl7)) | 0;
  32485. hi = (hi + Math.imul(ah8, bh7)) | 0;
  32486. lo = (lo + Math.imul(al7, bl8)) | 0;
  32487. mid = (mid + Math.imul(al7, bh8)) | 0;
  32488. mid = (mid + Math.imul(ah7, bl8)) | 0;
  32489. hi = (hi + Math.imul(ah7, bh8)) | 0;
  32490. lo = (lo + Math.imul(al6, bl9)) | 0;
  32491. mid = (mid + Math.imul(al6, bh9)) | 0;
  32492. mid = (mid + Math.imul(ah6, bl9)) | 0;
  32493. hi = (hi + Math.imul(ah6, bh9)) | 0;
  32494. var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32495. c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
  32496. w15 &= 0x3ffffff;
  32497. /* k = 16 */
  32498. lo = Math.imul(al9, bl7);
  32499. mid = Math.imul(al9, bh7);
  32500. mid = (mid + Math.imul(ah9, bl7)) | 0;
  32501. hi = Math.imul(ah9, bh7);
  32502. lo = (lo + Math.imul(al8, bl8)) | 0;
  32503. mid = (mid + Math.imul(al8, bh8)) | 0;
  32504. mid = (mid + Math.imul(ah8, bl8)) | 0;
  32505. hi = (hi + Math.imul(ah8, bh8)) | 0;
  32506. lo = (lo + Math.imul(al7, bl9)) | 0;
  32507. mid = (mid + Math.imul(al7, bh9)) | 0;
  32508. mid = (mid + Math.imul(ah7, bl9)) | 0;
  32509. hi = (hi + Math.imul(ah7, bh9)) | 0;
  32510. var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32511. c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
  32512. w16 &= 0x3ffffff;
  32513. /* k = 17 */
  32514. lo = Math.imul(al9, bl8);
  32515. mid = Math.imul(al9, bh8);
  32516. mid = (mid + Math.imul(ah9, bl8)) | 0;
  32517. hi = Math.imul(ah9, bh8);
  32518. lo = (lo + Math.imul(al8, bl9)) | 0;
  32519. mid = (mid + Math.imul(al8, bh9)) | 0;
  32520. mid = (mid + Math.imul(ah8, bl9)) | 0;
  32521. hi = (hi + Math.imul(ah8, bh9)) | 0;
  32522. var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32523. c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
  32524. w17 &= 0x3ffffff;
  32525. /* k = 18 */
  32526. lo = Math.imul(al9, bl9);
  32527. mid = Math.imul(al9, bh9);
  32528. mid = (mid + Math.imul(ah9, bl9)) | 0;
  32529. hi = Math.imul(ah9, bh9);
  32530. var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  32531. c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
  32532. w18 &= 0x3ffffff;
  32533. o[0] = w0;
  32534. o[1] = w1;
  32535. o[2] = w2;
  32536. o[3] = w3;
  32537. o[4] = w4;
  32538. o[5] = w5;
  32539. o[6] = w6;
  32540. o[7] = w7;
  32541. o[8] = w8;
  32542. o[9] = w9;
  32543. o[10] = w10;
  32544. o[11] = w11;
  32545. o[12] = w12;
  32546. o[13] = w13;
  32547. o[14] = w14;
  32548. o[15] = w15;
  32549. o[16] = w16;
  32550. o[17] = w17;
  32551. o[18] = w18;
  32552. if (c !== 0) {
  32553. o[19] = c;
  32554. out.length++;
  32555. }
  32556. return out;
  32557. };
  32558. // Polyfill comb
  32559. if (!Math.imul) {
  32560. comb10MulTo = smallMulTo;
  32561. }
  32562. function bigMulTo (self, num, out) {
  32563. out.negative = num.negative ^ self.negative;
  32564. out.length = self.length + num.length;
  32565. var carry = 0;
  32566. var hncarry = 0;
  32567. for (var k = 0; k < out.length - 1; k++) {
  32568. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  32569. // note that ncarry could be >= 0x3ffffff
  32570. var ncarry = hncarry;
  32571. hncarry = 0;
  32572. var rword = carry & 0x3ffffff;
  32573. var maxJ = Math.min(k, num.length - 1);
  32574. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  32575. var i = k - j;
  32576. var a = self.words[i] | 0;
  32577. var b = num.words[j] | 0;
  32578. var r = a * b;
  32579. var lo = r & 0x3ffffff;
  32580. ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
  32581. lo = (lo + rword) | 0;
  32582. rword = lo & 0x3ffffff;
  32583. ncarry = (ncarry + (lo >>> 26)) | 0;
  32584. hncarry += ncarry >>> 26;
  32585. ncarry &= 0x3ffffff;
  32586. }
  32587. out.words[k] = rword;
  32588. carry = ncarry;
  32589. ncarry = hncarry;
  32590. }
  32591. if (carry !== 0) {
  32592. out.words[k] = carry;
  32593. } else {
  32594. out.length--;
  32595. }
  32596. return out.strip();
  32597. }
  32598. function jumboMulTo (self, num, out) {
  32599. var fftm = new FFTM();
  32600. return fftm.mulp(self, num, out);
  32601. }
  32602. BN.prototype.mulTo = function mulTo (num, out) {
  32603. var res;
  32604. var len = this.length + num.length;
  32605. if (this.length === 10 && num.length === 10) {
  32606. res = comb10MulTo(this, num, out);
  32607. } else if (len < 63) {
  32608. res = smallMulTo(this, num, out);
  32609. } else if (len < 1024) {
  32610. res = bigMulTo(this, num, out);
  32611. } else {
  32612. res = jumboMulTo(this, num, out);
  32613. }
  32614. return res;
  32615. };
  32616. // Cooley-Tukey algorithm for FFT
  32617. // slightly revisited to rely on looping instead of recursion
  32618. function FFTM (x, y) {
  32619. this.x = x;
  32620. this.y = y;
  32621. }
  32622. FFTM.prototype.makeRBT = function makeRBT (N) {
  32623. var t = new Array(N);
  32624. var l = BN.prototype._countBits(N) - 1;
  32625. for (var i = 0; i < N; i++) {
  32626. t[i] = this.revBin(i, l, N);
  32627. }
  32628. return t;
  32629. };
  32630. // Returns binary-reversed representation of `x`
  32631. FFTM.prototype.revBin = function revBin (x, l, N) {
  32632. if (x === 0 || x === N - 1) return x;
  32633. var rb = 0;
  32634. for (var i = 0; i < l; i++) {
  32635. rb |= (x & 1) << (l - i - 1);
  32636. x >>= 1;
  32637. }
  32638. return rb;
  32639. };
  32640. // Performs "tweedling" phase, therefore 'emulating'
  32641. // behaviour of the recursive algorithm
  32642. FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
  32643. for (var i = 0; i < N; i++) {
  32644. rtws[i] = rws[rbt[i]];
  32645. itws[i] = iws[rbt[i]];
  32646. }
  32647. };
  32648. FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
  32649. this.permute(rbt, rws, iws, rtws, itws, N);
  32650. for (var s = 1; s < N; s <<= 1) {
  32651. var l = s << 1;
  32652. var rtwdf = Math.cos(2 * Math.PI / l);
  32653. var itwdf = Math.sin(2 * Math.PI / l);
  32654. for (var p = 0; p < N; p += l) {
  32655. var rtwdf_ = rtwdf;
  32656. var itwdf_ = itwdf;
  32657. for (var j = 0; j < s; j++) {
  32658. var re = rtws[p + j];
  32659. var ie = itws[p + j];
  32660. var ro = rtws[p + j + s];
  32661. var io = itws[p + j + s];
  32662. var rx = rtwdf_ * ro - itwdf_ * io;
  32663. io = rtwdf_ * io + itwdf_ * ro;
  32664. ro = rx;
  32665. rtws[p + j] = re + ro;
  32666. itws[p + j] = ie + io;
  32667. rtws[p + j + s] = re - ro;
  32668. itws[p + j + s] = ie - io;
  32669. /* jshint maxdepth : false */
  32670. if (j !== l) {
  32671. rx = rtwdf * rtwdf_ - itwdf * itwdf_;
  32672. itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
  32673. rtwdf_ = rx;
  32674. }
  32675. }
  32676. }
  32677. }
  32678. };
  32679. FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
  32680. var N = Math.max(m, n) | 1;
  32681. var odd = N & 1;
  32682. var i = 0;
  32683. for (N = N / 2 | 0; N; N = N >>> 1) {
  32684. i++;
  32685. }
  32686. return 1 << i + 1 + odd;
  32687. };
  32688. FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
  32689. if (N <= 1) return;
  32690. for (var i = 0; i < N / 2; i++) {
  32691. var t = rws[i];
  32692. rws[i] = rws[N - i - 1];
  32693. rws[N - i - 1] = t;
  32694. t = iws[i];
  32695. iws[i] = -iws[N - i - 1];
  32696. iws[N - i - 1] = -t;
  32697. }
  32698. };
  32699. FFTM.prototype.normalize13b = function normalize13b (ws, N) {
  32700. var carry = 0;
  32701. for (var i = 0; i < N / 2; i++) {
  32702. var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
  32703. Math.round(ws[2 * i] / N) +
  32704. carry;
  32705. ws[i] = w & 0x3ffffff;
  32706. if (w < 0x4000000) {
  32707. carry = 0;
  32708. } else {
  32709. carry = w / 0x4000000 | 0;
  32710. }
  32711. }
  32712. return ws;
  32713. };
  32714. FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
  32715. var carry = 0;
  32716. for (var i = 0; i < len; i++) {
  32717. carry = carry + (ws[i] | 0);
  32718. rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
  32719. rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
  32720. }
  32721. // Pad with zeroes
  32722. for (i = 2 * len; i < N; ++i) {
  32723. rws[i] = 0;
  32724. }
  32725. assert(carry === 0);
  32726. assert((carry & ~0x1fff) === 0);
  32727. };
  32728. FFTM.prototype.stub = function stub (N) {
  32729. var ph = new Array(N);
  32730. for (var i = 0; i < N; i++) {
  32731. ph[i] = 0;
  32732. }
  32733. return ph;
  32734. };
  32735. FFTM.prototype.mulp = function mulp (x, y, out) {
  32736. var N = 2 * this.guessLen13b(x.length, y.length);
  32737. var rbt = this.makeRBT(N);
  32738. var _ = this.stub(N);
  32739. var rws = new Array(N);
  32740. var rwst = new Array(N);
  32741. var iwst = new Array(N);
  32742. var nrws = new Array(N);
  32743. var nrwst = new Array(N);
  32744. var niwst = new Array(N);
  32745. var rmws = out.words;
  32746. rmws.length = N;
  32747. this.convert13b(x.words, x.length, rws, N);
  32748. this.convert13b(y.words, y.length, nrws, N);
  32749. this.transform(rws, _, rwst, iwst, N, rbt);
  32750. this.transform(nrws, _, nrwst, niwst, N, rbt);
  32751. for (var i = 0; i < N; i++) {
  32752. var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
  32753. iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
  32754. rwst[i] = rx;
  32755. }
  32756. this.conjugate(rwst, iwst, N);
  32757. this.transform(rwst, iwst, rmws, _, N, rbt);
  32758. this.conjugate(rmws, _, N);
  32759. this.normalize13b(rmws, N);
  32760. out.negative = x.negative ^ y.negative;
  32761. out.length = x.length + y.length;
  32762. return out.strip();
  32763. };
  32764. // Multiply `this` by `num`
  32765. BN.prototype.mul = function mul (num) {
  32766. var out = new BN(null);
  32767. out.words = new Array(this.length + num.length);
  32768. return this.mulTo(num, out);
  32769. };
  32770. // Multiply employing FFT
  32771. BN.prototype.mulf = function mulf (num) {
  32772. var out = new BN(null);
  32773. out.words = new Array(this.length + num.length);
  32774. return jumboMulTo(this, num, out);
  32775. };
  32776. // In-place Multiplication
  32777. BN.prototype.imul = function imul (num) {
  32778. return this.clone().mulTo(num, this);
  32779. };
  32780. BN.prototype.imuln = function imuln (num) {
  32781. assert(typeof num === 'number');
  32782. assert(num < 0x4000000);
  32783. // Carry
  32784. var carry = 0;
  32785. for (var i = 0; i < this.length; i++) {
  32786. var w = (this.words[i] | 0) * num;
  32787. var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
  32788. carry >>= 26;
  32789. carry += (w / 0x4000000) | 0;
  32790. // NOTE: lo is 27bit maximum
  32791. carry += lo >>> 26;
  32792. this.words[i] = lo & 0x3ffffff;
  32793. }
  32794. if (carry !== 0) {
  32795. this.words[i] = carry;
  32796. this.length++;
  32797. }
  32798. return this;
  32799. };
  32800. BN.prototype.muln = function muln (num) {
  32801. return this.clone().imuln(num);
  32802. };
  32803. // `this` * `this`
  32804. BN.prototype.sqr = function sqr () {
  32805. return this.mul(this);
  32806. };
  32807. // `this` * `this` in-place
  32808. BN.prototype.isqr = function isqr () {
  32809. return this.imul(this.clone());
  32810. };
  32811. // Math.pow(`this`, `num`)
  32812. BN.prototype.pow = function pow (num) {
  32813. var w = toBitArray(num);
  32814. if (w.length === 0) return new BN(1);
  32815. // Skip leading zeroes
  32816. var res = this;
  32817. for (var i = 0; i < w.length; i++, res = res.sqr()) {
  32818. if (w[i] !== 0) break;
  32819. }
  32820. if (++i < w.length) {
  32821. for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
  32822. if (w[i] === 0) continue;
  32823. res = res.mul(q);
  32824. }
  32825. }
  32826. return res;
  32827. };
  32828. // Shift-left in-place
  32829. BN.prototype.iushln = function iushln (bits) {
  32830. assert(typeof bits === 'number' && bits >= 0);
  32831. var r = bits % 26;
  32832. var s = (bits - r) / 26;
  32833. var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
  32834. var i;
  32835. if (r !== 0) {
  32836. var carry = 0;
  32837. for (i = 0; i < this.length; i++) {
  32838. var newCarry = this.words[i] & carryMask;
  32839. var c = ((this.words[i] | 0) - newCarry) << r;
  32840. this.words[i] = c | carry;
  32841. carry = newCarry >>> (26 - r);
  32842. }
  32843. if (carry) {
  32844. this.words[i] = carry;
  32845. this.length++;
  32846. }
  32847. }
  32848. if (s !== 0) {
  32849. for (i = this.length - 1; i >= 0; i--) {
  32850. this.words[i + s] = this.words[i];
  32851. }
  32852. for (i = 0; i < s; i++) {
  32853. this.words[i] = 0;
  32854. }
  32855. this.length += s;
  32856. }
  32857. return this.strip();
  32858. };
  32859. BN.prototype.ishln = function ishln (bits) {
  32860. // TODO(indutny): implement me
  32861. assert(this.negative === 0);
  32862. return this.iushln(bits);
  32863. };
  32864. // Shift-right in-place
  32865. // NOTE: `hint` is a lowest bit before trailing zeroes
  32866. // NOTE: if `extended` is present - it will be filled with destroyed bits
  32867. BN.prototype.iushrn = function iushrn (bits, hint, extended) {
  32868. assert(typeof bits === 'number' && bits >= 0);
  32869. var h;
  32870. if (hint) {
  32871. h = (hint - (hint % 26)) / 26;
  32872. } else {
  32873. h = 0;
  32874. }
  32875. var r = bits % 26;
  32876. var s = Math.min((bits - r) / 26, this.length);
  32877. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  32878. var maskedWords = extended;
  32879. h -= s;
  32880. h = Math.max(0, h);
  32881. // Extended mode, copy masked part
  32882. if (maskedWords) {
  32883. for (var i = 0; i < s; i++) {
  32884. maskedWords.words[i] = this.words[i];
  32885. }
  32886. maskedWords.length = s;
  32887. }
  32888. if (s === 0) {
  32889. // No-op, we should not move anything at all
  32890. } else if (this.length > s) {
  32891. this.length -= s;
  32892. for (i = 0; i < this.length; i++) {
  32893. this.words[i] = this.words[i + s];
  32894. }
  32895. } else {
  32896. this.words[0] = 0;
  32897. this.length = 1;
  32898. }
  32899. var carry = 0;
  32900. for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
  32901. var word = this.words[i] | 0;
  32902. this.words[i] = (carry << (26 - r)) | (word >>> r);
  32903. carry = word & mask;
  32904. }
  32905. // Push carried bits as a mask
  32906. if (maskedWords && carry !== 0) {
  32907. maskedWords.words[maskedWords.length++] = carry;
  32908. }
  32909. if (this.length === 0) {
  32910. this.words[0] = 0;
  32911. this.length = 1;
  32912. }
  32913. return this.strip();
  32914. };
  32915. BN.prototype.ishrn = function ishrn (bits, hint, extended) {
  32916. // TODO(indutny): implement me
  32917. assert(this.negative === 0);
  32918. return this.iushrn(bits, hint, extended);
  32919. };
  32920. // Shift-left
  32921. BN.prototype.shln = function shln (bits) {
  32922. return this.clone().ishln(bits);
  32923. };
  32924. BN.prototype.ushln = function ushln (bits) {
  32925. return this.clone().iushln(bits);
  32926. };
  32927. // Shift-right
  32928. BN.prototype.shrn = function shrn (bits) {
  32929. return this.clone().ishrn(bits);
  32930. };
  32931. BN.prototype.ushrn = function ushrn (bits) {
  32932. return this.clone().iushrn(bits);
  32933. };
  32934. // Test if n bit is set
  32935. BN.prototype.testn = function testn (bit) {
  32936. assert(typeof bit === 'number' && bit >= 0);
  32937. var r = bit % 26;
  32938. var s = (bit - r) / 26;
  32939. var q = 1 << r;
  32940. // Fast case: bit is much higher than all existing words
  32941. if (this.length <= s) return false;
  32942. // Check bit and return
  32943. var w = this.words[s];
  32944. return !!(w & q);
  32945. };
  32946. // Return only lowers bits of number (in-place)
  32947. BN.prototype.imaskn = function imaskn (bits) {
  32948. assert(typeof bits === 'number' && bits >= 0);
  32949. var r = bits % 26;
  32950. var s = (bits - r) / 26;
  32951. assert(this.negative === 0, 'imaskn works only with positive numbers');
  32952. if (this.length <= s) {
  32953. return this;
  32954. }
  32955. if (r !== 0) {
  32956. s++;
  32957. }
  32958. this.length = Math.min(s, this.length);
  32959. if (r !== 0) {
  32960. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  32961. this.words[this.length - 1] &= mask;
  32962. }
  32963. return this.strip();
  32964. };
  32965. // Return only lowers bits of number
  32966. BN.prototype.maskn = function maskn (bits) {
  32967. return this.clone().imaskn(bits);
  32968. };
  32969. // Add plain number `num` to `this`
  32970. BN.prototype.iaddn = function iaddn (num) {
  32971. assert(typeof num === 'number');
  32972. assert(num < 0x4000000);
  32973. if (num < 0) return this.isubn(-num);
  32974. // Possible sign change
  32975. if (this.negative !== 0) {
  32976. if (this.length === 1 && (this.words[0] | 0) < num) {
  32977. this.words[0] = num - (this.words[0] | 0);
  32978. this.negative = 0;
  32979. return this;
  32980. }
  32981. this.negative = 0;
  32982. this.isubn(num);
  32983. this.negative = 1;
  32984. return this;
  32985. }
  32986. // Add without checks
  32987. return this._iaddn(num);
  32988. };
  32989. BN.prototype._iaddn = function _iaddn (num) {
  32990. this.words[0] += num;
  32991. // Carry
  32992. for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
  32993. this.words[i] -= 0x4000000;
  32994. if (i === this.length - 1) {
  32995. this.words[i + 1] = 1;
  32996. } else {
  32997. this.words[i + 1]++;
  32998. }
  32999. }
  33000. this.length = Math.max(this.length, i + 1);
  33001. return this;
  33002. };
  33003. // Subtract plain number `num` from `this`
  33004. BN.prototype.isubn = function isubn (num) {
  33005. assert(typeof num === 'number');
  33006. assert(num < 0x4000000);
  33007. if (num < 0) return this.iaddn(-num);
  33008. if (this.negative !== 0) {
  33009. this.negative = 0;
  33010. this.iaddn(num);
  33011. this.negative = 1;
  33012. return this;
  33013. }
  33014. this.words[0] -= num;
  33015. if (this.length === 1 && this.words[0] < 0) {
  33016. this.words[0] = -this.words[0];
  33017. this.negative = 1;
  33018. } else {
  33019. // Carry
  33020. for (var i = 0; i < this.length && this.words[i] < 0; i++) {
  33021. this.words[i] += 0x4000000;
  33022. this.words[i + 1] -= 1;
  33023. }
  33024. }
  33025. return this.strip();
  33026. };
  33027. BN.prototype.addn = function addn (num) {
  33028. return this.clone().iaddn(num);
  33029. };
  33030. BN.prototype.subn = function subn (num) {
  33031. return this.clone().isubn(num);
  33032. };
  33033. BN.prototype.iabs = function iabs () {
  33034. this.negative = 0;
  33035. return this;
  33036. };
  33037. BN.prototype.abs = function abs () {
  33038. return this.clone().iabs();
  33039. };
  33040. BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
  33041. var len = num.length + shift;
  33042. var i;
  33043. this._expand(len);
  33044. var w;
  33045. var carry = 0;
  33046. for (i = 0; i < num.length; i++) {
  33047. w = (this.words[i + shift] | 0) + carry;
  33048. var right = (num.words[i] | 0) * mul;
  33049. w -= right & 0x3ffffff;
  33050. carry = (w >> 26) - ((right / 0x4000000) | 0);
  33051. this.words[i + shift] = w & 0x3ffffff;
  33052. }
  33053. for (; i < this.length - shift; i++) {
  33054. w = (this.words[i + shift] | 0) + carry;
  33055. carry = w >> 26;
  33056. this.words[i + shift] = w & 0x3ffffff;
  33057. }
  33058. if (carry === 0) return this.strip();
  33059. // Subtraction overflow
  33060. assert(carry === -1);
  33061. carry = 0;
  33062. for (i = 0; i < this.length; i++) {
  33063. w = -(this.words[i] | 0) + carry;
  33064. carry = w >> 26;
  33065. this.words[i] = w & 0x3ffffff;
  33066. }
  33067. this.negative = 1;
  33068. return this.strip();
  33069. };
  33070. BN.prototype._wordDiv = function _wordDiv (num, mode) {
  33071. var shift = this.length - num.length;
  33072. var a = this.clone();
  33073. var b = num;
  33074. // Normalize
  33075. var bhi = b.words[b.length - 1] | 0;
  33076. var bhiBits = this._countBits(bhi);
  33077. shift = 26 - bhiBits;
  33078. if (shift !== 0) {
  33079. b = b.ushln(shift);
  33080. a.iushln(shift);
  33081. bhi = b.words[b.length - 1] | 0;
  33082. }
  33083. // Initialize quotient
  33084. var m = a.length - b.length;
  33085. var q;
  33086. if (mode !== 'mod') {
  33087. q = new BN(null);
  33088. q.length = m + 1;
  33089. q.words = new Array(q.length);
  33090. for (var i = 0; i < q.length; i++) {
  33091. q.words[i] = 0;
  33092. }
  33093. }
  33094. var diff = a.clone()._ishlnsubmul(b, 1, m);
  33095. if (diff.negative === 0) {
  33096. a = diff;
  33097. if (q) {
  33098. q.words[m] = 1;
  33099. }
  33100. }
  33101. for (var j = m - 1; j >= 0; j--) {
  33102. var qj = (a.words[b.length + j] | 0) * 0x4000000 +
  33103. (a.words[b.length + j - 1] | 0);
  33104. // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
  33105. // (0x7ffffff)
  33106. qj = Math.min((qj / bhi) | 0, 0x3ffffff);
  33107. a._ishlnsubmul(b, qj, j);
  33108. while (a.negative !== 0) {
  33109. qj--;
  33110. a.negative = 0;
  33111. a._ishlnsubmul(b, 1, j);
  33112. if (!a.isZero()) {
  33113. a.negative ^= 1;
  33114. }
  33115. }
  33116. if (q) {
  33117. q.words[j] = qj;
  33118. }
  33119. }
  33120. if (q) {
  33121. q.strip();
  33122. }
  33123. a.strip();
  33124. // Denormalize
  33125. if (mode !== 'div' && shift !== 0) {
  33126. a.iushrn(shift);
  33127. }
  33128. return {
  33129. div: q || null,
  33130. mod: a
  33131. };
  33132. };
  33133. // NOTE: 1) `mode` can be set to `mod` to request mod only,
  33134. // to `div` to request div only, or be absent to
  33135. // request both div & mod
  33136. // 2) `positive` is true if unsigned mod is requested
  33137. BN.prototype.divmod = function divmod (num, mode, positive) {
  33138. assert(!num.isZero());
  33139. if (this.isZero()) {
  33140. return {
  33141. div: new BN(0),
  33142. mod: new BN(0)
  33143. };
  33144. }
  33145. var div, mod, res;
  33146. if (this.negative !== 0 && num.negative === 0) {
  33147. res = this.neg().divmod(num, mode);
  33148. if (mode !== 'mod') {
  33149. div = res.div.neg();
  33150. }
  33151. if (mode !== 'div') {
  33152. mod = res.mod.neg();
  33153. if (positive && mod.negative !== 0) {
  33154. mod.iadd(num);
  33155. }
  33156. }
  33157. return {
  33158. div: div,
  33159. mod: mod
  33160. };
  33161. }
  33162. if (this.negative === 0 && num.negative !== 0) {
  33163. res = this.divmod(num.neg(), mode);
  33164. if (mode !== 'mod') {
  33165. div = res.div.neg();
  33166. }
  33167. return {
  33168. div: div,
  33169. mod: res.mod
  33170. };
  33171. }
  33172. if ((this.negative & num.negative) !== 0) {
  33173. res = this.neg().divmod(num.neg(), mode);
  33174. if (mode !== 'div') {
  33175. mod = res.mod.neg();
  33176. if (positive && mod.negative !== 0) {
  33177. mod.isub(num);
  33178. }
  33179. }
  33180. return {
  33181. div: res.div,
  33182. mod: mod
  33183. };
  33184. }
  33185. // Both numbers are positive at this point
  33186. // Strip both numbers to approximate shift value
  33187. if (num.length > this.length || this.cmp(num) < 0) {
  33188. return {
  33189. div: new BN(0),
  33190. mod: this
  33191. };
  33192. }
  33193. // Very short reduction
  33194. if (num.length === 1) {
  33195. if (mode === 'div') {
  33196. return {
  33197. div: this.divn(num.words[0]),
  33198. mod: null
  33199. };
  33200. }
  33201. if (mode === 'mod') {
  33202. return {
  33203. div: null,
  33204. mod: new BN(this.modn(num.words[0]))
  33205. };
  33206. }
  33207. return {
  33208. div: this.divn(num.words[0]),
  33209. mod: new BN(this.modn(num.words[0]))
  33210. };
  33211. }
  33212. return this._wordDiv(num, mode);
  33213. };
  33214. // Find `this` / `num`
  33215. BN.prototype.div = function div (num) {
  33216. return this.divmod(num, 'div', false).div;
  33217. };
  33218. // Find `this` % `num`
  33219. BN.prototype.mod = function mod (num) {
  33220. return this.divmod(num, 'mod', false).mod;
  33221. };
  33222. BN.prototype.umod = function umod (num) {
  33223. return this.divmod(num, 'mod', true).mod;
  33224. };
  33225. // Find Round(`this` / `num`)
  33226. BN.prototype.divRound = function divRound (num) {
  33227. var dm = this.divmod(num);
  33228. // Fast case - exact division
  33229. if (dm.mod.isZero()) return dm.div;
  33230. var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
  33231. var half = num.ushrn(1);
  33232. var r2 = num.andln(1);
  33233. var cmp = mod.cmp(half);
  33234. // Round down
  33235. if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
  33236. // Round up
  33237. return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
  33238. };
  33239. BN.prototype.modn = function modn (num) {
  33240. assert(num <= 0x3ffffff);
  33241. var p = (1 << 26) % num;
  33242. var acc = 0;
  33243. for (var i = this.length - 1; i >= 0; i--) {
  33244. acc = (p * acc + (this.words[i] | 0)) % num;
  33245. }
  33246. return acc;
  33247. };
  33248. // In-place division by number
  33249. BN.prototype.idivn = function idivn (num) {
  33250. assert(num <= 0x3ffffff);
  33251. var carry = 0;
  33252. for (var i = this.length - 1; i >= 0; i--) {
  33253. var w = (this.words[i] | 0) + carry * 0x4000000;
  33254. this.words[i] = (w / num) | 0;
  33255. carry = w % num;
  33256. }
  33257. return this.strip();
  33258. };
  33259. BN.prototype.divn = function divn (num) {
  33260. return this.clone().idivn(num);
  33261. };
  33262. BN.prototype.egcd = function egcd (p) {
  33263. assert(p.negative === 0);
  33264. assert(!p.isZero());
  33265. var x = this;
  33266. var y = p.clone();
  33267. if (x.negative !== 0) {
  33268. x = x.umod(p);
  33269. } else {
  33270. x = x.clone();
  33271. }
  33272. // A * x + B * y = x
  33273. var A = new BN(1);
  33274. var B = new BN(0);
  33275. // C * x + D * y = y
  33276. var C = new BN(0);
  33277. var D = new BN(1);
  33278. var g = 0;
  33279. while (x.isEven() && y.isEven()) {
  33280. x.iushrn(1);
  33281. y.iushrn(1);
  33282. ++g;
  33283. }
  33284. var yp = y.clone();
  33285. var xp = x.clone();
  33286. while (!x.isZero()) {
  33287. for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  33288. if (i > 0) {
  33289. x.iushrn(i);
  33290. while (i-- > 0) {
  33291. if (A.isOdd() || B.isOdd()) {
  33292. A.iadd(yp);
  33293. B.isub(xp);
  33294. }
  33295. A.iushrn(1);
  33296. B.iushrn(1);
  33297. }
  33298. }
  33299. for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  33300. if (j > 0) {
  33301. y.iushrn(j);
  33302. while (j-- > 0) {
  33303. if (C.isOdd() || D.isOdd()) {
  33304. C.iadd(yp);
  33305. D.isub(xp);
  33306. }
  33307. C.iushrn(1);
  33308. D.iushrn(1);
  33309. }
  33310. }
  33311. if (x.cmp(y) >= 0) {
  33312. x.isub(y);
  33313. A.isub(C);
  33314. B.isub(D);
  33315. } else {
  33316. y.isub(x);
  33317. C.isub(A);
  33318. D.isub(B);
  33319. }
  33320. }
  33321. return {
  33322. a: C,
  33323. b: D,
  33324. gcd: y.iushln(g)
  33325. };
  33326. };
  33327. // This is reduced incarnation of the binary EEA
  33328. // above, designated to invert members of the
  33329. // _prime_ fields F(p) at a maximal speed
  33330. BN.prototype._invmp = function _invmp (p) {
  33331. assert(p.negative === 0);
  33332. assert(!p.isZero());
  33333. var a = this;
  33334. var b = p.clone();
  33335. if (a.negative !== 0) {
  33336. a = a.umod(p);
  33337. } else {
  33338. a = a.clone();
  33339. }
  33340. var x1 = new BN(1);
  33341. var x2 = new BN(0);
  33342. var delta = b.clone();
  33343. while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
  33344. for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  33345. if (i > 0) {
  33346. a.iushrn(i);
  33347. while (i-- > 0) {
  33348. if (x1.isOdd()) {
  33349. x1.iadd(delta);
  33350. }
  33351. x1.iushrn(1);
  33352. }
  33353. }
  33354. for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  33355. if (j > 0) {
  33356. b.iushrn(j);
  33357. while (j-- > 0) {
  33358. if (x2.isOdd()) {
  33359. x2.iadd(delta);
  33360. }
  33361. x2.iushrn(1);
  33362. }
  33363. }
  33364. if (a.cmp(b) >= 0) {
  33365. a.isub(b);
  33366. x1.isub(x2);
  33367. } else {
  33368. b.isub(a);
  33369. x2.isub(x1);
  33370. }
  33371. }
  33372. var res;
  33373. if (a.cmpn(1) === 0) {
  33374. res = x1;
  33375. } else {
  33376. res = x2;
  33377. }
  33378. if (res.cmpn(0) < 0) {
  33379. res.iadd(p);
  33380. }
  33381. return res;
  33382. };
  33383. BN.prototype.gcd = function gcd (num) {
  33384. if (this.isZero()) return num.abs();
  33385. if (num.isZero()) return this.abs();
  33386. var a = this.clone();
  33387. var b = num.clone();
  33388. a.negative = 0;
  33389. b.negative = 0;
  33390. // Remove common factor of two
  33391. for (var shift = 0; a.isEven() && b.isEven(); shift++) {
  33392. a.iushrn(1);
  33393. b.iushrn(1);
  33394. }
  33395. do {
  33396. while (a.isEven()) {
  33397. a.iushrn(1);
  33398. }
  33399. while (b.isEven()) {
  33400. b.iushrn(1);
  33401. }
  33402. var r = a.cmp(b);
  33403. if (r < 0) {
  33404. // Swap `a` and `b` to make `a` always bigger than `b`
  33405. var t = a;
  33406. a = b;
  33407. b = t;
  33408. } else if (r === 0 || b.cmpn(1) === 0) {
  33409. break;
  33410. }
  33411. a.isub(b);
  33412. } while (true);
  33413. return b.iushln(shift);
  33414. };
  33415. // Invert number in the field F(num)
  33416. BN.prototype.invm = function invm (num) {
  33417. return this.egcd(num).a.umod(num);
  33418. };
  33419. BN.prototype.isEven = function isEven () {
  33420. return (this.words[0] & 1) === 0;
  33421. };
  33422. BN.prototype.isOdd = function isOdd () {
  33423. return (this.words[0] & 1) === 1;
  33424. };
  33425. // And first word and num
  33426. BN.prototype.andln = function andln (num) {
  33427. return this.words[0] & num;
  33428. };
  33429. // Increment at the bit position in-line
  33430. BN.prototype.bincn = function bincn (bit) {
  33431. assert(typeof bit === 'number');
  33432. var r = bit % 26;
  33433. var s = (bit - r) / 26;
  33434. var q = 1 << r;
  33435. // Fast case: bit is much higher than all existing words
  33436. if (this.length <= s) {
  33437. this._expand(s + 1);
  33438. this.words[s] |= q;
  33439. return this;
  33440. }
  33441. // Add bit and propagate, if needed
  33442. var carry = q;
  33443. for (var i = s; carry !== 0 && i < this.length; i++) {
  33444. var w = this.words[i] | 0;
  33445. w += carry;
  33446. carry = w >>> 26;
  33447. w &= 0x3ffffff;
  33448. this.words[i] = w;
  33449. }
  33450. if (carry !== 0) {
  33451. this.words[i] = carry;
  33452. this.length++;
  33453. }
  33454. return this;
  33455. };
  33456. BN.prototype.isZero = function isZero () {
  33457. return this.length === 1 && this.words[0] === 0;
  33458. };
  33459. BN.prototype.cmpn = function cmpn (num) {
  33460. var negative = num < 0;
  33461. if (this.negative !== 0 && !negative) return -1;
  33462. if (this.negative === 0 && negative) return 1;
  33463. this.strip();
  33464. var res;
  33465. if (this.length > 1) {
  33466. res = 1;
  33467. } else {
  33468. if (negative) {
  33469. num = -num;
  33470. }
  33471. assert(num <= 0x3ffffff, 'Number is too big');
  33472. var w = this.words[0] | 0;
  33473. res = w === num ? 0 : w < num ? -1 : 1;
  33474. }
  33475. if (this.negative !== 0) return -res | 0;
  33476. return res;
  33477. };
  33478. // Compare two numbers and return:
  33479. // 1 - if `this` > `num`
  33480. // 0 - if `this` == `num`
  33481. // -1 - if `this` < `num`
  33482. BN.prototype.cmp = function cmp (num) {
  33483. if (this.negative !== 0 && num.negative === 0) return -1;
  33484. if (this.negative === 0 && num.negative !== 0) return 1;
  33485. var res = this.ucmp(num);
  33486. if (this.negative !== 0) return -res | 0;
  33487. return res;
  33488. };
  33489. // Unsigned comparison
  33490. BN.prototype.ucmp = function ucmp (num) {
  33491. // At this point both numbers have the same sign
  33492. if (this.length > num.length) return 1;
  33493. if (this.length < num.length) return -1;
  33494. var res = 0;
  33495. for (var i = this.length - 1; i >= 0; i--) {
  33496. var a = this.words[i] | 0;
  33497. var b = num.words[i] | 0;
  33498. if (a === b) continue;
  33499. if (a < b) {
  33500. res = -1;
  33501. } else if (a > b) {
  33502. res = 1;
  33503. }
  33504. break;
  33505. }
  33506. return res;
  33507. };
  33508. BN.prototype.gtn = function gtn (num) {
  33509. return this.cmpn(num) === 1;
  33510. };
  33511. BN.prototype.gt = function gt (num) {
  33512. return this.cmp(num) === 1;
  33513. };
  33514. BN.prototype.gten = function gten (num) {
  33515. return this.cmpn(num) >= 0;
  33516. };
  33517. BN.prototype.gte = function gte (num) {
  33518. return this.cmp(num) >= 0;
  33519. };
  33520. BN.prototype.ltn = function ltn (num) {
  33521. return this.cmpn(num) === -1;
  33522. };
  33523. BN.prototype.lt = function lt (num) {
  33524. return this.cmp(num) === -1;
  33525. };
  33526. BN.prototype.lten = function lten (num) {
  33527. return this.cmpn(num) <= 0;
  33528. };
  33529. BN.prototype.lte = function lte (num) {
  33530. return this.cmp(num) <= 0;
  33531. };
  33532. BN.prototype.eqn = function eqn (num) {
  33533. return this.cmpn(num) === 0;
  33534. };
  33535. BN.prototype.eq = function eq (num) {
  33536. return this.cmp(num) === 0;
  33537. };
  33538. //
  33539. // A reduce context, could be using montgomery or something better, depending
  33540. // on the `m` itself.
  33541. //
  33542. BN.red = function red (num) {
  33543. return new Red(num);
  33544. };
  33545. BN.prototype.toRed = function toRed (ctx) {
  33546. assert(!this.red, 'Already a number in reduction context');
  33547. assert(this.negative === 0, 'red works only with positives');
  33548. return ctx.convertTo(this)._forceRed(ctx);
  33549. };
  33550. BN.prototype.fromRed = function fromRed () {
  33551. assert(this.red, 'fromRed works only with numbers in reduction context');
  33552. return this.red.convertFrom(this);
  33553. };
  33554. BN.prototype._forceRed = function _forceRed (ctx) {
  33555. this.red = ctx;
  33556. return this;
  33557. };
  33558. BN.prototype.forceRed = function forceRed (ctx) {
  33559. assert(!this.red, 'Already a number in reduction context');
  33560. return this._forceRed(ctx);
  33561. };
  33562. BN.prototype.redAdd = function redAdd (num) {
  33563. assert(this.red, 'redAdd works only with red numbers');
  33564. return this.red.add(this, num);
  33565. };
  33566. BN.prototype.redIAdd = function redIAdd (num) {
  33567. assert(this.red, 'redIAdd works only with red numbers');
  33568. return this.red.iadd(this, num);
  33569. };
  33570. BN.prototype.redSub = function redSub (num) {
  33571. assert(this.red, 'redSub works only with red numbers');
  33572. return this.red.sub(this, num);
  33573. };
  33574. BN.prototype.redISub = function redISub (num) {
  33575. assert(this.red, 'redISub works only with red numbers');
  33576. return this.red.isub(this, num);
  33577. };
  33578. BN.prototype.redShl = function redShl (num) {
  33579. assert(this.red, 'redShl works only with red numbers');
  33580. return this.red.shl(this, num);
  33581. };
  33582. BN.prototype.redMul = function redMul (num) {
  33583. assert(this.red, 'redMul works only with red numbers');
  33584. this.red._verify2(this, num);
  33585. return this.red.mul(this, num);
  33586. };
  33587. BN.prototype.redIMul = function redIMul (num) {
  33588. assert(this.red, 'redMul works only with red numbers');
  33589. this.red._verify2(this, num);
  33590. return this.red.imul(this, num);
  33591. };
  33592. BN.prototype.redSqr = function redSqr () {
  33593. assert(this.red, 'redSqr works only with red numbers');
  33594. this.red._verify1(this);
  33595. return this.red.sqr(this);
  33596. };
  33597. BN.prototype.redISqr = function redISqr () {
  33598. assert(this.red, 'redISqr works only with red numbers');
  33599. this.red._verify1(this);
  33600. return this.red.isqr(this);
  33601. };
  33602. // Square root over p
  33603. BN.prototype.redSqrt = function redSqrt () {
  33604. assert(this.red, 'redSqrt works only with red numbers');
  33605. this.red._verify1(this);
  33606. return this.red.sqrt(this);
  33607. };
  33608. BN.prototype.redInvm = function redInvm () {
  33609. assert(this.red, 'redInvm works only with red numbers');
  33610. this.red._verify1(this);
  33611. return this.red.invm(this);
  33612. };
  33613. // Return negative clone of `this` % `red modulo`
  33614. BN.prototype.redNeg = function redNeg () {
  33615. assert(this.red, 'redNeg works only with red numbers');
  33616. this.red._verify1(this);
  33617. return this.red.neg(this);
  33618. };
  33619. BN.prototype.redPow = function redPow (num) {
  33620. assert(this.red && !num.red, 'redPow(normalNum)');
  33621. this.red._verify1(this);
  33622. return this.red.pow(this, num);
  33623. };
  33624. // Prime numbers with efficient reduction
  33625. var primes = {
  33626. k256: null,
  33627. p224: null,
  33628. p192: null,
  33629. p25519: null
  33630. };
  33631. // Pseudo-Mersenne prime
  33632. function MPrime (name, p) {
  33633. // P = 2 ^ N - K
  33634. this.name = name;
  33635. this.p = new BN(p, 16);
  33636. this.n = this.p.bitLength();
  33637. this.k = new BN(1).iushln(this.n).isub(this.p);
  33638. this.tmp = this._tmp();
  33639. }
  33640. MPrime.prototype._tmp = function _tmp () {
  33641. var tmp = new BN(null);
  33642. tmp.words = new Array(Math.ceil(this.n / 13));
  33643. return tmp;
  33644. };
  33645. MPrime.prototype.ireduce = function ireduce (num) {
  33646. // Assumes that `num` is less than `P^2`
  33647. // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
  33648. var r = num;
  33649. var rlen;
  33650. do {
  33651. this.split(r, this.tmp);
  33652. r = this.imulK(r);
  33653. r = r.iadd(this.tmp);
  33654. rlen = r.bitLength();
  33655. } while (rlen > this.n);
  33656. var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
  33657. if (cmp === 0) {
  33658. r.words[0] = 0;
  33659. r.length = 1;
  33660. } else if (cmp > 0) {
  33661. r.isub(this.p);
  33662. } else {
  33663. if (r.strip !== undefined) {
  33664. // r is BN v4 instance
  33665. r.strip();
  33666. } else {
  33667. // r is BN v5 instance
  33668. r._strip();
  33669. }
  33670. }
  33671. return r;
  33672. };
  33673. MPrime.prototype.split = function split (input, out) {
  33674. input.iushrn(this.n, 0, out);
  33675. };
  33676. MPrime.prototype.imulK = function imulK (num) {
  33677. return num.imul(this.k);
  33678. };
  33679. function K256 () {
  33680. MPrime.call(
  33681. this,
  33682. 'k256',
  33683. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
  33684. }
  33685. inherits(K256, MPrime);
  33686. K256.prototype.split = function split (input, output) {
  33687. // 256 = 9 * 26 + 22
  33688. var mask = 0x3fffff;
  33689. var outLen = Math.min(input.length, 9);
  33690. for (var i = 0; i < outLen; i++) {
  33691. output.words[i] = input.words[i];
  33692. }
  33693. output.length = outLen;
  33694. if (input.length <= 9) {
  33695. input.words[0] = 0;
  33696. input.length = 1;
  33697. return;
  33698. }
  33699. // Shift by 9 limbs
  33700. var prev = input.words[9];
  33701. output.words[output.length++] = prev & mask;
  33702. for (i = 10; i < input.length; i++) {
  33703. var next = input.words[i] | 0;
  33704. input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
  33705. prev = next;
  33706. }
  33707. prev >>>= 22;
  33708. input.words[i - 10] = prev;
  33709. if (prev === 0 && input.length > 10) {
  33710. input.length -= 10;
  33711. } else {
  33712. input.length -= 9;
  33713. }
  33714. };
  33715. K256.prototype.imulK = function imulK (num) {
  33716. // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
  33717. num.words[num.length] = 0;
  33718. num.words[num.length + 1] = 0;
  33719. num.length += 2;
  33720. // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
  33721. var lo = 0;
  33722. for (var i = 0; i < num.length; i++) {
  33723. var w = num.words[i] | 0;
  33724. lo += w * 0x3d1;
  33725. num.words[i] = lo & 0x3ffffff;
  33726. lo = w * 0x40 + ((lo / 0x4000000) | 0);
  33727. }
  33728. // Fast length reduction
  33729. if (num.words[num.length - 1] === 0) {
  33730. num.length--;
  33731. if (num.words[num.length - 1] === 0) {
  33732. num.length--;
  33733. }
  33734. }
  33735. return num;
  33736. };
  33737. function P224 () {
  33738. MPrime.call(
  33739. this,
  33740. 'p224',
  33741. 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
  33742. }
  33743. inherits(P224, MPrime);
  33744. function P192 () {
  33745. MPrime.call(
  33746. this,
  33747. 'p192',
  33748. 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
  33749. }
  33750. inherits(P192, MPrime);
  33751. function P25519 () {
  33752. // 2 ^ 255 - 19
  33753. MPrime.call(
  33754. this,
  33755. '25519',
  33756. '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
  33757. }
  33758. inherits(P25519, MPrime);
  33759. P25519.prototype.imulK = function imulK (num) {
  33760. // K = 0x13
  33761. var carry = 0;
  33762. for (var i = 0; i < num.length; i++) {
  33763. var hi = (num.words[i] | 0) * 0x13 + carry;
  33764. var lo = hi & 0x3ffffff;
  33765. hi >>>= 26;
  33766. num.words[i] = lo;
  33767. carry = hi;
  33768. }
  33769. if (carry !== 0) {
  33770. num.words[num.length++] = carry;
  33771. }
  33772. return num;
  33773. };
  33774. // Exported mostly for testing purposes, use plain name instead
  33775. BN._prime = function prime (name) {
  33776. // Cached version of prime
  33777. if (primes[name]) return primes[name];
  33778. var prime;
  33779. if (name === 'k256') {
  33780. prime = new K256();
  33781. } else if (name === 'p224') {
  33782. prime = new P224();
  33783. } else if (name === 'p192') {
  33784. prime = new P192();
  33785. } else if (name === 'p25519') {
  33786. prime = new P25519();
  33787. } else {
  33788. throw new Error('Unknown prime ' + name);
  33789. }
  33790. primes[name] = prime;
  33791. return prime;
  33792. };
  33793. //
  33794. // Base reduction engine
  33795. //
  33796. function Red (m) {
  33797. if (typeof m === 'string') {
  33798. var prime = BN._prime(m);
  33799. this.m = prime.p;
  33800. this.prime = prime;
  33801. } else {
  33802. assert(m.gtn(1), 'modulus must be greater than 1');
  33803. this.m = m;
  33804. this.prime = null;
  33805. }
  33806. }
  33807. Red.prototype._verify1 = function _verify1 (a) {
  33808. assert(a.negative === 0, 'red works only with positives');
  33809. assert(a.red, 'red works only with red numbers');
  33810. };
  33811. Red.prototype._verify2 = function _verify2 (a, b) {
  33812. assert((a.negative | b.negative) === 0, 'red works only with positives');
  33813. assert(a.red && a.red === b.red,
  33814. 'red works only with red numbers');
  33815. };
  33816. Red.prototype.imod = function imod (a) {
  33817. if (this.prime) return this.prime.ireduce(a)._forceRed(this);
  33818. return a.umod(this.m)._forceRed(this);
  33819. };
  33820. Red.prototype.neg = function neg (a) {
  33821. if (a.isZero()) {
  33822. return a.clone();
  33823. }
  33824. return this.m.sub(a)._forceRed(this);
  33825. };
  33826. Red.prototype.add = function add (a, b) {
  33827. this._verify2(a, b);
  33828. var res = a.add(b);
  33829. if (res.cmp(this.m) >= 0) {
  33830. res.isub(this.m);
  33831. }
  33832. return res._forceRed(this);
  33833. };
  33834. Red.prototype.iadd = function iadd (a, b) {
  33835. this._verify2(a, b);
  33836. var res = a.iadd(b);
  33837. if (res.cmp(this.m) >= 0) {
  33838. res.isub(this.m);
  33839. }
  33840. return res;
  33841. };
  33842. Red.prototype.sub = function sub (a, b) {
  33843. this._verify2(a, b);
  33844. var res = a.sub(b);
  33845. if (res.cmpn(0) < 0) {
  33846. res.iadd(this.m);
  33847. }
  33848. return res._forceRed(this);
  33849. };
  33850. Red.prototype.isub = function isub (a, b) {
  33851. this._verify2(a, b);
  33852. var res = a.isub(b);
  33853. if (res.cmpn(0) < 0) {
  33854. res.iadd(this.m);
  33855. }
  33856. return res;
  33857. };
  33858. Red.prototype.shl = function shl (a, num) {
  33859. this._verify1(a);
  33860. return this.imod(a.ushln(num));
  33861. };
  33862. Red.prototype.imul = function imul (a, b) {
  33863. this._verify2(a, b);
  33864. return this.imod(a.imul(b));
  33865. };
  33866. Red.prototype.mul = function mul (a, b) {
  33867. this._verify2(a, b);
  33868. return this.imod(a.mul(b));
  33869. };
  33870. Red.prototype.isqr = function isqr (a) {
  33871. return this.imul(a, a.clone());
  33872. };
  33873. Red.prototype.sqr = function sqr (a) {
  33874. return this.mul(a, a);
  33875. };
  33876. Red.prototype.sqrt = function sqrt (a) {
  33877. if (a.isZero()) return a.clone();
  33878. var mod3 = this.m.andln(3);
  33879. assert(mod3 % 2 === 1);
  33880. // Fast case
  33881. if (mod3 === 3) {
  33882. var pow = this.m.add(new BN(1)).iushrn(2);
  33883. return this.pow(a, pow);
  33884. }
  33885. // Tonelli-Shanks algorithm (Totally unoptimized and slow)
  33886. //
  33887. // Find Q and S, that Q * 2 ^ S = (P - 1)
  33888. var q = this.m.subn(1);
  33889. var s = 0;
  33890. while (!q.isZero() && q.andln(1) === 0) {
  33891. s++;
  33892. q.iushrn(1);
  33893. }
  33894. assert(!q.isZero());
  33895. var one = new BN(1).toRed(this);
  33896. var nOne = one.redNeg();
  33897. // Find quadratic non-residue
  33898. // NOTE: Max is such because of generalized Riemann hypothesis.
  33899. var lpow = this.m.subn(1).iushrn(1);
  33900. var z = this.m.bitLength();
  33901. z = new BN(2 * z * z).toRed(this);
  33902. while (this.pow(z, lpow).cmp(nOne) !== 0) {
  33903. z.redIAdd(nOne);
  33904. }
  33905. var c = this.pow(z, q);
  33906. var r = this.pow(a, q.addn(1).iushrn(1));
  33907. var t = this.pow(a, q);
  33908. var m = s;
  33909. while (t.cmp(one) !== 0) {
  33910. var tmp = t;
  33911. for (var i = 0; tmp.cmp(one) !== 0; i++) {
  33912. tmp = tmp.redSqr();
  33913. }
  33914. assert(i < m);
  33915. var b = this.pow(c, new BN(1).iushln(m - i - 1));
  33916. r = r.redMul(b);
  33917. c = b.redSqr();
  33918. t = t.redMul(c);
  33919. m = i;
  33920. }
  33921. return r;
  33922. };
  33923. Red.prototype.invm = function invm (a) {
  33924. var inv = a._invmp(this.m);
  33925. if (inv.negative !== 0) {
  33926. inv.negative = 0;
  33927. return this.imod(inv).redNeg();
  33928. } else {
  33929. return this.imod(inv);
  33930. }
  33931. };
  33932. Red.prototype.pow = function pow (a, num) {
  33933. if (num.isZero()) return new BN(1).toRed(this);
  33934. if (num.cmpn(1) === 0) return a.clone();
  33935. var windowSize = 4;
  33936. var wnd = new Array(1 << windowSize);
  33937. wnd[0] = new BN(1).toRed(this);
  33938. wnd[1] = a;
  33939. for (var i = 2; i < wnd.length; i++) {
  33940. wnd[i] = this.mul(wnd[i - 1], a);
  33941. }
  33942. var res = wnd[0];
  33943. var current = 0;
  33944. var currentLen = 0;
  33945. var start = num.bitLength() % 26;
  33946. if (start === 0) {
  33947. start = 26;
  33948. }
  33949. for (i = num.length - 1; i >= 0; i--) {
  33950. var word = num.words[i];
  33951. for (var j = start - 1; j >= 0; j--) {
  33952. var bit = (word >> j) & 1;
  33953. if (res !== wnd[0]) {
  33954. res = this.sqr(res);
  33955. }
  33956. if (bit === 0 && current === 0) {
  33957. currentLen = 0;
  33958. continue;
  33959. }
  33960. current <<= 1;
  33961. current |= bit;
  33962. currentLen++;
  33963. if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
  33964. res = this.mul(res, wnd[current]);
  33965. currentLen = 0;
  33966. current = 0;
  33967. }
  33968. start = 26;
  33969. }
  33970. return res;
  33971. };
  33972. Red.prototype.convertTo = function convertTo (num) {
  33973. var r = num.umod(this.m);
  33974. return r === num ? r.clone() : r;
  33975. };
  33976. Red.prototype.convertFrom = function convertFrom (num) {
  33977. var res = num.clone();
  33978. res.red = null;
  33979. return res;
  33980. };
  33981. //
  33982. // Montgomery method engine
  33983. //
  33984. BN.mont = function mont (num) {
  33985. return new Mont(num);
  33986. };
  33987. function Mont (m) {
  33988. Red.call(this, m);
  33989. this.shift = this.m.bitLength();
  33990. if (this.shift % 26 !== 0) {
  33991. this.shift += 26 - (this.shift % 26);
  33992. }
  33993. this.r = new BN(1).iushln(this.shift);
  33994. this.r2 = this.imod(this.r.sqr());
  33995. this.rinv = this.r._invmp(this.m);
  33996. this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
  33997. this.minv = this.minv.umod(this.r);
  33998. this.minv = this.r.sub(this.minv);
  33999. }
  34000. inherits(Mont, Red);
  34001. Mont.prototype.convertTo = function convertTo (num) {
  34002. return this.imod(num.ushln(this.shift));
  34003. };
  34004. Mont.prototype.convertFrom = function convertFrom (num) {
  34005. var r = this.imod(num.mul(this.rinv));
  34006. r.red = null;
  34007. return r;
  34008. };
  34009. Mont.prototype.imul = function imul (a, b) {
  34010. if (a.isZero() || b.isZero()) {
  34011. a.words[0] = 0;
  34012. a.length = 1;
  34013. return a;
  34014. }
  34015. var t = a.imul(b);
  34016. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  34017. var u = t.isub(c).iushrn(this.shift);
  34018. var res = u;
  34019. if (u.cmp(this.m) >= 0) {
  34020. res = u.isub(this.m);
  34021. } else if (u.cmpn(0) < 0) {
  34022. res = u.iadd(this.m);
  34023. }
  34024. return res._forceRed(this);
  34025. };
  34026. Mont.prototype.mul = function mul (a, b) {
  34027. if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
  34028. var t = a.mul(b);
  34029. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  34030. var u = t.isub(c).iushrn(this.shift);
  34031. var res = u;
  34032. if (u.cmp(this.m) >= 0) {
  34033. res = u.isub(this.m);
  34034. } else if (u.cmpn(0) < 0) {
  34035. res = u.iadd(this.m);
  34036. }
  34037. return res._forceRed(this);
  34038. };
  34039. Mont.prototype.invm = function invm (a) {
  34040. // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
  34041. var res = this.imod(a._invmp(this.m).mul(this.r2));
  34042. return res._forceRed(this);
  34043. };
  34044. })( false || module, this);
  34045. /***/ }),
  34046. /***/ 86266:
  34047. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  34048. "use strict";
  34049. var elliptic = exports;
  34050. elliptic.version = (__webpack_require__(18597)/* .version */ .i8);
  34051. elliptic.utils = __webpack_require__(80953);
  34052. elliptic.rand = __webpack_require__(29931);
  34053. elliptic.curve = __webpack_require__(88254);
  34054. elliptic.curves = __webpack_require__(45427);
  34055. // Protocols
  34056. elliptic.ec = __webpack_require__(57954);
  34057. elliptic.eddsa = __webpack_require__(65980);
  34058. /***/ }),
  34059. /***/ 4918:
  34060. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  34061. "use strict";
  34062. var BN = __webpack_require__(73785);
  34063. var utils = __webpack_require__(80953);
  34064. var getNAF = utils.getNAF;
  34065. var getJSF = utils.getJSF;
  34066. var assert = utils.assert;
  34067. function BaseCurve(type, conf) {
  34068. this.type = type;
  34069. this.p = new BN(conf.p, 16);
  34070. // Use Montgomery, when there is no fast reduction for the prime
  34071. this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
  34072. // Useful for many curves
  34073. this.zero = new BN(0).toRed(this.red);
  34074. this.one = new BN(1).toRed(this.red);
  34075. this.two = new BN(2).toRed(this.red);
  34076. // Curve configuration, optional
  34077. this.n = conf.n && new BN(conf.n, 16);
  34078. this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
  34079. // Temporary arrays
  34080. this._wnafT1 = new Array(4);
  34081. this._wnafT2 = new Array(4);
  34082. this._wnafT3 = new Array(4);
  34083. this._wnafT4 = new Array(4);
  34084. this._bitLength = this.n ? this.n.bitLength() : 0;
  34085. // Generalized Greg Maxwell's trick
  34086. var adjustCount = this.n && this.p.div(this.n);
  34087. if (!adjustCount || adjustCount.cmpn(100) > 0) {
  34088. this.redN = null;
  34089. } else {
  34090. this._maxwellTrick = true;
  34091. this.redN = this.n.toRed(this.red);
  34092. }
  34093. }
  34094. module.exports = BaseCurve;
  34095. BaseCurve.prototype.point = function point() {
  34096. throw new Error('Not implemented');
  34097. };
  34098. BaseCurve.prototype.validate = function validate() {
  34099. throw new Error('Not implemented');
  34100. };
  34101. BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
  34102. assert(p.precomputed);
  34103. var doubles = p._getDoubles();
  34104. var naf = getNAF(k, 1, this._bitLength);
  34105. var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
  34106. I /= 3;
  34107. // Translate into more windowed form
  34108. var repr = [];
  34109. var j;
  34110. var nafW;
  34111. for (j = 0; j < naf.length; j += doubles.step) {
  34112. nafW = 0;
  34113. for (var l = j + doubles.step - 1; l >= j; l--)
  34114. nafW = (nafW << 1) + naf[l];
  34115. repr.push(nafW);
  34116. }
  34117. var a = this.jpoint(null, null, null);
  34118. var b = this.jpoint(null, null, null);
  34119. for (var i = I; i > 0; i--) {
  34120. for (j = 0; j < repr.length; j++) {
  34121. nafW = repr[j];
  34122. if (nafW === i)
  34123. b = b.mixedAdd(doubles.points[j]);
  34124. else if (nafW === -i)
  34125. b = b.mixedAdd(doubles.points[j].neg());
  34126. }
  34127. a = a.add(b);
  34128. }
  34129. return a.toP();
  34130. };
  34131. BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
  34132. var w = 4;
  34133. // Precompute window
  34134. var nafPoints = p._getNAFPoints(w);
  34135. w = nafPoints.wnd;
  34136. var wnd = nafPoints.points;
  34137. // Get NAF form
  34138. var naf = getNAF(k, w, this._bitLength);
  34139. // Add `this`*(N+1) for every w-NAF index
  34140. var acc = this.jpoint(null, null, null);
  34141. for (var i = naf.length - 1; i >= 0; i--) {
  34142. // Count zeroes
  34143. for (var l = 0; i >= 0 && naf[i] === 0; i--)
  34144. l++;
  34145. if (i >= 0)
  34146. l++;
  34147. acc = acc.dblp(l);
  34148. if (i < 0)
  34149. break;
  34150. var z = naf[i];
  34151. assert(z !== 0);
  34152. if (p.type === 'affine') {
  34153. // J +- P
  34154. if (z > 0)
  34155. acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
  34156. else
  34157. acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
  34158. } else {
  34159. // J +- J
  34160. if (z > 0)
  34161. acc = acc.add(wnd[(z - 1) >> 1]);
  34162. else
  34163. acc = acc.add(wnd[(-z - 1) >> 1].neg());
  34164. }
  34165. }
  34166. return p.type === 'affine' ? acc.toP() : acc;
  34167. };
  34168. BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
  34169. points,
  34170. coeffs,
  34171. len,
  34172. jacobianResult) {
  34173. var wndWidth = this._wnafT1;
  34174. var wnd = this._wnafT2;
  34175. var naf = this._wnafT3;
  34176. // Fill all arrays
  34177. var max = 0;
  34178. var i;
  34179. var j;
  34180. var p;
  34181. for (i = 0; i < len; i++) {
  34182. p = points[i];
  34183. var nafPoints = p._getNAFPoints(defW);
  34184. wndWidth[i] = nafPoints.wnd;
  34185. wnd[i] = nafPoints.points;
  34186. }
  34187. // Comb small window NAFs
  34188. for (i = len - 1; i >= 1; i -= 2) {
  34189. var a = i - 1;
  34190. var b = i;
  34191. if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
  34192. naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);
  34193. naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);
  34194. max = Math.max(naf[a].length, max);
  34195. max = Math.max(naf[b].length, max);
  34196. continue;
  34197. }
  34198. var comb = [
  34199. points[a], /* 1 */
  34200. null, /* 3 */
  34201. null, /* 5 */
  34202. points[b], /* 7 */
  34203. ];
  34204. // Try to avoid Projective points, if possible
  34205. if (points[a].y.cmp(points[b].y) === 0) {
  34206. comb[1] = points[a].add(points[b]);
  34207. comb[2] = points[a].toJ().mixedAdd(points[b].neg());
  34208. } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
  34209. comb[1] = points[a].toJ().mixedAdd(points[b]);
  34210. comb[2] = points[a].add(points[b].neg());
  34211. } else {
  34212. comb[1] = points[a].toJ().mixedAdd(points[b]);
  34213. comb[2] = points[a].toJ().mixedAdd(points[b].neg());
  34214. }
  34215. var index = [
  34216. -3, /* -1 -1 */
  34217. -1, /* -1 0 */
  34218. -5, /* -1 1 */
  34219. -7, /* 0 -1 */
  34220. 0, /* 0 0 */
  34221. 7, /* 0 1 */
  34222. 5, /* 1 -1 */
  34223. 1, /* 1 0 */
  34224. 3, /* 1 1 */
  34225. ];
  34226. var jsf = getJSF(coeffs[a], coeffs[b]);
  34227. max = Math.max(jsf[0].length, max);
  34228. naf[a] = new Array(max);
  34229. naf[b] = new Array(max);
  34230. for (j = 0; j < max; j++) {
  34231. var ja = jsf[0][j] | 0;
  34232. var jb = jsf[1][j] | 0;
  34233. naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
  34234. naf[b][j] = 0;
  34235. wnd[a] = comb;
  34236. }
  34237. }
  34238. var acc = this.jpoint(null, null, null);
  34239. var tmp = this._wnafT4;
  34240. for (i = max; i >= 0; i--) {
  34241. var k = 0;
  34242. while (i >= 0) {
  34243. var zero = true;
  34244. for (j = 0; j < len; j++) {
  34245. tmp[j] = naf[j][i] | 0;
  34246. if (tmp[j] !== 0)
  34247. zero = false;
  34248. }
  34249. if (!zero)
  34250. break;
  34251. k++;
  34252. i--;
  34253. }
  34254. if (i >= 0)
  34255. k++;
  34256. acc = acc.dblp(k);
  34257. if (i < 0)
  34258. break;
  34259. for (j = 0; j < len; j++) {
  34260. var z = tmp[j];
  34261. p;
  34262. if (z === 0)
  34263. continue;
  34264. else if (z > 0)
  34265. p = wnd[j][(z - 1) >> 1];
  34266. else if (z < 0)
  34267. p = wnd[j][(-z - 1) >> 1].neg();
  34268. if (p.type === 'affine')
  34269. acc = acc.mixedAdd(p);
  34270. else
  34271. acc = acc.add(p);
  34272. }
  34273. }
  34274. // Zeroify references
  34275. for (i = 0; i < len; i++)
  34276. wnd[i] = null;
  34277. if (jacobianResult)
  34278. return acc;
  34279. else
  34280. return acc.toP();
  34281. };
  34282. function BasePoint(curve, type) {
  34283. this.curve = curve;
  34284. this.type = type;
  34285. this.precomputed = null;
  34286. }
  34287. BaseCurve.BasePoint = BasePoint;
  34288. BasePoint.prototype.eq = function eq(/*other*/) {
  34289. throw new Error('Not implemented');
  34290. };
  34291. BasePoint.prototype.validate = function validate() {
  34292. return this.curve.validate(this);
  34293. };
  34294. BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
  34295. bytes = utils.toArray(bytes, enc);
  34296. var len = this.p.byteLength();
  34297. // uncompressed, hybrid-odd, hybrid-even
  34298. if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
  34299. bytes.length - 1 === 2 * len) {
  34300. if (bytes[0] === 0x06)
  34301. assert(bytes[bytes.length - 1] % 2 === 0);
  34302. else if (bytes[0] === 0x07)
  34303. assert(bytes[bytes.length - 1] % 2 === 1);
  34304. var res = this.point(bytes.slice(1, 1 + len),
  34305. bytes.slice(1 + len, 1 + 2 * len));
  34306. return res;
  34307. } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
  34308. bytes.length - 1 === len) {
  34309. return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
  34310. }
  34311. throw new Error('Unknown point format');
  34312. };
  34313. BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
  34314. return this.encode(enc, true);
  34315. };
  34316. BasePoint.prototype._encode = function _encode(compact) {
  34317. var len = this.curve.p.byteLength();
  34318. var x = this.getX().toArray('be', len);
  34319. if (compact)
  34320. return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
  34321. return [ 0x04 ].concat(x, this.getY().toArray('be', len));
  34322. };
  34323. BasePoint.prototype.encode = function encode(enc, compact) {
  34324. return utils.encode(this._encode(compact), enc);
  34325. };
  34326. BasePoint.prototype.precompute = function precompute(power) {
  34327. if (this.precomputed)
  34328. return this;
  34329. var precomputed = {
  34330. doubles: null,
  34331. naf: null,
  34332. beta: null,
  34333. };
  34334. precomputed.naf = this._getNAFPoints(8);
  34335. precomputed.doubles = this._getDoubles(4, power);
  34336. precomputed.beta = this._getBeta();
  34337. this.precomputed = precomputed;
  34338. return this;
  34339. };
  34340. BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
  34341. if (!this.precomputed)
  34342. return false;
  34343. var doubles = this.precomputed.doubles;
  34344. if (!doubles)
  34345. return false;
  34346. return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
  34347. };
  34348. BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
  34349. if (this.precomputed && this.precomputed.doubles)
  34350. return this.precomputed.doubles;
  34351. var doubles = [ this ];
  34352. var acc = this;
  34353. for (var i = 0; i < power; i += step) {
  34354. for (var j = 0; j < step; j++)
  34355. acc = acc.dbl();
  34356. doubles.push(acc);
  34357. }
  34358. return {
  34359. step: step,
  34360. points: doubles,
  34361. };
  34362. };
  34363. BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
  34364. if (this.precomputed && this.precomputed.naf)
  34365. return this.precomputed.naf;
  34366. var res = [ this ];
  34367. var max = (1 << wnd) - 1;
  34368. var dbl = max === 1 ? null : this.dbl();
  34369. for (var i = 1; i < max; i++)
  34370. res[i] = res[i - 1].add(dbl);
  34371. return {
  34372. wnd: wnd,
  34373. points: res,
  34374. };
  34375. };
  34376. BasePoint.prototype._getBeta = function _getBeta() {
  34377. return null;
  34378. };
  34379. BasePoint.prototype.dblp = function dblp(k) {
  34380. var r = this;
  34381. for (var i = 0; i < k; i++)
  34382. r = r.dbl();
  34383. return r;
  34384. };
  34385. /***/ }),
  34386. /***/ 31138:
  34387. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  34388. "use strict";
  34389. var utils = __webpack_require__(80953);
  34390. var BN = __webpack_require__(73785);
  34391. var inherits = __webpack_require__(35717);
  34392. var Base = __webpack_require__(4918);
  34393. var assert = utils.assert;
  34394. function EdwardsCurve(conf) {
  34395. // NOTE: Important as we are creating point in Base.call()
  34396. this.twisted = (conf.a | 0) !== 1;
  34397. this.mOneA = this.twisted && (conf.a | 0) === -1;
  34398. this.extended = this.mOneA;
  34399. Base.call(this, 'edwards', conf);
  34400. this.a = new BN(conf.a, 16).umod(this.red.m);
  34401. this.a = this.a.toRed(this.red);
  34402. this.c = new BN(conf.c, 16).toRed(this.red);
  34403. this.c2 = this.c.redSqr();
  34404. this.d = new BN(conf.d, 16).toRed(this.red);
  34405. this.dd = this.d.redAdd(this.d);
  34406. assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
  34407. this.oneC = (conf.c | 0) === 1;
  34408. }
  34409. inherits(EdwardsCurve, Base);
  34410. module.exports = EdwardsCurve;
  34411. EdwardsCurve.prototype._mulA = function _mulA(num) {
  34412. if (this.mOneA)
  34413. return num.redNeg();
  34414. else
  34415. return this.a.redMul(num);
  34416. };
  34417. EdwardsCurve.prototype._mulC = function _mulC(num) {
  34418. if (this.oneC)
  34419. return num;
  34420. else
  34421. return this.c.redMul(num);
  34422. };
  34423. // Just for compatibility with Short curve
  34424. EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
  34425. return this.point(x, y, z, t);
  34426. };
  34427. EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
  34428. x = new BN(x, 16);
  34429. if (!x.red)
  34430. x = x.toRed(this.red);
  34431. var x2 = x.redSqr();
  34432. var rhs = this.c2.redSub(this.a.redMul(x2));
  34433. var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
  34434. var y2 = rhs.redMul(lhs.redInvm());
  34435. var y = y2.redSqrt();
  34436. if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
  34437. throw new Error('invalid point');
  34438. var isOdd = y.fromRed().isOdd();
  34439. if (odd && !isOdd || !odd && isOdd)
  34440. y = y.redNeg();
  34441. return this.point(x, y);
  34442. };
  34443. EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
  34444. y = new BN(y, 16);
  34445. if (!y.red)
  34446. y = y.toRed(this.red);
  34447. // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)
  34448. var y2 = y.redSqr();
  34449. var lhs = y2.redSub(this.c2);
  34450. var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);
  34451. var x2 = lhs.redMul(rhs.redInvm());
  34452. if (x2.cmp(this.zero) === 0) {
  34453. if (odd)
  34454. throw new Error('invalid point');
  34455. else
  34456. return this.point(this.zero, y);
  34457. }
  34458. var x = x2.redSqrt();
  34459. if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
  34460. throw new Error('invalid point');
  34461. if (x.fromRed().isOdd() !== odd)
  34462. x = x.redNeg();
  34463. return this.point(x, y);
  34464. };
  34465. EdwardsCurve.prototype.validate = function validate(point) {
  34466. if (point.isInfinity())
  34467. return true;
  34468. // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
  34469. point.normalize();
  34470. var x2 = point.x.redSqr();
  34471. var y2 = point.y.redSqr();
  34472. var lhs = x2.redMul(this.a).redAdd(y2);
  34473. var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
  34474. return lhs.cmp(rhs) === 0;
  34475. };
  34476. function Point(curve, x, y, z, t) {
  34477. Base.BasePoint.call(this, curve, 'projective');
  34478. if (x === null && y === null && z === null) {
  34479. this.x = this.curve.zero;
  34480. this.y = this.curve.one;
  34481. this.z = this.curve.one;
  34482. this.t = this.curve.zero;
  34483. this.zOne = true;
  34484. } else {
  34485. this.x = new BN(x, 16);
  34486. this.y = new BN(y, 16);
  34487. this.z = z ? new BN(z, 16) : this.curve.one;
  34488. this.t = t && new BN(t, 16);
  34489. if (!this.x.red)
  34490. this.x = this.x.toRed(this.curve.red);
  34491. if (!this.y.red)
  34492. this.y = this.y.toRed(this.curve.red);
  34493. if (!this.z.red)
  34494. this.z = this.z.toRed(this.curve.red);
  34495. if (this.t && !this.t.red)
  34496. this.t = this.t.toRed(this.curve.red);
  34497. this.zOne = this.z === this.curve.one;
  34498. // Use extended coordinates
  34499. if (this.curve.extended && !this.t) {
  34500. this.t = this.x.redMul(this.y);
  34501. if (!this.zOne)
  34502. this.t = this.t.redMul(this.z.redInvm());
  34503. }
  34504. }
  34505. }
  34506. inherits(Point, Base.BasePoint);
  34507. EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
  34508. return Point.fromJSON(this, obj);
  34509. };
  34510. EdwardsCurve.prototype.point = function point(x, y, z, t) {
  34511. return new Point(this, x, y, z, t);
  34512. };
  34513. Point.fromJSON = function fromJSON(curve, obj) {
  34514. return new Point(curve, obj[0], obj[1], obj[2]);
  34515. };
  34516. Point.prototype.inspect = function inspect() {
  34517. if (this.isInfinity())
  34518. return '<EC Point Infinity>';
  34519. return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
  34520. ' y: ' + this.y.fromRed().toString(16, 2) +
  34521. ' z: ' + this.z.fromRed().toString(16, 2) + '>';
  34522. };
  34523. Point.prototype.isInfinity = function isInfinity() {
  34524. // XXX This code assumes that zero is always zero in red
  34525. return this.x.cmpn(0) === 0 &&
  34526. (this.y.cmp(this.z) === 0 ||
  34527. (this.zOne && this.y.cmp(this.curve.c) === 0));
  34528. };
  34529. Point.prototype._extDbl = function _extDbl() {
  34530. // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
  34531. // #doubling-dbl-2008-hwcd
  34532. // 4M + 4S
  34533. // A = X1^2
  34534. var a = this.x.redSqr();
  34535. // B = Y1^2
  34536. var b = this.y.redSqr();
  34537. // C = 2 * Z1^2
  34538. var c = this.z.redSqr();
  34539. c = c.redIAdd(c);
  34540. // D = a * A
  34541. var d = this.curve._mulA(a);
  34542. // E = (X1 + Y1)^2 - A - B
  34543. var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
  34544. // G = D + B
  34545. var g = d.redAdd(b);
  34546. // F = G - C
  34547. var f = g.redSub(c);
  34548. // H = D - B
  34549. var h = d.redSub(b);
  34550. // X3 = E * F
  34551. var nx = e.redMul(f);
  34552. // Y3 = G * H
  34553. var ny = g.redMul(h);
  34554. // T3 = E * H
  34555. var nt = e.redMul(h);
  34556. // Z3 = F * G
  34557. var nz = f.redMul(g);
  34558. return this.curve.point(nx, ny, nz, nt);
  34559. };
  34560. Point.prototype._projDbl = function _projDbl() {
  34561. // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
  34562. // #doubling-dbl-2008-bbjlp
  34563. // #doubling-dbl-2007-bl
  34564. // and others
  34565. // Generally 3M + 4S or 2M + 4S
  34566. // B = (X1 + Y1)^2
  34567. var b = this.x.redAdd(this.y).redSqr();
  34568. // C = X1^2
  34569. var c = this.x.redSqr();
  34570. // D = Y1^2
  34571. var d = this.y.redSqr();
  34572. var nx;
  34573. var ny;
  34574. var nz;
  34575. var e;
  34576. var h;
  34577. var j;
  34578. if (this.curve.twisted) {
  34579. // E = a * C
  34580. e = this.curve._mulA(c);
  34581. // F = E + D
  34582. var f = e.redAdd(d);
  34583. if (this.zOne) {
  34584. // X3 = (B - C - D) * (F - 2)
  34585. nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
  34586. // Y3 = F * (E - D)
  34587. ny = f.redMul(e.redSub(d));
  34588. // Z3 = F^2 - 2 * F
  34589. nz = f.redSqr().redSub(f).redSub(f);
  34590. } else {
  34591. // H = Z1^2
  34592. h = this.z.redSqr();
  34593. // J = F - 2 * H
  34594. j = f.redSub(h).redISub(h);
  34595. // X3 = (B-C-D)*J
  34596. nx = b.redSub(c).redISub(d).redMul(j);
  34597. // Y3 = F * (E - D)
  34598. ny = f.redMul(e.redSub(d));
  34599. // Z3 = F * J
  34600. nz = f.redMul(j);
  34601. }
  34602. } else {
  34603. // E = C + D
  34604. e = c.redAdd(d);
  34605. // H = (c * Z1)^2
  34606. h = this.curve._mulC(this.z).redSqr();
  34607. // J = E - 2 * H
  34608. j = e.redSub(h).redSub(h);
  34609. // X3 = c * (B - E) * J
  34610. nx = this.curve._mulC(b.redISub(e)).redMul(j);
  34611. // Y3 = c * E * (C - D)
  34612. ny = this.curve._mulC(e).redMul(c.redISub(d));
  34613. // Z3 = E * J
  34614. nz = e.redMul(j);
  34615. }
  34616. return this.curve.point(nx, ny, nz);
  34617. };
  34618. Point.prototype.dbl = function dbl() {
  34619. if (this.isInfinity())
  34620. return this;
  34621. // Double in extended coordinates
  34622. if (this.curve.extended)
  34623. return this._extDbl();
  34624. else
  34625. return this._projDbl();
  34626. };
  34627. Point.prototype._extAdd = function _extAdd(p) {
  34628. // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
  34629. // #addition-add-2008-hwcd-3
  34630. // 8M
  34631. // A = (Y1 - X1) * (Y2 - X2)
  34632. var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
  34633. // B = (Y1 + X1) * (Y2 + X2)
  34634. var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
  34635. // C = T1 * k * T2
  34636. var c = this.t.redMul(this.curve.dd).redMul(p.t);
  34637. // D = Z1 * 2 * Z2
  34638. var d = this.z.redMul(p.z.redAdd(p.z));
  34639. // E = B - A
  34640. var e = b.redSub(a);
  34641. // F = D - C
  34642. var f = d.redSub(c);
  34643. // G = D + C
  34644. var g = d.redAdd(c);
  34645. // H = B + A
  34646. var h = b.redAdd(a);
  34647. // X3 = E * F
  34648. var nx = e.redMul(f);
  34649. // Y3 = G * H
  34650. var ny = g.redMul(h);
  34651. // T3 = E * H
  34652. var nt = e.redMul(h);
  34653. // Z3 = F * G
  34654. var nz = f.redMul(g);
  34655. return this.curve.point(nx, ny, nz, nt);
  34656. };
  34657. Point.prototype._projAdd = function _projAdd(p) {
  34658. // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
  34659. // #addition-add-2008-bbjlp
  34660. // #addition-add-2007-bl
  34661. // 10M + 1S
  34662. // A = Z1 * Z2
  34663. var a = this.z.redMul(p.z);
  34664. // B = A^2
  34665. var b = a.redSqr();
  34666. // C = X1 * X2
  34667. var c = this.x.redMul(p.x);
  34668. // D = Y1 * Y2
  34669. var d = this.y.redMul(p.y);
  34670. // E = d * C * D
  34671. var e = this.curve.d.redMul(c).redMul(d);
  34672. // F = B - E
  34673. var f = b.redSub(e);
  34674. // G = B + E
  34675. var g = b.redAdd(e);
  34676. // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
  34677. var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
  34678. var nx = a.redMul(f).redMul(tmp);
  34679. var ny;
  34680. var nz;
  34681. if (this.curve.twisted) {
  34682. // Y3 = A * G * (D - a * C)
  34683. ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
  34684. // Z3 = F * G
  34685. nz = f.redMul(g);
  34686. } else {
  34687. // Y3 = A * G * (D - C)
  34688. ny = a.redMul(g).redMul(d.redSub(c));
  34689. // Z3 = c * F * G
  34690. nz = this.curve._mulC(f).redMul(g);
  34691. }
  34692. return this.curve.point(nx, ny, nz);
  34693. };
  34694. Point.prototype.add = function add(p) {
  34695. if (this.isInfinity())
  34696. return p;
  34697. if (p.isInfinity())
  34698. return this;
  34699. if (this.curve.extended)
  34700. return this._extAdd(p);
  34701. else
  34702. return this._projAdd(p);
  34703. };
  34704. Point.prototype.mul = function mul(k) {
  34705. if (this._hasDoubles(k))
  34706. return this.curve._fixedNafMul(this, k);
  34707. else
  34708. return this.curve._wnafMul(this, k);
  34709. };
  34710. Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
  34711. return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
  34712. };
  34713. Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
  34714. return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
  34715. };
  34716. Point.prototype.normalize = function normalize() {
  34717. if (this.zOne)
  34718. return this;
  34719. // Normalize coordinates
  34720. var zi = this.z.redInvm();
  34721. this.x = this.x.redMul(zi);
  34722. this.y = this.y.redMul(zi);
  34723. if (this.t)
  34724. this.t = this.t.redMul(zi);
  34725. this.z = this.curve.one;
  34726. this.zOne = true;
  34727. return this;
  34728. };
  34729. Point.prototype.neg = function neg() {
  34730. return this.curve.point(this.x.redNeg(),
  34731. this.y,
  34732. this.z,
  34733. this.t && this.t.redNeg());
  34734. };
  34735. Point.prototype.getX = function getX() {
  34736. this.normalize();
  34737. return this.x.fromRed();
  34738. };
  34739. Point.prototype.getY = function getY() {
  34740. this.normalize();
  34741. return this.y.fromRed();
  34742. };
  34743. Point.prototype.eq = function eq(other) {
  34744. return this === other ||
  34745. this.getX().cmp(other.getX()) === 0 &&
  34746. this.getY().cmp(other.getY()) === 0;
  34747. };
  34748. Point.prototype.eqXToP = function eqXToP(x) {
  34749. var rx = x.toRed(this.curve.red).redMul(this.z);
  34750. if (this.x.cmp(rx) === 0)
  34751. return true;
  34752. var xc = x.clone();
  34753. var t = this.curve.redN.redMul(this.z);
  34754. for (;;) {
  34755. xc.iadd(this.curve.n);
  34756. if (xc.cmp(this.curve.p) >= 0)
  34757. return false;
  34758. rx.redIAdd(t);
  34759. if (this.x.cmp(rx) === 0)
  34760. return true;
  34761. }
  34762. };
  34763. // Compatibility with BaseCurve
  34764. Point.prototype.toP = Point.prototype.normalize;
  34765. Point.prototype.mixedAdd = Point.prototype.add;
  34766. /***/ }),
  34767. /***/ 88254:
  34768. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  34769. "use strict";
  34770. var curve = exports;
  34771. curve.base = __webpack_require__(4918);
  34772. curve.short = __webpack_require__(6673);
  34773. curve.mont = __webpack_require__(22881);
  34774. curve.edwards = __webpack_require__(31138);
  34775. /***/ }),
  34776. /***/ 22881:
  34777. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  34778. "use strict";
  34779. var BN = __webpack_require__(73785);
  34780. var inherits = __webpack_require__(35717);
  34781. var Base = __webpack_require__(4918);
  34782. var utils = __webpack_require__(80953);
  34783. function MontCurve(conf) {
  34784. Base.call(this, 'mont', conf);
  34785. this.a = new BN(conf.a, 16).toRed(this.red);
  34786. this.b = new BN(conf.b, 16).toRed(this.red);
  34787. this.i4 = new BN(4).toRed(this.red).redInvm();
  34788. this.two = new BN(2).toRed(this.red);
  34789. this.a24 = this.i4.redMul(this.a.redAdd(this.two));
  34790. }
  34791. inherits(MontCurve, Base);
  34792. module.exports = MontCurve;
  34793. MontCurve.prototype.validate = function validate(point) {
  34794. var x = point.normalize().x;
  34795. var x2 = x.redSqr();
  34796. var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
  34797. var y = rhs.redSqrt();
  34798. return y.redSqr().cmp(rhs) === 0;
  34799. };
  34800. function Point(curve, x, z) {
  34801. Base.BasePoint.call(this, curve, 'projective');
  34802. if (x === null && z === null) {
  34803. this.x = this.curve.one;
  34804. this.z = this.curve.zero;
  34805. } else {
  34806. this.x = new BN(x, 16);
  34807. this.z = new BN(z, 16);
  34808. if (!this.x.red)
  34809. this.x = this.x.toRed(this.curve.red);
  34810. if (!this.z.red)
  34811. this.z = this.z.toRed(this.curve.red);
  34812. }
  34813. }
  34814. inherits(Point, Base.BasePoint);
  34815. MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
  34816. return this.point(utils.toArray(bytes, enc), 1);
  34817. };
  34818. MontCurve.prototype.point = function point(x, z) {
  34819. return new Point(this, x, z);
  34820. };
  34821. MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
  34822. return Point.fromJSON(this, obj);
  34823. };
  34824. Point.prototype.precompute = function precompute() {
  34825. // No-op
  34826. };
  34827. Point.prototype._encode = function _encode() {
  34828. return this.getX().toArray('be', this.curve.p.byteLength());
  34829. };
  34830. Point.fromJSON = function fromJSON(curve, obj) {
  34831. return new Point(curve, obj[0], obj[1] || curve.one);
  34832. };
  34833. Point.prototype.inspect = function inspect() {
  34834. if (this.isInfinity())
  34835. return '<EC Point Infinity>';
  34836. return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
  34837. ' z: ' + this.z.fromRed().toString(16, 2) + '>';
  34838. };
  34839. Point.prototype.isInfinity = function isInfinity() {
  34840. // XXX This code assumes that zero is always zero in red
  34841. return this.z.cmpn(0) === 0;
  34842. };
  34843. Point.prototype.dbl = function dbl() {
  34844. // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
  34845. // 2M + 2S + 4A
  34846. // A = X1 + Z1
  34847. var a = this.x.redAdd(this.z);
  34848. // AA = A^2
  34849. var aa = a.redSqr();
  34850. // B = X1 - Z1
  34851. var b = this.x.redSub(this.z);
  34852. // BB = B^2
  34853. var bb = b.redSqr();
  34854. // C = AA - BB
  34855. var c = aa.redSub(bb);
  34856. // X3 = AA * BB
  34857. var nx = aa.redMul(bb);
  34858. // Z3 = C * (BB + A24 * C)
  34859. var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
  34860. return this.curve.point(nx, nz);
  34861. };
  34862. Point.prototype.add = function add() {
  34863. throw new Error('Not supported on Montgomery curve');
  34864. };
  34865. Point.prototype.diffAdd = function diffAdd(p, diff) {
  34866. // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
  34867. // 4M + 2S + 6A
  34868. // A = X2 + Z2
  34869. var a = this.x.redAdd(this.z);
  34870. // B = X2 - Z2
  34871. var b = this.x.redSub(this.z);
  34872. // C = X3 + Z3
  34873. var c = p.x.redAdd(p.z);
  34874. // D = X3 - Z3
  34875. var d = p.x.redSub(p.z);
  34876. // DA = D * A
  34877. var da = d.redMul(a);
  34878. // CB = C * B
  34879. var cb = c.redMul(b);
  34880. // X5 = Z1 * (DA + CB)^2
  34881. var nx = diff.z.redMul(da.redAdd(cb).redSqr());
  34882. // Z5 = X1 * (DA - CB)^2
  34883. var nz = diff.x.redMul(da.redISub(cb).redSqr());
  34884. return this.curve.point(nx, nz);
  34885. };
  34886. Point.prototype.mul = function mul(k) {
  34887. var t = k.clone();
  34888. var a = this; // (N / 2) * Q + Q
  34889. var b = this.curve.point(null, null); // (N / 2) * Q
  34890. var c = this; // Q
  34891. for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
  34892. bits.push(t.andln(1));
  34893. for (var i = bits.length - 1; i >= 0; i--) {
  34894. if (bits[i] === 0) {
  34895. // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
  34896. a = a.diffAdd(b, c);
  34897. // N * Q = 2 * ((N / 2) * Q + Q))
  34898. b = b.dbl();
  34899. } else {
  34900. // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
  34901. b = a.diffAdd(b, c);
  34902. // N * Q + Q = 2 * ((N / 2) * Q + Q)
  34903. a = a.dbl();
  34904. }
  34905. }
  34906. return b;
  34907. };
  34908. Point.prototype.mulAdd = function mulAdd() {
  34909. throw new Error('Not supported on Montgomery curve');
  34910. };
  34911. Point.prototype.jumlAdd = function jumlAdd() {
  34912. throw new Error('Not supported on Montgomery curve');
  34913. };
  34914. Point.prototype.eq = function eq(other) {
  34915. return this.getX().cmp(other.getX()) === 0;
  34916. };
  34917. Point.prototype.normalize = function normalize() {
  34918. this.x = this.x.redMul(this.z.redInvm());
  34919. this.z = this.curve.one;
  34920. return this;
  34921. };
  34922. Point.prototype.getX = function getX() {
  34923. // Normalize coordinates
  34924. this.normalize();
  34925. return this.x.fromRed();
  34926. };
  34927. /***/ }),
  34928. /***/ 6673:
  34929. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  34930. "use strict";
  34931. var utils = __webpack_require__(80953);
  34932. var BN = __webpack_require__(73785);
  34933. var inherits = __webpack_require__(35717);
  34934. var Base = __webpack_require__(4918);
  34935. var assert = utils.assert;
  34936. function ShortCurve(conf) {
  34937. Base.call(this, 'short', conf);
  34938. this.a = new BN(conf.a, 16).toRed(this.red);
  34939. this.b = new BN(conf.b, 16).toRed(this.red);
  34940. this.tinv = this.two.redInvm();
  34941. this.zeroA = this.a.fromRed().cmpn(0) === 0;
  34942. this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
  34943. // If the curve is endomorphic, precalculate beta and lambda
  34944. this.endo = this._getEndomorphism(conf);
  34945. this._endoWnafT1 = new Array(4);
  34946. this._endoWnafT2 = new Array(4);
  34947. }
  34948. inherits(ShortCurve, Base);
  34949. module.exports = ShortCurve;
  34950. ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
  34951. // No efficient endomorphism
  34952. if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
  34953. return;
  34954. // Compute beta and lambda, that lambda * P = (beta * Px; Py)
  34955. var beta;
  34956. var lambda;
  34957. if (conf.beta) {
  34958. beta = new BN(conf.beta, 16).toRed(this.red);
  34959. } else {
  34960. var betas = this._getEndoRoots(this.p);
  34961. // Choose the smallest beta
  34962. beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
  34963. beta = beta.toRed(this.red);
  34964. }
  34965. if (conf.lambda) {
  34966. lambda = new BN(conf.lambda, 16);
  34967. } else {
  34968. // Choose the lambda that is matching selected beta
  34969. var lambdas = this._getEndoRoots(this.n);
  34970. if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
  34971. lambda = lambdas[0];
  34972. } else {
  34973. lambda = lambdas[1];
  34974. assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
  34975. }
  34976. }
  34977. // Get basis vectors, used for balanced length-two representation
  34978. var basis;
  34979. if (conf.basis) {
  34980. basis = conf.basis.map(function(vec) {
  34981. return {
  34982. a: new BN(vec.a, 16),
  34983. b: new BN(vec.b, 16),
  34984. };
  34985. });
  34986. } else {
  34987. basis = this._getEndoBasis(lambda);
  34988. }
  34989. return {
  34990. beta: beta,
  34991. lambda: lambda,
  34992. basis: basis,
  34993. };
  34994. };
  34995. ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
  34996. // Find roots of for x^2 + x + 1 in F
  34997. // Root = (-1 +- Sqrt(-3)) / 2
  34998. //
  34999. var red = num === this.p ? this.red : BN.mont(num);
  35000. var tinv = new BN(2).toRed(red).redInvm();
  35001. var ntinv = tinv.redNeg();
  35002. var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
  35003. var l1 = ntinv.redAdd(s).fromRed();
  35004. var l2 = ntinv.redSub(s).fromRed();
  35005. return [ l1, l2 ];
  35006. };
  35007. ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
  35008. // aprxSqrt >= sqrt(this.n)
  35009. var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
  35010. // 3.74
  35011. // Run EGCD, until r(L + 1) < aprxSqrt
  35012. var u = lambda;
  35013. var v = this.n.clone();
  35014. var x1 = new BN(1);
  35015. var y1 = new BN(0);
  35016. var x2 = new BN(0);
  35017. var y2 = new BN(1);
  35018. // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
  35019. var a0;
  35020. var b0;
  35021. // First vector
  35022. var a1;
  35023. var b1;
  35024. // Second vector
  35025. var a2;
  35026. var b2;
  35027. var prevR;
  35028. var i = 0;
  35029. var r;
  35030. var x;
  35031. while (u.cmpn(0) !== 0) {
  35032. var q = v.div(u);
  35033. r = v.sub(q.mul(u));
  35034. x = x2.sub(q.mul(x1));
  35035. var y = y2.sub(q.mul(y1));
  35036. if (!a1 && r.cmp(aprxSqrt) < 0) {
  35037. a0 = prevR.neg();
  35038. b0 = x1;
  35039. a1 = r.neg();
  35040. b1 = x;
  35041. } else if (a1 && ++i === 2) {
  35042. break;
  35043. }
  35044. prevR = r;
  35045. v = u;
  35046. u = r;
  35047. x2 = x1;
  35048. x1 = x;
  35049. y2 = y1;
  35050. y1 = y;
  35051. }
  35052. a2 = r.neg();
  35053. b2 = x;
  35054. var len1 = a1.sqr().add(b1.sqr());
  35055. var len2 = a2.sqr().add(b2.sqr());
  35056. if (len2.cmp(len1) >= 0) {
  35057. a2 = a0;
  35058. b2 = b0;
  35059. }
  35060. // Normalize signs
  35061. if (a1.negative) {
  35062. a1 = a1.neg();
  35063. b1 = b1.neg();
  35064. }
  35065. if (a2.negative) {
  35066. a2 = a2.neg();
  35067. b2 = b2.neg();
  35068. }
  35069. return [
  35070. { a: a1, b: b1 },
  35071. { a: a2, b: b2 },
  35072. ];
  35073. };
  35074. ShortCurve.prototype._endoSplit = function _endoSplit(k) {
  35075. var basis = this.endo.basis;
  35076. var v1 = basis[0];
  35077. var v2 = basis[1];
  35078. var c1 = v2.b.mul(k).divRound(this.n);
  35079. var c2 = v1.b.neg().mul(k).divRound(this.n);
  35080. var p1 = c1.mul(v1.a);
  35081. var p2 = c2.mul(v2.a);
  35082. var q1 = c1.mul(v1.b);
  35083. var q2 = c2.mul(v2.b);
  35084. // Calculate answer
  35085. var k1 = k.sub(p1).sub(p2);
  35086. var k2 = q1.add(q2).neg();
  35087. return { k1: k1, k2: k2 };
  35088. };
  35089. ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
  35090. x = new BN(x, 16);
  35091. if (!x.red)
  35092. x = x.toRed(this.red);
  35093. var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
  35094. var y = y2.redSqrt();
  35095. if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
  35096. throw new Error('invalid point');
  35097. // XXX Is there any way to tell if the number is odd without converting it
  35098. // to non-red form?
  35099. var isOdd = y.fromRed().isOdd();
  35100. if (odd && !isOdd || !odd && isOdd)
  35101. y = y.redNeg();
  35102. return this.point(x, y);
  35103. };
  35104. ShortCurve.prototype.validate = function validate(point) {
  35105. if (point.inf)
  35106. return true;
  35107. var x = point.x;
  35108. var y = point.y;
  35109. var ax = this.a.redMul(x);
  35110. var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
  35111. return y.redSqr().redISub(rhs).cmpn(0) === 0;
  35112. };
  35113. ShortCurve.prototype._endoWnafMulAdd =
  35114. function _endoWnafMulAdd(points, coeffs, jacobianResult) {
  35115. var npoints = this._endoWnafT1;
  35116. var ncoeffs = this._endoWnafT2;
  35117. for (var i = 0; i < points.length; i++) {
  35118. var split = this._endoSplit(coeffs[i]);
  35119. var p = points[i];
  35120. var beta = p._getBeta();
  35121. if (split.k1.negative) {
  35122. split.k1.ineg();
  35123. p = p.neg(true);
  35124. }
  35125. if (split.k2.negative) {
  35126. split.k2.ineg();
  35127. beta = beta.neg(true);
  35128. }
  35129. npoints[i * 2] = p;
  35130. npoints[i * 2 + 1] = beta;
  35131. ncoeffs[i * 2] = split.k1;
  35132. ncoeffs[i * 2 + 1] = split.k2;
  35133. }
  35134. var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
  35135. // Clean-up references to points and coefficients
  35136. for (var j = 0; j < i * 2; j++) {
  35137. npoints[j] = null;
  35138. ncoeffs[j] = null;
  35139. }
  35140. return res;
  35141. };
  35142. function Point(curve, x, y, isRed) {
  35143. Base.BasePoint.call(this, curve, 'affine');
  35144. if (x === null && y === null) {
  35145. this.x = null;
  35146. this.y = null;
  35147. this.inf = true;
  35148. } else {
  35149. this.x = new BN(x, 16);
  35150. this.y = new BN(y, 16);
  35151. // Force redgomery representation when loading from JSON
  35152. if (isRed) {
  35153. this.x.forceRed(this.curve.red);
  35154. this.y.forceRed(this.curve.red);
  35155. }
  35156. if (!this.x.red)
  35157. this.x = this.x.toRed(this.curve.red);
  35158. if (!this.y.red)
  35159. this.y = this.y.toRed(this.curve.red);
  35160. this.inf = false;
  35161. }
  35162. }
  35163. inherits(Point, Base.BasePoint);
  35164. ShortCurve.prototype.point = function point(x, y, isRed) {
  35165. return new Point(this, x, y, isRed);
  35166. };
  35167. ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
  35168. return Point.fromJSON(this, obj, red);
  35169. };
  35170. Point.prototype._getBeta = function _getBeta() {
  35171. if (!this.curve.endo)
  35172. return;
  35173. var pre = this.precomputed;
  35174. if (pre && pre.beta)
  35175. return pre.beta;
  35176. var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
  35177. if (pre) {
  35178. var curve = this.curve;
  35179. var endoMul = function(p) {
  35180. return curve.point(p.x.redMul(curve.endo.beta), p.y);
  35181. };
  35182. pre.beta = beta;
  35183. beta.precomputed = {
  35184. beta: null,
  35185. naf: pre.naf && {
  35186. wnd: pre.naf.wnd,
  35187. points: pre.naf.points.map(endoMul),
  35188. },
  35189. doubles: pre.doubles && {
  35190. step: pre.doubles.step,
  35191. points: pre.doubles.points.map(endoMul),
  35192. },
  35193. };
  35194. }
  35195. return beta;
  35196. };
  35197. Point.prototype.toJSON = function toJSON() {
  35198. if (!this.precomputed)
  35199. return [ this.x, this.y ];
  35200. return [ this.x, this.y, this.precomputed && {
  35201. doubles: this.precomputed.doubles && {
  35202. step: this.precomputed.doubles.step,
  35203. points: this.precomputed.doubles.points.slice(1),
  35204. },
  35205. naf: this.precomputed.naf && {
  35206. wnd: this.precomputed.naf.wnd,
  35207. points: this.precomputed.naf.points.slice(1),
  35208. },
  35209. } ];
  35210. };
  35211. Point.fromJSON = function fromJSON(curve, obj, red) {
  35212. if (typeof obj === 'string')
  35213. obj = JSON.parse(obj);
  35214. var res = curve.point(obj[0], obj[1], red);
  35215. if (!obj[2])
  35216. return res;
  35217. function obj2point(obj) {
  35218. return curve.point(obj[0], obj[1], red);
  35219. }
  35220. var pre = obj[2];
  35221. res.precomputed = {
  35222. beta: null,
  35223. doubles: pre.doubles && {
  35224. step: pre.doubles.step,
  35225. points: [ res ].concat(pre.doubles.points.map(obj2point)),
  35226. },
  35227. naf: pre.naf && {
  35228. wnd: pre.naf.wnd,
  35229. points: [ res ].concat(pre.naf.points.map(obj2point)),
  35230. },
  35231. };
  35232. return res;
  35233. };
  35234. Point.prototype.inspect = function inspect() {
  35235. if (this.isInfinity())
  35236. return '<EC Point Infinity>';
  35237. return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
  35238. ' y: ' + this.y.fromRed().toString(16, 2) + '>';
  35239. };
  35240. Point.prototype.isInfinity = function isInfinity() {
  35241. return this.inf;
  35242. };
  35243. Point.prototype.add = function add(p) {
  35244. // O + P = P
  35245. if (this.inf)
  35246. return p;
  35247. // P + O = P
  35248. if (p.inf)
  35249. return this;
  35250. // P + P = 2P
  35251. if (this.eq(p))
  35252. return this.dbl();
  35253. // P + (-P) = O
  35254. if (this.neg().eq(p))
  35255. return this.curve.point(null, null);
  35256. // P + Q = O
  35257. if (this.x.cmp(p.x) === 0)
  35258. return this.curve.point(null, null);
  35259. var c = this.y.redSub(p.y);
  35260. if (c.cmpn(0) !== 0)
  35261. c = c.redMul(this.x.redSub(p.x).redInvm());
  35262. var nx = c.redSqr().redISub(this.x).redISub(p.x);
  35263. var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
  35264. return this.curve.point(nx, ny);
  35265. };
  35266. Point.prototype.dbl = function dbl() {
  35267. if (this.inf)
  35268. return this;
  35269. // 2P = O
  35270. var ys1 = this.y.redAdd(this.y);
  35271. if (ys1.cmpn(0) === 0)
  35272. return this.curve.point(null, null);
  35273. var a = this.curve.a;
  35274. var x2 = this.x.redSqr();
  35275. var dyinv = ys1.redInvm();
  35276. var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
  35277. var nx = c.redSqr().redISub(this.x.redAdd(this.x));
  35278. var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
  35279. return this.curve.point(nx, ny);
  35280. };
  35281. Point.prototype.getX = function getX() {
  35282. return this.x.fromRed();
  35283. };
  35284. Point.prototype.getY = function getY() {
  35285. return this.y.fromRed();
  35286. };
  35287. Point.prototype.mul = function mul(k) {
  35288. k = new BN(k, 16);
  35289. if (this.isInfinity())
  35290. return this;
  35291. else if (this._hasDoubles(k))
  35292. return this.curve._fixedNafMul(this, k);
  35293. else if (this.curve.endo)
  35294. return this.curve._endoWnafMulAdd([ this ], [ k ]);
  35295. else
  35296. return this.curve._wnafMul(this, k);
  35297. };
  35298. Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
  35299. var points = [ this, p2 ];
  35300. var coeffs = [ k1, k2 ];
  35301. if (this.curve.endo)
  35302. return this.curve._endoWnafMulAdd(points, coeffs);
  35303. else
  35304. return this.curve._wnafMulAdd(1, points, coeffs, 2);
  35305. };
  35306. Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
  35307. var points = [ this, p2 ];
  35308. var coeffs = [ k1, k2 ];
  35309. if (this.curve.endo)
  35310. return this.curve._endoWnafMulAdd(points, coeffs, true);
  35311. else
  35312. return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
  35313. };
  35314. Point.prototype.eq = function eq(p) {
  35315. return this === p ||
  35316. this.inf === p.inf &&
  35317. (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
  35318. };
  35319. Point.prototype.neg = function neg(_precompute) {
  35320. if (this.inf)
  35321. return this;
  35322. var res = this.curve.point(this.x, this.y.redNeg());
  35323. if (_precompute && this.precomputed) {
  35324. var pre = this.precomputed;
  35325. var negate = function(p) {
  35326. return p.neg();
  35327. };
  35328. res.precomputed = {
  35329. naf: pre.naf && {
  35330. wnd: pre.naf.wnd,
  35331. points: pre.naf.points.map(negate),
  35332. },
  35333. doubles: pre.doubles && {
  35334. step: pre.doubles.step,
  35335. points: pre.doubles.points.map(negate),
  35336. },
  35337. };
  35338. }
  35339. return res;
  35340. };
  35341. Point.prototype.toJ = function toJ() {
  35342. if (this.inf)
  35343. return this.curve.jpoint(null, null, null);
  35344. var res = this.curve.jpoint(this.x, this.y, this.curve.one);
  35345. return res;
  35346. };
  35347. function JPoint(curve, x, y, z) {
  35348. Base.BasePoint.call(this, curve, 'jacobian');
  35349. if (x === null && y === null && z === null) {
  35350. this.x = this.curve.one;
  35351. this.y = this.curve.one;
  35352. this.z = new BN(0);
  35353. } else {
  35354. this.x = new BN(x, 16);
  35355. this.y = new BN(y, 16);
  35356. this.z = new BN(z, 16);
  35357. }
  35358. if (!this.x.red)
  35359. this.x = this.x.toRed(this.curve.red);
  35360. if (!this.y.red)
  35361. this.y = this.y.toRed(this.curve.red);
  35362. if (!this.z.red)
  35363. this.z = this.z.toRed(this.curve.red);
  35364. this.zOne = this.z === this.curve.one;
  35365. }
  35366. inherits(JPoint, Base.BasePoint);
  35367. ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
  35368. return new JPoint(this, x, y, z);
  35369. };
  35370. JPoint.prototype.toP = function toP() {
  35371. if (this.isInfinity())
  35372. return this.curve.point(null, null);
  35373. var zinv = this.z.redInvm();
  35374. var zinv2 = zinv.redSqr();
  35375. var ax = this.x.redMul(zinv2);
  35376. var ay = this.y.redMul(zinv2).redMul(zinv);
  35377. return this.curve.point(ax, ay);
  35378. };
  35379. JPoint.prototype.neg = function neg() {
  35380. return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
  35381. };
  35382. JPoint.prototype.add = function add(p) {
  35383. // O + P = P
  35384. if (this.isInfinity())
  35385. return p;
  35386. // P + O = P
  35387. if (p.isInfinity())
  35388. return this;
  35389. // 12M + 4S + 7A
  35390. var pz2 = p.z.redSqr();
  35391. var z2 = this.z.redSqr();
  35392. var u1 = this.x.redMul(pz2);
  35393. var u2 = p.x.redMul(z2);
  35394. var s1 = this.y.redMul(pz2.redMul(p.z));
  35395. var s2 = p.y.redMul(z2.redMul(this.z));
  35396. var h = u1.redSub(u2);
  35397. var r = s1.redSub(s2);
  35398. if (h.cmpn(0) === 0) {
  35399. if (r.cmpn(0) !== 0)
  35400. return this.curve.jpoint(null, null, null);
  35401. else
  35402. return this.dbl();
  35403. }
  35404. var h2 = h.redSqr();
  35405. var h3 = h2.redMul(h);
  35406. var v = u1.redMul(h2);
  35407. var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
  35408. var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
  35409. var nz = this.z.redMul(p.z).redMul(h);
  35410. return this.curve.jpoint(nx, ny, nz);
  35411. };
  35412. JPoint.prototype.mixedAdd = function mixedAdd(p) {
  35413. // O + P = P
  35414. if (this.isInfinity())
  35415. return p.toJ();
  35416. // P + O = P
  35417. if (p.isInfinity())
  35418. return this;
  35419. // 8M + 3S + 7A
  35420. var z2 = this.z.redSqr();
  35421. var u1 = this.x;
  35422. var u2 = p.x.redMul(z2);
  35423. var s1 = this.y;
  35424. var s2 = p.y.redMul(z2).redMul(this.z);
  35425. var h = u1.redSub(u2);
  35426. var r = s1.redSub(s2);
  35427. if (h.cmpn(0) === 0) {
  35428. if (r.cmpn(0) !== 0)
  35429. return this.curve.jpoint(null, null, null);
  35430. else
  35431. return this.dbl();
  35432. }
  35433. var h2 = h.redSqr();
  35434. var h3 = h2.redMul(h);
  35435. var v = u1.redMul(h2);
  35436. var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
  35437. var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
  35438. var nz = this.z.redMul(h);
  35439. return this.curve.jpoint(nx, ny, nz);
  35440. };
  35441. JPoint.prototype.dblp = function dblp(pow) {
  35442. if (pow === 0)
  35443. return this;
  35444. if (this.isInfinity())
  35445. return this;
  35446. if (!pow)
  35447. return this.dbl();
  35448. var i;
  35449. if (this.curve.zeroA || this.curve.threeA) {
  35450. var r = this;
  35451. for (i = 0; i < pow; i++)
  35452. r = r.dbl();
  35453. return r;
  35454. }
  35455. // 1M + 2S + 1A + N * (4S + 5M + 8A)
  35456. // N = 1 => 6M + 6S + 9A
  35457. var a = this.curve.a;
  35458. var tinv = this.curve.tinv;
  35459. var jx = this.x;
  35460. var jy = this.y;
  35461. var jz = this.z;
  35462. var jz4 = jz.redSqr().redSqr();
  35463. // Reuse results
  35464. var jyd = jy.redAdd(jy);
  35465. for (i = 0; i < pow; i++) {
  35466. var jx2 = jx.redSqr();
  35467. var jyd2 = jyd.redSqr();
  35468. var jyd4 = jyd2.redSqr();
  35469. var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
  35470. var t1 = jx.redMul(jyd2);
  35471. var nx = c.redSqr().redISub(t1.redAdd(t1));
  35472. var t2 = t1.redISub(nx);
  35473. var dny = c.redMul(t2);
  35474. dny = dny.redIAdd(dny).redISub(jyd4);
  35475. var nz = jyd.redMul(jz);
  35476. if (i + 1 < pow)
  35477. jz4 = jz4.redMul(jyd4);
  35478. jx = nx;
  35479. jz = nz;
  35480. jyd = dny;
  35481. }
  35482. return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
  35483. };
  35484. JPoint.prototype.dbl = function dbl() {
  35485. if (this.isInfinity())
  35486. return this;
  35487. if (this.curve.zeroA)
  35488. return this._zeroDbl();
  35489. else if (this.curve.threeA)
  35490. return this._threeDbl();
  35491. else
  35492. return this._dbl();
  35493. };
  35494. JPoint.prototype._zeroDbl = function _zeroDbl() {
  35495. var nx;
  35496. var ny;
  35497. var nz;
  35498. // Z = 1
  35499. if (this.zOne) {
  35500. // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
  35501. // #doubling-mdbl-2007-bl
  35502. // 1M + 5S + 14A
  35503. // XX = X1^2
  35504. var xx = this.x.redSqr();
  35505. // YY = Y1^2
  35506. var yy = this.y.redSqr();
  35507. // YYYY = YY^2
  35508. var yyyy = yy.redSqr();
  35509. // S = 2 * ((X1 + YY)^2 - XX - YYYY)
  35510. var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
  35511. s = s.redIAdd(s);
  35512. // M = 3 * XX + a; a = 0
  35513. var m = xx.redAdd(xx).redIAdd(xx);
  35514. // T = M ^ 2 - 2*S
  35515. var t = m.redSqr().redISub(s).redISub(s);
  35516. // 8 * YYYY
  35517. var yyyy8 = yyyy.redIAdd(yyyy);
  35518. yyyy8 = yyyy8.redIAdd(yyyy8);
  35519. yyyy8 = yyyy8.redIAdd(yyyy8);
  35520. // X3 = T
  35521. nx = t;
  35522. // Y3 = M * (S - T) - 8 * YYYY
  35523. ny = m.redMul(s.redISub(t)).redISub(yyyy8);
  35524. // Z3 = 2*Y1
  35525. nz = this.y.redAdd(this.y);
  35526. } else {
  35527. // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
  35528. // #doubling-dbl-2009-l
  35529. // 2M + 5S + 13A
  35530. // A = X1^2
  35531. var a = this.x.redSqr();
  35532. // B = Y1^2
  35533. var b = this.y.redSqr();
  35534. // C = B^2
  35535. var c = b.redSqr();
  35536. // D = 2 * ((X1 + B)^2 - A - C)
  35537. var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
  35538. d = d.redIAdd(d);
  35539. // E = 3 * A
  35540. var e = a.redAdd(a).redIAdd(a);
  35541. // F = E^2
  35542. var f = e.redSqr();
  35543. // 8 * C
  35544. var c8 = c.redIAdd(c);
  35545. c8 = c8.redIAdd(c8);
  35546. c8 = c8.redIAdd(c8);
  35547. // X3 = F - 2 * D
  35548. nx = f.redISub(d).redISub(d);
  35549. // Y3 = E * (D - X3) - 8 * C
  35550. ny = e.redMul(d.redISub(nx)).redISub(c8);
  35551. // Z3 = 2 * Y1 * Z1
  35552. nz = this.y.redMul(this.z);
  35553. nz = nz.redIAdd(nz);
  35554. }
  35555. return this.curve.jpoint(nx, ny, nz);
  35556. };
  35557. JPoint.prototype._threeDbl = function _threeDbl() {
  35558. var nx;
  35559. var ny;
  35560. var nz;
  35561. // Z = 1
  35562. if (this.zOne) {
  35563. // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
  35564. // #doubling-mdbl-2007-bl
  35565. // 1M + 5S + 15A
  35566. // XX = X1^2
  35567. var xx = this.x.redSqr();
  35568. // YY = Y1^2
  35569. var yy = this.y.redSqr();
  35570. // YYYY = YY^2
  35571. var yyyy = yy.redSqr();
  35572. // S = 2 * ((X1 + YY)^2 - XX - YYYY)
  35573. var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
  35574. s = s.redIAdd(s);
  35575. // M = 3 * XX + a
  35576. var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
  35577. // T = M^2 - 2 * S
  35578. var t = m.redSqr().redISub(s).redISub(s);
  35579. // X3 = T
  35580. nx = t;
  35581. // Y3 = M * (S - T) - 8 * YYYY
  35582. var yyyy8 = yyyy.redIAdd(yyyy);
  35583. yyyy8 = yyyy8.redIAdd(yyyy8);
  35584. yyyy8 = yyyy8.redIAdd(yyyy8);
  35585. ny = m.redMul(s.redISub(t)).redISub(yyyy8);
  35586. // Z3 = 2 * Y1
  35587. nz = this.y.redAdd(this.y);
  35588. } else {
  35589. // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
  35590. // 3M + 5S
  35591. // delta = Z1^2
  35592. var delta = this.z.redSqr();
  35593. // gamma = Y1^2
  35594. var gamma = this.y.redSqr();
  35595. // beta = X1 * gamma
  35596. var beta = this.x.redMul(gamma);
  35597. // alpha = 3 * (X1 - delta) * (X1 + delta)
  35598. var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
  35599. alpha = alpha.redAdd(alpha).redIAdd(alpha);
  35600. // X3 = alpha^2 - 8 * beta
  35601. var beta4 = beta.redIAdd(beta);
  35602. beta4 = beta4.redIAdd(beta4);
  35603. var beta8 = beta4.redAdd(beta4);
  35604. nx = alpha.redSqr().redISub(beta8);
  35605. // Z3 = (Y1 + Z1)^2 - gamma - delta
  35606. nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
  35607. // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
  35608. var ggamma8 = gamma.redSqr();
  35609. ggamma8 = ggamma8.redIAdd(ggamma8);
  35610. ggamma8 = ggamma8.redIAdd(ggamma8);
  35611. ggamma8 = ggamma8.redIAdd(ggamma8);
  35612. ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
  35613. }
  35614. return this.curve.jpoint(nx, ny, nz);
  35615. };
  35616. JPoint.prototype._dbl = function _dbl() {
  35617. var a = this.curve.a;
  35618. // 4M + 6S + 10A
  35619. var jx = this.x;
  35620. var jy = this.y;
  35621. var jz = this.z;
  35622. var jz4 = jz.redSqr().redSqr();
  35623. var jx2 = jx.redSqr();
  35624. var jy2 = jy.redSqr();
  35625. var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
  35626. var jxd4 = jx.redAdd(jx);
  35627. jxd4 = jxd4.redIAdd(jxd4);
  35628. var t1 = jxd4.redMul(jy2);
  35629. var nx = c.redSqr().redISub(t1.redAdd(t1));
  35630. var t2 = t1.redISub(nx);
  35631. var jyd8 = jy2.redSqr();
  35632. jyd8 = jyd8.redIAdd(jyd8);
  35633. jyd8 = jyd8.redIAdd(jyd8);
  35634. jyd8 = jyd8.redIAdd(jyd8);
  35635. var ny = c.redMul(t2).redISub(jyd8);
  35636. var nz = jy.redAdd(jy).redMul(jz);
  35637. return this.curve.jpoint(nx, ny, nz);
  35638. };
  35639. JPoint.prototype.trpl = function trpl() {
  35640. if (!this.curve.zeroA)
  35641. return this.dbl().add(this);
  35642. // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
  35643. // 5M + 10S + ...
  35644. // XX = X1^2
  35645. var xx = this.x.redSqr();
  35646. // YY = Y1^2
  35647. var yy = this.y.redSqr();
  35648. // ZZ = Z1^2
  35649. var zz = this.z.redSqr();
  35650. // YYYY = YY^2
  35651. var yyyy = yy.redSqr();
  35652. // M = 3 * XX + a * ZZ2; a = 0
  35653. var m = xx.redAdd(xx).redIAdd(xx);
  35654. // MM = M^2
  35655. var mm = m.redSqr();
  35656. // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
  35657. var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
  35658. e = e.redIAdd(e);
  35659. e = e.redAdd(e).redIAdd(e);
  35660. e = e.redISub(mm);
  35661. // EE = E^2
  35662. var ee = e.redSqr();
  35663. // T = 16*YYYY
  35664. var t = yyyy.redIAdd(yyyy);
  35665. t = t.redIAdd(t);
  35666. t = t.redIAdd(t);
  35667. t = t.redIAdd(t);
  35668. // U = (M + E)^2 - MM - EE - T
  35669. var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
  35670. // X3 = 4 * (X1 * EE - 4 * YY * U)
  35671. var yyu4 = yy.redMul(u);
  35672. yyu4 = yyu4.redIAdd(yyu4);
  35673. yyu4 = yyu4.redIAdd(yyu4);
  35674. var nx = this.x.redMul(ee).redISub(yyu4);
  35675. nx = nx.redIAdd(nx);
  35676. nx = nx.redIAdd(nx);
  35677. // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
  35678. var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
  35679. ny = ny.redIAdd(ny);
  35680. ny = ny.redIAdd(ny);
  35681. ny = ny.redIAdd(ny);
  35682. // Z3 = (Z1 + E)^2 - ZZ - EE
  35683. var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
  35684. return this.curve.jpoint(nx, ny, nz);
  35685. };
  35686. JPoint.prototype.mul = function mul(k, kbase) {
  35687. k = new BN(k, kbase);
  35688. return this.curve._wnafMul(this, k);
  35689. };
  35690. JPoint.prototype.eq = function eq(p) {
  35691. if (p.type === 'affine')
  35692. return this.eq(p.toJ());
  35693. if (this === p)
  35694. return true;
  35695. // x1 * z2^2 == x2 * z1^2
  35696. var z2 = this.z.redSqr();
  35697. var pz2 = p.z.redSqr();
  35698. if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
  35699. return false;
  35700. // y1 * z2^3 == y2 * z1^3
  35701. var z3 = z2.redMul(this.z);
  35702. var pz3 = pz2.redMul(p.z);
  35703. return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
  35704. };
  35705. JPoint.prototype.eqXToP = function eqXToP(x) {
  35706. var zs = this.z.redSqr();
  35707. var rx = x.toRed(this.curve.red).redMul(zs);
  35708. if (this.x.cmp(rx) === 0)
  35709. return true;
  35710. var xc = x.clone();
  35711. var t = this.curve.redN.redMul(zs);
  35712. for (;;) {
  35713. xc.iadd(this.curve.n);
  35714. if (xc.cmp(this.curve.p) >= 0)
  35715. return false;
  35716. rx.redIAdd(t);
  35717. if (this.x.cmp(rx) === 0)
  35718. return true;
  35719. }
  35720. };
  35721. JPoint.prototype.inspect = function inspect() {
  35722. if (this.isInfinity())
  35723. return '<EC JPoint Infinity>';
  35724. return '<EC JPoint x: ' + this.x.toString(16, 2) +
  35725. ' y: ' + this.y.toString(16, 2) +
  35726. ' z: ' + this.z.toString(16, 2) + '>';
  35727. };
  35728. JPoint.prototype.isInfinity = function isInfinity() {
  35729. // XXX This code assumes that zero is always zero in red
  35730. return this.z.cmpn(0) === 0;
  35731. };
  35732. /***/ }),
  35733. /***/ 45427:
  35734. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  35735. "use strict";
  35736. var curves = exports;
  35737. var hash = __webpack_require__(33715);
  35738. var curve = __webpack_require__(88254);
  35739. var utils = __webpack_require__(80953);
  35740. var assert = utils.assert;
  35741. function PresetCurve(options) {
  35742. if (options.type === 'short')
  35743. this.curve = new curve.short(options);
  35744. else if (options.type === 'edwards')
  35745. this.curve = new curve.edwards(options);
  35746. else
  35747. this.curve = new curve.mont(options);
  35748. this.g = this.curve.g;
  35749. this.n = this.curve.n;
  35750. this.hash = options.hash;
  35751. assert(this.g.validate(), 'Invalid curve');
  35752. assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
  35753. }
  35754. curves.PresetCurve = PresetCurve;
  35755. function defineCurve(name, options) {
  35756. Object.defineProperty(curves, name, {
  35757. configurable: true,
  35758. enumerable: true,
  35759. get: function() {
  35760. var curve = new PresetCurve(options);
  35761. Object.defineProperty(curves, name, {
  35762. configurable: true,
  35763. enumerable: true,
  35764. value: curve,
  35765. });
  35766. return curve;
  35767. },
  35768. });
  35769. }
  35770. defineCurve('p192', {
  35771. type: 'short',
  35772. prime: 'p192',
  35773. p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
  35774. a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
  35775. b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
  35776. n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
  35777. hash: hash.sha256,
  35778. gRed: false,
  35779. g: [
  35780. '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
  35781. '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',
  35782. ],
  35783. });
  35784. defineCurve('p224', {
  35785. type: 'short',
  35786. prime: 'p224',
  35787. p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
  35788. a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
  35789. b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
  35790. n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
  35791. hash: hash.sha256,
  35792. gRed: false,
  35793. g: [
  35794. 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
  35795. 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',
  35796. ],
  35797. });
  35798. defineCurve('p256', {
  35799. type: 'short',
  35800. prime: null,
  35801. p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
  35802. a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
  35803. b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
  35804. n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
  35805. hash: hash.sha256,
  35806. gRed: false,
  35807. g: [
  35808. '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
  35809. '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',
  35810. ],
  35811. });
  35812. defineCurve('p384', {
  35813. type: 'short',
  35814. prime: null,
  35815. p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
  35816. 'fffffffe ffffffff 00000000 00000000 ffffffff',
  35817. a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
  35818. 'fffffffe ffffffff 00000000 00000000 fffffffc',
  35819. b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
  35820. '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
  35821. n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
  35822. 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
  35823. hash: hash.sha384,
  35824. gRed: false,
  35825. g: [
  35826. 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
  35827. '5502f25d bf55296c 3a545e38 72760ab7',
  35828. '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
  35829. '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',
  35830. ],
  35831. });
  35832. defineCurve('p521', {
  35833. type: 'short',
  35834. prime: null,
  35835. p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
  35836. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
  35837. 'ffffffff ffffffff ffffffff ffffffff ffffffff',
  35838. a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
  35839. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
  35840. 'ffffffff ffffffff ffffffff ffffffff fffffffc',
  35841. b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
  35842. '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
  35843. '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
  35844. n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
  35845. 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
  35846. 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
  35847. hash: hash.sha512,
  35848. gRed: false,
  35849. g: [
  35850. '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
  35851. '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
  35852. 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
  35853. '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
  35854. '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
  35855. '3fad0761 353c7086 a272c240 88be9476 9fd16650',
  35856. ],
  35857. });
  35858. defineCurve('curve25519', {
  35859. type: 'mont',
  35860. prime: 'p25519',
  35861. p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
  35862. a: '76d06',
  35863. b: '1',
  35864. n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
  35865. hash: hash.sha256,
  35866. gRed: false,
  35867. g: [
  35868. '9',
  35869. ],
  35870. });
  35871. defineCurve('ed25519', {
  35872. type: 'edwards',
  35873. prime: 'p25519',
  35874. p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
  35875. a: '-1',
  35876. c: '1',
  35877. // -121665 * (121666^(-1)) (mod P)
  35878. d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
  35879. n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
  35880. hash: hash.sha256,
  35881. gRed: false,
  35882. g: [
  35883. '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
  35884. // 4/5
  35885. '6666666666666666666666666666666666666666666666666666666666666658',
  35886. ],
  35887. });
  35888. var pre;
  35889. try {
  35890. pre = __webpack_require__(91037);
  35891. } catch (e) {
  35892. pre = undefined;
  35893. }
  35894. defineCurve('secp256k1', {
  35895. type: 'short',
  35896. prime: 'k256',
  35897. p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
  35898. a: '0',
  35899. b: '7',
  35900. n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
  35901. h: '1',
  35902. hash: hash.sha256,
  35903. // Precomputed endomorphism
  35904. beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
  35905. lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
  35906. basis: [
  35907. {
  35908. a: '3086d221a7d46bcde86c90e49284eb15',
  35909. b: '-e4437ed6010e88286f547fa90abfe4c3',
  35910. },
  35911. {
  35912. a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
  35913. b: '3086d221a7d46bcde86c90e49284eb15',
  35914. },
  35915. ],
  35916. gRed: false,
  35917. g: [
  35918. '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
  35919. '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
  35920. pre,
  35921. ],
  35922. });
  35923. /***/ }),
  35924. /***/ 57954:
  35925. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  35926. "use strict";
  35927. var BN = __webpack_require__(73785);
  35928. var HmacDRBG = __webpack_require__(2156);
  35929. var utils = __webpack_require__(80953);
  35930. var curves = __webpack_require__(45427);
  35931. var rand = __webpack_require__(29931);
  35932. var assert = utils.assert;
  35933. var KeyPair = __webpack_require__(31251);
  35934. var Signature = __webpack_require__(90611);
  35935. function EC(options) {
  35936. if (!(this instanceof EC))
  35937. return new EC(options);
  35938. // Shortcut `elliptic.ec(curve-name)`
  35939. if (typeof options === 'string') {
  35940. assert(Object.prototype.hasOwnProperty.call(curves, options),
  35941. 'Unknown curve ' + options);
  35942. options = curves[options];
  35943. }
  35944. // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
  35945. if (options instanceof curves.PresetCurve)
  35946. options = { curve: options };
  35947. this.curve = options.curve.curve;
  35948. this.n = this.curve.n;
  35949. this.nh = this.n.ushrn(1);
  35950. this.g = this.curve.g;
  35951. // Point on curve
  35952. this.g = options.curve.g;
  35953. this.g.precompute(options.curve.n.bitLength() + 1);
  35954. // Hash for function for DRBG
  35955. this.hash = options.hash || options.curve.hash;
  35956. }
  35957. module.exports = EC;
  35958. EC.prototype.keyPair = function keyPair(options) {
  35959. return new KeyPair(this, options);
  35960. };
  35961. EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
  35962. return KeyPair.fromPrivate(this, priv, enc);
  35963. };
  35964. EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
  35965. return KeyPair.fromPublic(this, pub, enc);
  35966. };
  35967. EC.prototype.genKeyPair = function genKeyPair(options) {
  35968. if (!options)
  35969. options = {};
  35970. // Instantiate Hmac_DRBG
  35971. var drbg = new HmacDRBG({
  35972. hash: this.hash,
  35973. pers: options.pers,
  35974. persEnc: options.persEnc || 'utf8',
  35975. entropy: options.entropy || rand(this.hash.hmacStrength),
  35976. entropyEnc: options.entropy && options.entropyEnc || 'utf8',
  35977. nonce: this.n.toArray(),
  35978. });
  35979. var bytes = this.n.byteLength();
  35980. var ns2 = this.n.sub(new BN(2));
  35981. for (;;) {
  35982. var priv = new BN(drbg.generate(bytes));
  35983. if (priv.cmp(ns2) > 0)
  35984. continue;
  35985. priv.iaddn(1);
  35986. return this.keyFromPrivate(priv);
  35987. }
  35988. };
  35989. EC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {
  35990. var delta = msg.byteLength() * 8 - this.n.bitLength();
  35991. if (delta > 0)
  35992. msg = msg.ushrn(delta);
  35993. if (!truncOnly && msg.cmp(this.n) >= 0)
  35994. return msg.sub(this.n);
  35995. else
  35996. return msg;
  35997. };
  35998. EC.prototype.sign = function sign(msg, key, enc, options) {
  35999. if (typeof enc === 'object') {
  36000. options = enc;
  36001. enc = null;
  36002. }
  36003. if (!options)
  36004. options = {};
  36005. key = this.keyFromPrivate(key, enc);
  36006. msg = this._truncateToN(new BN(msg, 16));
  36007. // Zero-extend key to provide enough entropy
  36008. var bytes = this.n.byteLength();
  36009. var bkey = key.getPrivate().toArray('be', bytes);
  36010. // Zero-extend nonce to have the same byte size as N
  36011. var nonce = msg.toArray('be', bytes);
  36012. // Instantiate Hmac_DRBG
  36013. var drbg = new HmacDRBG({
  36014. hash: this.hash,
  36015. entropy: bkey,
  36016. nonce: nonce,
  36017. pers: options.pers,
  36018. persEnc: options.persEnc || 'utf8',
  36019. });
  36020. // Number of bytes to generate
  36021. var ns1 = this.n.sub(new BN(1));
  36022. for (var iter = 0; ; iter++) {
  36023. var k = options.k ?
  36024. options.k(iter) :
  36025. new BN(drbg.generate(this.n.byteLength()));
  36026. k = this._truncateToN(k, true);
  36027. if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
  36028. continue;
  36029. var kp = this.g.mul(k);
  36030. if (kp.isInfinity())
  36031. continue;
  36032. var kpX = kp.getX();
  36033. var r = kpX.umod(this.n);
  36034. if (r.cmpn(0) === 0)
  36035. continue;
  36036. var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
  36037. s = s.umod(this.n);
  36038. if (s.cmpn(0) === 0)
  36039. continue;
  36040. var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
  36041. (kpX.cmp(r) !== 0 ? 2 : 0);
  36042. // Use complement of `s`, if it is > `n / 2`
  36043. if (options.canonical && s.cmp(this.nh) > 0) {
  36044. s = this.n.sub(s);
  36045. recoveryParam ^= 1;
  36046. }
  36047. return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
  36048. }
  36049. };
  36050. EC.prototype.verify = function verify(msg, signature, key, enc) {
  36051. msg = this._truncateToN(new BN(msg, 16));
  36052. key = this.keyFromPublic(key, enc);
  36053. signature = new Signature(signature, 'hex');
  36054. // Perform primitive values validation
  36055. var r = signature.r;
  36056. var s = signature.s;
  36057. if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
  36058. return false;
  36059. if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
  36060. return false;
  36061. // Validate signature
  36062. var sinv = s.invm(this.n);
  36063. var u1 = sinv.mul(msg).umod(this.n);
  36064. var u2 = sinv.mul(r).umod(this.n);
  36065. var p;
  36066. if (!this.curve._maxwellTrick) {
  36067. p = this.g.mulAdd(u1, key.getPublic(), u2);
  36068. if (p.isInfinity())
  36069. return false;
  36070. return p.getX().umod(this.n).cmp(r) === 0;
  36071. }
  36072. // NOTE: Greg Maxwell's trick, inspired by:
  36073. // https://git.io/vad3K
  36074. p = this.g.jmulAdd(u1, key.getPublic(), u2);
  36075. if (p.isInfinity())
  36076. return false;
  36077. // Compare `p.x` of Jacobian point with `r`,
  36078. // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
  36079. // inverse of `p.z^2`
  36080. return p.eqXToP(r);
  36081. };
  36082. EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
  36083. assert((3 & j) === j, 'The recovery param is more than two bits');
  36084. signature = new Signature(signature, enc);
  36085. var n = this.n;
  36086. var e = new BN(msg);
  36087. var r = signature.r;
  36088. var s = signature.s;
  36089. // A set LSB signifies that the y-coordinate is odd
  36090. var isYOdd = j & 1;
  36091. var isSecondKey = j >> 1;
  36092. if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
  36093. throw new Error('Unable to find sencond key candinate');
  36094. // 1.1. Let x = r + jn.
  36095. if (isSecondKey)
  36096. r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
  36097. else
  36098. r = this.curve.pointFromX(r, isYOdd);
  36099. var rInv = signature.r.invm(n);
  36100. var s1 = n.sub(e).mul(rInv).umod(n);
  36101. var s2 = s.mul(rInv).umod(n);
  36102. // 1.6.1 Compute Q = r^-1 (sR - eG)
  36103. // Q = r^-1 (sR + -eG)
  36104. return this.g.mulAdd(s1, r, s2);
  36105. };
  36106. EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
  36107. signature = new Signature(signature, enc);
  36108. if (signature.recoveryParam !== null)
  36109. return signature.recoveryParam;
  36110. for (var i = 0; i < 4; i++) {
  36111. var Qprime;
  36112. try {
  36113. Qprime = this.recoverPubKey(e, signature, i);
  36114. } catch (e) {
  36115. continue;
  36116. }
  36117. if (Qprime.eq(Q))
  36118. return i;
  36119. }
  36120. throw new Error('Unable to find valid recovery factor');
  36121. };
  36122. /***/ }),
  36123. /***/ 31251:
  36124. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  36125. "use strict";
  36126. var BN = __webpack_require__(73785);
  36127. var utils = __webpack_require__(80953);
  36128. var assert = utils.assert;
  36129. function KeyPair(ec, options) {
  36130. this.ec = ec;
  36131. this.priv = null;
  36132. this.pub = null;
  36133. // KeyPair(ec, { priv: ..., pub: ... })
  36134. if (options.priv)
  36135. this._importPrivate(options.priv, options.privEnc);
  36136. if (options.pub)
  36137. this._importPublic(options.pub, options.pubEnc);
  36138. }
  36139. module.exports = KeyPair;
  36140. KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
  36141. if (pub instanceof KeyPair)
  36142. return pub;
  36143. return new KeyPair(ec, {
  36144. pub: pub,
  36145. pubEnc: enc,
  36146. });
  36147. };
  36148. KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
  36149. if (priv instanceof KeyPair)
  36150. return priv;
  36151. return new KeyPair(ec, {
  36152. priv: priv,
  36153. privEnc: enc,
  36154. });
  36155. };
  36156. KeyPair.prototype.validate = function validate() {
  36157. var pub = this.getPublic();
  36158. if (pub.isInfinity())
  36159. return { result: false, reason: 'Invalid public key' };
  36160. if (!pub.validate())
  36161. return { result: false, reason: 'Public key is not a point' };
  36162. if (!pub.mul(this.ec.curve.n).isInfinity())
  36163. return { result: false, reason: 'Public key * N != O' };
  36164. return { result: true, reason: null };
  36165. };
  36166. KeyPair.prototype.getPublic = function getPublic(compact, enc) {
  36167. // compact is optional argument
  36168. if (typeof compact === 'string') {
  36169. enc = compact;
  36170. compact = null;
  36171. }
  36172. if (!this.pub)
  36173. this.pub = this.ec.g.mul(this.priv);
  36174. if (!enc)
  36175. return this.pub;
  36176. return this.pub.encode(enc, compact);
  36177. };
  36178. KeyPair.prototype.getPrivate = function getPrivate(enc) {
  36179. if (enc === 'hex')
  36180. return this.priv.toString(16, 2);
  36181. else
  36182. return this.priv;
  36183. };
  36184. KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
  36185. this.priv = new BN(key, enc || 16);
  36186. // Ensure that the priv won't be bigger than n, otherwise we may fail
  36187. // in fixed multiplication method
  36188. this.priv = this.priv.umod(this.ec.curve.n);
  36189. };
  36190. KeyPair.prototype._importPublic = function _importPublic(key, enc) {
  36191. if (key.x || key.y) {
  36192. // Montgomery points only have an `x` coordinate.
  36193. // Weierstrass/Edwards points on the other hand have both `x` and
  36194. // `y` coordinates.
  36195. if (this.ec.curve.type === 'mont') {
  36196. assert(key.x, 'Need x coordinate');
  36197. } else if (this.ec.curve.type === 'short' ||
  36198. this.ec.curve.type === 'edwards') {
  36199. assert(key.x && key.y, 'Need both x and y coordinate');
  36200. }
  36201. this.pub = this.ec.curve.point(key.x, key.y);
  36202. return;
  36203. }
  36204. this.pub = this.ec.curve.decodePoint(key, enc);
  36205. };
  36206. // ECDH
  36207. KeyPair.prototype.derive = function derive(pub) {
  36208. if(!pub.validate()) {
  36209. assert(pub.validate(), 'public point not validated');
  36210. }
  36211. return pub.mul(this.priv).getX();
  36212. };
  36213. // ECDSA
  36214. KeyPair.prototype.sign = function sign(msg, enc, options) {
  36215. return this.ec.sign(msg, this, enc, options);
  36216. };
  36217. KeyPair.prototype.verify = function verify(msg, signature) {
  36218. return this.ec.verify(msg, signature, this);
  36219. };
  36220. KeyPair.prototype.inspect = function inspect() {
  36221. return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
  36222. ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
  36223. };
  36224. /***/ }),
  36225. /***/ 90611:
  36226. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  36227. "use strict";
  36228. var BN = __webpack_require__(73785);
  36229. var utils = __webpack_require__(80953);
  36230. var assert = utils.assert;
  36231. function Signature(options, enc) {
  36232. if (options instanceof Signature)
  36233. return options;
  36234. if (this._importDER(options, enc))
  36235. return;
  36236. assert(options.r && options.s, 'Signature without r or s');
  36237. this.r = new BN(options.r, 16);
  36238. this.s = new BN(options.s, 16);
  36239. if (options.recoveryParam === undefined)
  36240. this.recoveryParam = null;
  36241. else
  36242. this.recoveryParam = options.recoveryParam;
  36243. }
  36244. module.exports = Signature;
  36245. function Position() {
  36246. this.place = 0;
  36247. }
  36248. function getLength(buf, p) {
  36249. var initial = buf[p.place++];
  36250. if (!(initial & 0x80)) {
  36251. return initial;
  36252. }
  36253. var octetLen = initial & 0xf;
  36254. // Indefinite length or overflow
  36255. if (octetLen === 0 || octetLen > 4) {
  36256. return false;
  36257. }
  36258. var val = 0;
  36259. for (var i = 0, off = p.place; i < octetLen; i++, off++) {
  36260. val <<= 8;
  36261. val |= buf[off];
  36262. val >>>= 0;
  36263. }
  36264. // Leading zeroes
  36265. if (val <= 0x7f) {
  36266. return false;
  36267. }
  36268. p.place = off;
  36269. return val;
  36270. }
  36271. function rmPadding(buf) {
  36272. var i = 0;
  36273. var len = buf.length - 1;
  36274. while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
  36275. i++;
  36276. }
  36277. if (i === 0) {
  36278. return buf;
  36279. }
  36280. return buf.slice(i);
  36281. }
  36282. Signature.prototype._importDER = function _importDER(data, enc) {
  36283. data = utils.toArray(data, enc);
  36284. var p = new Position();
  36285. if (data[p.place++] !== 0x30) {
  36286. return false;
  36287. }
  36288. var len = getLength(data, p);
  36289. if (len === false) {
  36290. return false;
  36291. }
  36292. if ((len + p.place) !== data.length) {
  36293. return false;
  36294. }
  36295. if (data[p.place++] !== 0x02) {
  36296. return false;
  36297. }
  36298. var rlen = getLength(data, p);
  36299. if (rlen === false) {
  36300. return false;
  36301. }
  36302. var r = data.slice(p.place, rlen + p.place);
  36303. p.place += rlen;
  36304. if (data[p.place++] !== 0x02) {
  36305. return false;
  36306. }
  36307. var slen = getLength(data, p);
  36308. if (slen === false) {
  36309. return false;
  36310. }
  36311. if (data.length !== slen + p.place) {
  36312. return false;
  36313. }
  36314. var s = data.slice(p.place, slen + p.place);
  36315. if (r[0] === 0) {
  36316. if (r[1] & 0x80) {
  36317. r = r.slice(1);
  36318. } else {
  36319. // Leading zeroes
  36320. return false;
  36321. }
  36322. }
  36323. if (s[0] === 0) {
  36324. if (s[1] & 0x80) {
  36325. s = s.slice(1);
  36326. } else {
  36327. // Leading zeroes
  36328. return false;
  36329. }
  36330. }
  36331. this.r = new BN(r);
  36332. this.s = new BN(s);
  36333. this.recoveryParam = null;
  36334. return true;
  36335. };
  36336. function constructLength(arr, len) {
  36337. if (len < 0x80) {
  36338. arr.push(len);
  36339. return;
  36340. }
  36341. var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
  36342. arr.push(octets | 0x80);
  36343. while (--octets) {
  36344. arr.push((len >>> (octets << 3)) & 0xff);
  36345. }
  36346. arr.push(len);
  36347. }
  36348. Signature.prototype.toDER = function toDER(enc) {
  36349. var r = this.r.toArray();
  36350. var s = this.s.toArray();
  36351. // Pad values
  36352. if (r[0] & 0x80)
  36353. r = [ 0 ].concat(r);
  36354. // Pad values
  36355. if (s[0] & 0x80)
  36356. s = [ 0 ].concat(s);
  36357. r = rmPadding(r);
  36358. s = rmPadding(s);
  36359. while (!s[0] && !(s[1] & 0x80)) {
  36360. s = s.slice(1);
  36361. }
  36362. var arr = [ 0x02 ];
  36363. constructLength(arr, r.length);
  36364. arr = arr.concat(r);
  36365. arr.push(0x02);
  36366. constructLength(arr, s.length);
  36367. var backHalf = arr.concat(s);
  36368. var res = [ 0x30 ];
  36369. constructLength(res, backHalf.length);
  36370. res = res.concat(backHalf);
  36371. return utils.encode(res, enc);
  36372. };
  36373. /***/ }),
  36374. /***/ 65980:
  36375. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  36376. "use strict";
  36377. var hash = __webpack_require__(33715);
  36378. var curves = __webpack_require__(45427);
  36379. var utils = __webpack_require__(80953);
  36380. var assert = utils.assert;
  36381. var parseBytes = utils.parseBytes;
  36382. var KeyPair = __webpack_require__(79087);
  36383. var Signature = __webpack_require__(23622);
  36384. function EDDSA(curve) {
  36385. assert(curve === 'ed25519', 'only tested with ed25519 so far');
  36386. if (!(this instanceof EDDSA))
  36387. return new EDDSA(curve);
  36388. curve = curves[curve].curve;
  36389. this.curve = curve;
  36390. this.g = curve.g;
  36391. this.g.precompute(curve.n.bitLength() + 1);
  36392. this.pointClass = curve.point().constructor;
  36393. this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
  36394. this.hash = hash.sha512;
  36395. }
  36396. module.exports = EDDSA;
  36397. /**
  36398. * @param {Array|String} message - message bytes
  36399. * @param {Array|String|KeyPair} secret - secret bytes or a keypair
  36400. * @returns {Signature} - signature
  36401. */
  36402. EDDSA.prototype.sign = function sign(message, secret) {
  36403. message = parseBytes(message);
  36404. var key = this.keyFromSecret(secret);
  36405. var r = this.hashInt(key.messagePrefix(), message);
  36406. var R = this.g.mul(r);
  36407. var Rencoded = this.encodePoint(R);
  36408. var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
  36409. .mul(key.priv());
  36410. var S = r.add(s_).umod(this.curve.n);
  36411. return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
  36412. };
  36413. /**
  36414. * @param {Array} message - message bytes
  36415. * @param {Array|String|Signature} sig - sig bytes
  36416. * @param {Array|String|Point|KeyPair} pub - public key
  36417. * @returns {Boolean} - true if public key matches sig of message
  36418. */
  36419. EDDSA.prototype.verify = function verify(message, sig, pub) {
  36420. message = parseBytes(message);
  36421. sig = this.makeSignature(sig);
  36422. var key = this.keyFromPublic(pub);
  36423. var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
  36424. var SG = this.g.mul(sig.S());
  36425. var RplusAh = sig.R().add(key.pub().mul(h));
  36426. return RplusAh.eq(SG);
  36427. };
  36428. EDDSA.prototype.hashInt = function hashInt() {
  36429. var hash = this.hash();
  36430. for (var i = 0; i < arguments.length; i++)
  36431. hash.update(arguments[i]);
  36432. return utils.intFromLE(hash.digest()).umod(this.curve.n);
  36433. };
  36434. EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
  36435. return KeyPair.fromPublic(this, pub);
  36436. };
  36437. EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
  36438. return KeyPair.fromSecret(this, secret);
  36439. };
  36440. EDDSA.prototype.makeSignature = function makeSignature(sig) {
  36441. if (sig instanceof Signature)
  36442. return sig;
  36443. return new Signature(this, sig);
  36444. };
  36445. /**
  36446. * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
  36447. *
  36448. * EDDSA defines methods for encoding and decoding points and integers. These are
  36449. * helper convenience methods, that pass along to utility functions implied
  36450. * parameters.
  36451. *
  36452. */
  36453. EDDSA.prototype.encodePoint = function encodePoint(point) {
  36454. var enc = point.getY().toArray('le', this.encodingLength);
  36455. enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
  36456. return enc;
  36457. };
  36458. EDDSA.prototype.decodePoint = function decodePoint(bytes) {
  36459. bytes = utils.parseBytes(bytes);
  36460. var lastIx = bytes.length - 1;
  36461. var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
  36462. var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
  36463. var y = utils.intFromLE(normed);
  36464. return this.curve.pointFromY(y, xIsOdd);
  36465. };
  36466. EDDSA.prototype.encodeInt = function encodeInt(num) {
  36467. return num.toArray('le', this.encodingLength);
  36468. };
  36469. EDDSA.prototype.decodeInt = function decodeInt(bytes) {
  36470. return utils.intFromLE(bytes);
  36471. };
  36472. EDDSA.prototype.isPoint = function isPoint(val) {
  36473. return val instanceof this.pointClass;
  36474. };
  36475. /***/ }),
  36476. /***/ 79087:
  36477. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  36478. "use strict";
  36479. var utils = __webpack_require__(80953);
  36480. var assert = utils.assert;
  36481. var parseBytes = utils.parseBytes;
  36482. var cachedProperty = utils.cachedProperty;
  36483. /**
  36484. * @param {EDDSA} eddsa - instance
  36485. * @param {Object} params - public/private key parameters
  36486. *
  36487. * @param {Array<Byte>} [params.secret] - secret seed bytes
  36488. * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
  36489. * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
  36490. *
  36491. */
  36492. function KeyPair(eddsa, params) {
  36493. this.eddsa = eddsa;
  36494. this._secret = parseBytes(params.secret);
  36495. if (eddsa.isPoint(params.pub))
  36496. this._pub = params.pub;
  36497. else
  36498. this._pubBytes = parseBytes(params.pub);
  36499. }
  36500. KeyPair.fromPublic = function fromPublic(eddsa, pub) {
  36501. if (pub instanceof KeyPair)
  36502. return pub;
  36503. return new KeyPair(eddsa, { pub: pub });
  36504. };
  36505. KeyPair.fromSecret = function fromSecret(eddsa, secret) {
  36506. if (secret instanceof KeyPair)
  36507. return secret;
  36508. return new KeyPair(eddsa, { secret: secret });
  36509. };
  36510. KeyPair.prototype.secret = function secret() {
  36511. return this._secret;
  36512. };
  36513. cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
  36514. return this.eddsa.encodePoint(this.pub());
  36515. });
  36516. cachedProperty(KeyPair, 'pub', function pub() {
  36517. if (this._pubBytes)
  36518. return this.eddsa.decodePoint(this._pubBytes);
  36519. return this.eddsa.g.mul(this.priv());
  36520. });
  36521. cachedProperty(KeyPair, 'privBytes', function privBytes() {
  36522. var eddsa = this.eddsa;
  36523. var hash = this.hash();
  36524. var lastIx = eddsa.encodingLength - 1;
  36525. var a = hash.slice(0, eddsa.encodingLength);
  36526. a[0] &= 248;
  36527. a[lastIx] &= 127;
  36528. a[lastIx] |= 64;
  36529. return a;
  36530. });
  36531. cachedProperty(KeyPair, 'priv', function priv() {
  36532. return this.eddsa.decodeInt(this.privBytes());
  36533. });
  36534. cachedProperty(KeyPair, 'hash', function hash() {
  36535. return this.eddsa.hash().update(this.secret()).digest();
  36536. });
  36537. cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
  36538. return this.hash().slice(this.eddsa.encodingLength);
  36539. });
  36540. KeyPair.prototype.sign = function sign(message) {
  36541. assert(this._secret, 'KeyPair can only verify');
  36542. return this.eddsa.sign(message, this);
  36543. };
  36544. KeyPair.prototype.verify = function verify(message, sig) {
  36545. return this.eddsa.verify(message, sig, this);
  36546. };
  36547. KeyPair.prototype.getSecret = function getSecret(enc) {
  36548. assert(this._secret, 'KeyPair is public only');
  36549. return utils.encode(this.secret(), enc);
  36550. };
  36551. KeyPair.prototype.getPublic = function getPublic(enc) {
  36552. return utils.encode(this.pubBytes(), enc);
  36553. };
  36554. module.exports = KeyPair;
  36555. /***/ }),
  36556. /***/ 23622:
  36557. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  36558. "use strict";
  36559. var BN = __webpack_require__(73785);
  36560. var utils = __webpack_require__(80953);
  36561. var assert = utils.assert;
  36562. var cachedProperty = utils.cachedProperty;
  36563. var parseBytes = utils.parseBytes;
  36564. /**
  36565. * @param {EDDSA} eddsa - eddsa instance
  36566. * @param {Array<Bytes>|Object} sig -
  36567. * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
  36568. * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
  36569. * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
  36570. * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
  36571. */
  36572. function Signature(eddsa, sig) {
  36573. this.eddsa = eddsa;
  36574. if (typeof sig !== 'object')
  36575. sig = parseBytes(sig);
  36576. if (Array.isArray(sig)) {
  36577. sig = {
  36578. R: sig.slice(0, eddsa.encodingLength),
  36579. S: sig.slice(eddsa.encodingLength),
  36580. };
  36581. }
  36582. assert(sig.R && sig.S, 'Signature without R or S');
  36583. if (eddsa.isPoint(sig.R))
  36584. this._R = sig.R;
  36585. if (sig.S instanceof BN)
  36586. this._S = sig.S;
  36587. this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
  36588. this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
  36589. }
  36590. cachedProperty(Signature, 'S', function S() {
  36591. return this.eddsa.decodeInt(this.Sencoded());
  36592. });
  36593. cachedProperty(Signature, 'R', function R() {
  36594. return this.eddsa.decodePoint(this.Rencoded());
  36595. });
  36596. cachedProperty(Signature, 'Rencoded', function Rencoded() {
  36597. return this.eddsa.encodePoint(this.R());
  36598. });
  36599. cachedProperty(Signature, 'Sencoded', function Sencoded() {
  36600. return this.eddsa.encodeInt(this.S());
  36601. });
  36602. Signature.prototype.toBytes = function toBytes() {
  36603. return this.Rencoded().concat(this.Sencoded());
  36604. };
  36605. Signature.prototype.toHex = function toHex() {
  36606. return utils.encode(this.toBytes(), 'hex').toUpperCase();
  36607. };
  36608. module.exports = Signature;
  36609. /***/ }),
  36610. /***/ 91037:
  36611. /***/ ((module) => {
  36612. module.exports = {
  36613. doubles: {
  36614. step: 4,
  36615. points: [
  36616. [
  36617. 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
  36618. 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',
  36619. ],
  36620. [
  36621. '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
  36622. '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',
  36623. ],
  36624. [
  36625. '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
  36626. 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',
  36627. ],
  36628. [
  36629. '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
  36630. '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',
  36631. ],
  36632. [
  36633. '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
  36634. '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',
  36635. ],
  36636. [
  36637. '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
  36638. '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',
  36639. ],
  36640. [
  36641. 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
  36642. '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',
  36643. ],
  36644. [
  36645. '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
  36646. 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',
  36647. ],
  36648. [
  36649. 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
  36650. '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',
  36651. ],
  36652. [
  36653. 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
  36654. 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',
  36655. ],
  36656. [
  36657. 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
  36658. '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',
  36659. ],
  36660. [
  36661. '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
  36662. '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',
  36663. ],
  36664. [
  36665. '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
  36666. '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',
  36667. ],
  36668. [
  36669. '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
  36670. '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',
  36671. ],
  36672. [
  36673. '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
  36674. '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',
  36675. ],
  36676. [
  36677. '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
  36678. '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',
  36679. ],
  36680. [
  36681. '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
  36682. '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',
  36683. ],
  36684. [
  36685. '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
  36686. '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',
  36687. ],
  36688. [
  36689. '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
  36690. 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',
  36691. ],
  36692. [
  36693. 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
  36694. '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',
  36695. ],
  36696. [
  36697. 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
  36698. '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',
  36699. ],
  36700. [
  36701. '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
  36702. '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',
  36703. ],
  36704. [
  36705. '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
  36706. '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',
  36707. ],
  36708. [
  36709. 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
  36710. '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',
  36711. ],
  36712. [
  36713. '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
  36714. 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',
  36715. ],
  36716. [
  36717. 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
  36718. '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',
  36719. ],
  36720. [
  36721. 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
  36722. 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',
  36723. ],
  36724. [
  36725. 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
  36726. '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',
  36727. ],
  36728. [
  36729. 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
  36730. 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',
  36731. ],
  36732. [
  36733. 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
  36734. '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',
  36735. ],
  36736. [
  36737. '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
  36738. 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',
  36739. ],
  36740. [
  36741. '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
  36742. '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',
  36743. ],
  36744. [
  36745. 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
  36746. '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',
  36747. ],
  36748. [
  36749. '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
  36750. 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',
  36751. ],
  36752. [
  36753. 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
  36754. '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',
  36755. ],
  36756. [
  36757. 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
  36758. '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',
  36759. ],
  36760. [
  36761. 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
  36762. 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',
  36763. ],
  36764. [
  36765. '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
  36766. '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',
  36767. ],
  36768. [
  36769. '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
  36770. '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',
  36771. ],
  36772. [
  36773. '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
  36774. 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',
  36775. ],
  36776. [
  36777. '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
  36778. '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',
  36779. ],
  36780. [
  36781. 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
  36782. '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',
  36783. ],
  36784. [
  36785. '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
  36786. '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',
  36787. ],
  36788. [
  36789. '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
  36790. 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',
  36791. ],
  36792. [
  36793. '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
  36794. '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',
  36795. ],
  36796. [
  36797. 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
  36798. '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',
  36799. ],
  36800. [
  36801. '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
  36802. 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',
  36803. ],
  36804. [
  36805. 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
  36806. 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',
  36807. ],
  36808. [
  36809. 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
  36810. '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',
  36811. ],
  36812. [
  36813. '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
  36814. 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',
  36815. ],
  36816. [
  36817. '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
  36818. 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',
  36819. ],
  36820. [
  36821. 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
  36822. '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',
  36823. ],
  36824. [
  36825. 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
  36826. '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',
  36827. ],
  36828. [
  36829. 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
  36830. '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',
  36831. ],
  36832. [
  36833. '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
  36834. 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',
  36835. ],
  36836. [
  36837. '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
  36838. '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',
  36839. ],
  36840. [
  36841. 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
  36842. 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',
  36843. ],
  36844. [
  36845. '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
  36846. 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',
  36847. ],
  36848. [
  36849. '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
  36850. '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',
  36851. ],
  36852. [
  36853. '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
  36854. '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',
  36855. ],
  36856. [
  36857. 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
  36858. 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',
  36859. ],
  36860. [
  36861. '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
  36862. '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',
  36863. ],
  36864. [
  36865. '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
  36866. '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',
  36867. ],
  36868. [
  36869. 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
  36870. '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',
  36871. ],
  36872. [
  36873. 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
  36874. 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',
  36875. ],
  36876. ],
  36877. },
  36878. naf: {
  36879. wnd: 7,
  36880. points: [
  36881. [
  36882. 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
  36883. '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',
  36884. ],
  36885. [
  36886. '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
  36887. 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',
  36888. ],
  36889. [
  36890. '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
  36891. '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',
  36892. ],
  36893. [
  36894. 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
  36895. 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',
  36896. ],
  36897. [
  36898. '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
  36899. 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',
  36900. ],
  36901. [
  36902. 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
  36903. 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',
  36904. ],
  36905. [
  36906. 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
  36907. '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',
  36908. ],
  36909. [
  36910. 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
  36911. '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',
  36912. ],
  36913. [
  36914. '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
  36915. '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',
  36916. ],
  36917. [
  36918. '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
  36919. '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',
  36920. ],
  36921. [
  36922. '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
  36923. '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',
  36924. ],
  36925. [
  36926. '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
  36927. '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',
  36928. ],
  36929. [
  36930. 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
  36931. 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',
  36932. ],
  36933. [
  36934. 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
  36935. '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',
  36936. ],
  36937. [
  36938. '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
  36939. 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',
  36940. ],
  36941. [
  36942. '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
  36943. 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',
  36944. ],
  36945. [
  36946. '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
  36947. '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',
  36948. ],
  36949. [
  36950. '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
  36951. '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',
  36952. ],
  36953. [
  36954. '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
  36955. '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',
  36956. ],
  36957. [
  36958. '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
  36959. 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',
  36960. ],
  36961. [
  36962. 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
  36963. 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',
  36964. ],
  36965. [
  36966. '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
  36967. '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',
  36968. ],
  36969. [
  36970. '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
  36971. '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',
  36972. ],
  36973. [
  36974. 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
  36975. 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',
  36976. ],
  36977. [
  36978. '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
  36979. '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',
  36980. ],
  36981. [
  36982. 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
  36983. 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',
  36984. ],
  36985. [
  36986. 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
  36987. 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',
  36988. ],
  36989. [
  36990. '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
  36991. '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',
  36992. ],
  36993. [
  36994. '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
  36995. '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',
  36996. ],
  36997. [
  36998. '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
  36999. '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',
  37000. ],
  37001. [
  37002. 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
  37003. '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',
  37004. ],
  37005. [
  37006. '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
  37007. '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',
  37008. ],
  37009. [
  37010. 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
  37011. '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',
  37012. ],
  37013. [
  37014. '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
  37015. 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',
  37016. ],
  37017. [
  37018. '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
  37019. 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',
  37020. ],
  37021. [
  37022. 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
  37023. 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',
  37024. ],
  37025. [
  37026. '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
  37027. '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',
  37028. ],
  37029. [
  37030. '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
  37031. 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',
  37032. ],
  37033. [
  37034. 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
  37035. 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',
  37036. ],
  37037. [
  37038. '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
  37039. '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',
  37040. ],
  37041. [
  37042. '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
  37043. 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',
  37044. ],
  37045. [
  37046. '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
  37047. '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',
  37048. ],
  37049. [
  37050. '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
  37051. 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',
  37052. ],
  37053. [
  37054. 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
  37055. '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',
  37056. ],
  37057. [
  37058. '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
  37059. '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',
  37060. ],
  37061. [
  37062. '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
  37063. 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',
  37064. ],
  37065. [
  37066. '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
  37067. 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',
  37068. ],
  37069. [
  37070. 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
  37071. 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',
  37072. ],
  37073. [
  37074. 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
  37075. 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',
  37076. ],
  37077. [
  37078. '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
  37079. '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',
  37080. ],
  37081. [
  37082. '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
  37083. '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',
  37084. ],
  37085. [
  37086. 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
  37087. '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',
  37088. ],
  37089. [
  37090. 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
  37091. 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',
  37092. ],
  37093. [
  37094. '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
  37095. '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',
  37096. ],
  37097. [
  37098. '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
  37099. '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',
  37100. ],
  37101. [
  37102. 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
  37103. '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',
  37104. ],
  37105. [
  37106. '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
  37107. '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',
  37108. ],
  37109. [
  37110. 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
  37111. 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',
  37112. ],
  37113. [
  37114. '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
  37115. 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',
  37116. ],
  37117. [
  37118. '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
  37119. '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',
  37120. ],
  37121. [
  37122. 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
  37123. '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',
  37124. ],
  37125. [
  37126. 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
  37127. '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',
  37128. ],
  37129. [
  37130. '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
  37131. '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',
  37132. ],
  37133. [
  37134. '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
  37135. '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',
  37136. ],
  37137. [
  37138. '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
  37139. 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',
  37140. ],
  37141. [
  37142. '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
  37143. 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',
  37144. ],
  37145. [
  37146. '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
  37147. '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',
  37148. ],
  37149. [
  37150. '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
  37151. '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',
  37152. ],
  37153. [
  37154. '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
  37155. '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',
  37156. ],
  37157. [
  37158. '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
  37159. 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',
  37160. ],
  37161. [
  37162. 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
  37163. 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',
  37164. ],
  37165. [
  37166. '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
  37167. 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',
  37168. ],
  37169. [
  37170. 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
  37171. '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',
  37172. ],
  37173. [
  37174. 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
  37175. '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',
  37176. ],
  37177. [
  37178. 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
  37179. '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',
  37180. ],
  37181. [
  37182. 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
  37183. '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',
  37184. ],
  37185. [
  37186. '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
  37187. 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',
  37188. ],
  37189. [
  37190. '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
  37191. '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',
  37192. ],
  37193. [
  37194. '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
  37195. 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',
  37196. ],
  37197. [
  37198. 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
  37199. 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',
  37200. ],
  37201. [
  37202. 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
  37203. '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',
  37204. ],
  37205. [
  37206. 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
  37207. 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',
  37208. ],
  37209. [
  37210. 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
  37211. '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',
  37212. ],
  37213. [
  37214. '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
  37215. '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',
  37216. ],
  37217. [
  37218. 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
  37219. '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',
  37220. ],
  37221. [
  37222. 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
  37223. '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',
  37224. ],
  37225. [
  37226. '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
  37227. '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',
  37228. ],
  37229. [
  37230. '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
  37231. 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',
  37232. ],
  37233. [
  37234. 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
  37235. '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',
  37236. ],
  37237. [
  37238. 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
  37239. '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',
  37240. ],
  37241. [
  37242. 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
  37243. '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',
  37244. ],
  37245. [
  37246. '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
  37247. '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',
  37248. ],
  37249. [
  37250. 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
  37251. 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',
  37252. ],
  37253. [
  37254. '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
  37255. 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',
  37256. ],
  37257. [
  37258. 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
  37259. 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',
  37260. ],
  37261. [
  37262. 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
  37263. '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',
  37264. ],
  37265. [
  37266. '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
  37267. 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',
  37268. ],
  37269. [
  37270. 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
  37271. '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',
  37272. ],
  37273. [
  37274. 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
  37275. '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',
  37276. ],
  37277. [
  37278. 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
  37279. '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',
  37280. ],
  37281. [
  37282. '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
  37283. 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',
  37284. ],
  37285. [
  37286. '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
  37287. 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',
  37288. ],
  37289. [
  37290. 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
  37291. '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',
  37292. ],
  37293. [
  37294. '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
  37295. 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',
  37296. ],
  37297. [
  37298. '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
  37299. '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',
  37300. ],
  37301. [
  37302. '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
  37303. 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',
  37304. ],
  37305. [
  37306. 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
  37307. 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',
  37308. ],
  37309. [
  37310. '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
  37311. 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',
  37312. ],
  37313. [
  37314. '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
  37315. '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',
  37316. ],
  37317. [
  37318. '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
  37319. 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',
  37320. ],
  37321. [
  37322. '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
  37323. '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',
  37324. ],
  37325. [
  37326. 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
  37327. 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',
  37328. ],
  37329. [
  37330. '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
  37331. '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',
  37332. ],
  37333. [
  37334. 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
  37335. '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',
  37336. ],
  37337. [
  37338. '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
  37339. '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',
  37340. ],
  37341. [
  37342. 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
  37343. 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',
  37344. ],
  37345. [
  37346. 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
  37347. '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',
  37348. ],
  37349. [
  37350. 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
  37351. 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',
  37352. ],
  37353. [
  37354. '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
  37355. 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',
  37356. ],
  37357. [
  37358. '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
  37359. '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',
  37360. ],
  37361. [
  37362. '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
  37363. 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',
  37364. ],
  37365. [
  37366. '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
  37367. '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',
  37368. ],
  37369. [
  37370. '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
  37371. '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',
  37372. ],
  37373. [
  37374. '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
  37375. 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',
  37376. ],
  37377. [
  37378. '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
  37379. '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',
  37380. ],
  37381. [
  37382. '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
  37383. '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',
  37384. ],
  37385. [
  37386. '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
  37387. '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',
  37388. ],
  37389. ],
  37390. },
  37391. };
  37392. /***/ }),
  37393. /***/ 80953:
  37394. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  37395. "use strict";
  37396. var utils = exports;
  37397. var BN = __webpack_require__(73785);
  37398. var minAssert = __webpack_require__(79746);
  37399. var minUtils = __webpack_require__(34504);
  37400. utils.assert = minAssert;
  37401. utils.toArray = minUtils.toArray;
  37402. utils.zero2 = minUtils.zero2;
  37403. utils.toHex = minUtils.toHex;
  37404. utils.encode = minUtils.encode;
  37405. // Represent num in a w-NAF form
  37406. function getNAF(num, w, bits) {
  37407. var naf = new Array(Math.max(num.bitLength(), bits) + 1);
  37408. naf.fill(0);
  37409. var ws = 1 << (w + 1);
  37410. var k = num.clone();
  37411. for (var i = 0; i < naf.length; i++) {
  37412. var z;
  37413. var mod = k.andln(ws - 1);
  37414. if (k.isOdd()) {
  37415. if (mod > (ws >> 1) - 1)
  37416. z = (ws >> 1) - mod;
  37417. else
  37418. z = mod;
  37419. k.isubn(z);
  37420. } else {
  37421. z = 0;
  37422. }
  37423. naf[i] = z;
  37424. k.iushrn(1);
  37425. }
  37426. return naf;
  37427. }
  37428. utils.getNAF = getNAF;
  37429. // Represent k1, k2 in a Joint Sparse Form
  37430. function getJSF(k1, k2) {
  37431. var jsf = [
  37432. [],
  37433. [],
  37434. ];
  37435. k1 = k1.clone();
  37436. k2 = k2.clone();
  37437. var d1 = 0;
  37438. var d2 = 0;
  37439. var m8;
  37440. while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
  37441. // First phase
  37442. var m14 = (k1.andln(3) + d1) & 3;
  37443. var m24 = (k2.andln(3) + d2) & 3;
  37444. if (m14 === 3)
  37445. m14 = -1;
  37446. if (m24 === 3)
  37447. m24 = -1;
  37448. var u1;
  37449. if ((m14 & 1) === 0) {
  37450. u1 = 0;
  37451. } else {
  37452. m8 = (k1.andln(7) + d1) & 7;
  37453. if ((m8 === 3 || m8 === 5) && m24 === 2)
  37454. u1 = -m14;
  37455. else
  37456. u1 = m14;
  37457. }
  37458. jsf[0].push(u1);
  37459. var u2;
  37460. if ((m24 & 1) === 0) {
  37461. u2 = 0;
  37462. } else {
  37463. m8 = (k2.andln(7) + d2) & 7;
  37464. if ((m8 === 3 || m8 === 5) && m14 === 2)
  37465. u2 = -m24;
  37466. else
  37467. u2 = m24;
  37468. }
  37469. jsf[1].push(u2);
  37470. // Second phase
  37471. if (2 * d1 === u1 + 1)
  37472. d1 = 1 - d1;
  37473. if (2 * d2 === u2 + 1)
  37474. d2 = 1 - d2;
  37475. k1.iushrn(1);
  37476. k2.iushrn(1);
  37477. }
  37478. return jsf;
  37479. }
  37480. utils.getJSF = getJSF;
  37481. function cachedProperty(obj, name, computer) {
  37482. var key = '_' + name;
  37483. obj.prototype[name] = function cachedProperty() {
  37484. return this[key] !== undefined ? this[key] :
  37485. this[key] = computer.call(this);
  37486. };
  37487. }
  37488. utils.cachedProperty = cachedProperty;
  37489. function parseBytes(bytes) {
  37490. return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
  37491. bytes;
  37492. }
  37493. utils.parseBytes = parseBytes;
  37494. function intFromLE(bytes) {
  37495. return new BN(bytes, 'hex', 'le');
  37496. }
  37497. utils.intFromLE = intFromLE;
  37498. /***/ }),
  37499. /***/ 73785:
  37500. /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
  37501. /* module decorator */ module = __webpack_require__.nmd(module);
  37502. (function (module, exports) {
  37503. 'use strict';
  37504. // Utils
  37505. function assert (val, msg) {
  37506. if (!val) throw new Error(msg || 'Assertion failed');
  37507. }
  37508. // Could use `inherits` module, but don't want to move from single file
  37509. // architecture yet.
  37510. function inherits (ctor, superCtor) {
  37511. ctor.super_ = superCtor;
  37512. var TempCtor = function () {};
  37513. TempCtor.prototype = superCtor.prototype;
  37514. ctor.prototype = new TempCtor();
  37515. ctor.prototype.constructor = ctor;
  37516. }
  37517. // BN
  37518. function BN (number, base, endian) {
  37519. if (BN.isBN(number)) {
  37520. return number;
  37521. }
  37522. this.negative = 0;
  37523. this.words = null;
  37524. this.length = 0;
  37525. // Reduction context
  37526. this.red = null;
  37527. if (number !== null) {
  37528. if (base === 'le' || base === 'be') {
  37529. endian = base;
  37530. base = 10;
  37531. }
  37532. this._init(number || 0, base || 10, endian || 'be');
  37533. }
  37534. }
  37535. if (typeof module === 'object') {
  37536. module.exports = BN;
  37537. } else {
  37538. exports.BN = BN;
  37539. }
  37540. BN.BN = BN;
  37541. BN.wordSize = 26;
  37542. var Buffer;
  37543. try {
  37544. if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {
  37545. Buffer = window.Buffer;
  37546. } else {
  37547. Buffer = (__webpack_require__(85568).Buffer);
  37548. }
  37549. } catch (e) {
  37550. }
  37551. BN.isBN = function isBN (num) {
  37552. if (num instanceof BN) {
  37553. return true;
  37554. }
  37555. return num !== null && typeof num === 'object' &&
  37556. num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
  37557. };
  37558. BN.max = function max (left, right) {
  37559. if (left.cmp(right) > 0) return left;
  37560. return right;
  37561. };
  37562. BN.min = function min (left, right) {
  37563. if (left.cmp(right) < 0) return left;
  37564. return right;
  37565. };
  37566. BN.prototype._init = function init (number, base, endian) {
  37567. if (typeof number === 'number') {
  37568. return this._initNumber(number, base, endian);
  37569. }
  37570. if (typeof number === 'object') {
  37571. return this._initArray(number, base, endian);
  37572. }
  37573. if (base === 'hex') {
  37574. base = 16;
  37575. }
  37576. assert(base === (base | 0) && base >= 2 && base <= 36);
  37577. number = number.toString().replace(/\s+/g, '');
  37578. var start = 0;
  37579. if (number[0] === '-') {
  37580. start++;
  37581. this.negative = 1;
  37582. }
  37583. if (start < number.length) {
  37584. if (base === 16) {
  37585. this._parseHex(number, start, endian);
  37586. } else {
  37587. this._parseBase(number, base, start);
  37588. if (endian === 'le') {
  37589. this._initArray(this.toArray(), base, endian);
  37590. }
  37591. }
  37592. }
  37593. };
  37594. BN.prototype._initNumber = function _initNumber (number, base, endian) {
  37595. if (number < 0) {
  37596. this.negative = 1;
  37597. number = -number;
  37598. }
  37599. if (number < 0x4000000) {
  37600. this.words = [ number & 0x3ffffff ];
  37601. this.length = 1;
  37602. } else if (number < 0x10000000000000) {
  37603. this.words = [
  37604. number & 0x3ffffff,
  37605. (number / 0x4000000) & 0x3ffffff
  37606. ];
  37607. this.length = 2;
  37608. } else {
  37609. assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
  37610. this.words = [
  37611. number & 0x3ffffff,
  37612. (number / 0x4000000) & 0x3ffffff,
  37613. 1
  37614. ];
  37615. this.length = 3;
  37616. }
  37617. if (endian !== 'le') return;
  37618. // Reverse the bytes
  37619. this._initArray(this.toArray(), base, endian);
  37620. };
  37621. BN.prototype._initArray = function _initArray (number, base, endian) {
  37622. // Perhaps a Uint8Array
  37623. assert(typeof number.length === 'number');
  37624. if (number.length <= 0) {
  37625. this.words = [ 0 ];
  37626. this.length = 1;
  37627. return this;
  37628. }
  37629. this.length = Math.ceil(number.length / 3);
  37630. this.words = new Array(this.length);
  37631. for (var i = 0; i < this.length; i++) {
  37632. this.words[i] = 0;
  37633. }
  37634. var j, w;
  37635. var off = 0;
  37636. if (endian === 'be') {
  37637. for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
  37638. w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
  37639. this.words[j] |= (w << off) & 0x3ffffff;
  37640. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  37641. off += 24;
  37642. if (off >= 26) {
  37643. off -= 26;
  37644. j++;
  37645. }
  37646. }
  37647. } else if (endian === 'le') {
  37648. for (i = 0, j = 0; i < number.length; i += 3) {
  37649. w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
  37650. this.words[j] |= (w << off) & 0x3ffffff;
  37651. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  37652. off += 24;
  37653. if (off >= 26) {
  37654. off -= 26;
  37655. j++;
  37656. }
  37657. }
  37658. }
  37659. return this.strip();
  37660. };
  37661. function parseHex4Bits (string, index) {
  37662. var c = string.charCodeAt(index);
  37663. // 'A' - 'F'
  37664. if (c >= 65 && c <= 70) {
  37665. return c - 55;
  37666. // 'a' - 'f'
  37667. } else if (c >= 97 && c <= 102) {
  37668. return c - 87;
  37669. // '0' - '9'
  37670. } else {
  37671. return (c - 48) & 0xf;
  37672. }
  37673. }
  37674. function parseHexByte (string, lowerBound, index) {
  37675. var r = parseHex4Bits(string, index);
  37676. if (index - 1 >= lowerBound) {
  37677. r |= parseHex4Bits(string, index - 1) << 4;
  37678. }
  37679. return r;
  37680. }
  37681. BN.prototype._parseHex = function _parseHex (number, start, endian) {
  37682. // Create possibly bigger array to ensure that it fits the number
  37683. this.length = Math.ceil((number.length - start) / 6);
  37684. this.words = new Array(this.length);
  37685. for (var i = 0; i < this.length; i++) {
  37686. this.words[i] = 0;
  37687. }
  37688. // 24-bits chunks
  37689. var off = 0;
  37690. var j = 0;
  37691. var w;
  37692. if (endian === 'be') {
  37693. for (i = number.length - 1; i >= start; i -= 2) {
  37694. w = parseHexByte(number, start, i) << off;
  37695. this.words[j] |= w & 0x3ffffff;
  37696. if (off >= 18) {
  37697. off -= 18;
  37698. j += 1;
  37699. this.words[j] |= w >>> 26;
  37700. } else {
  37701. off += 8;
  37702. }
  37703. }
  37704. } else {
  37705. var parseLength = number.length - start;
  37706. for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {
  37707. w = parseHexByte(number, start, i) << off;
  37708. this.words[j] |= w & 0x3ffffff;
  37709. if (off >= 18) {
  37710. off -= 18;
  37711. j += 1;
  37712. this.words[j] |= w >>> 26;
  37713. } else {
  37714. off += 8;
  37715. }
  37716. }
  37717. }
  37718. this.strip();
  37719. };
  37720. function parseBase (str, start, end, mul) {
  37721. var r = 0;
  37722. var len = Math.min(str.length, end);
  37723. for (var i = start; i < len; i++) {
  37724. var c = str.charCodeAt(i) - 48;
  37725. r *= mul;
  37726. // 'a'
  37727. if (c >= 49) {
  37728. r += c - 49 + 0xa;
  37729. // 'A'
  37730. } else if (c >= 17) {
  37731. r += c - 17 + 0xa;
  37732. // '0' - '9'
  37733. } else {
  37734. r += c;
  37735. }
  37736. }
  37737. return r;
  37738. }
  37739. BN.prototype._parseBase = function _parseBase (number, base, start) {
  37740. // Initialize as zero
  37741. this.words = [ 0 ];
  37742. this.length = 1;
  37743. // Find length of limb in base
  37744. for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
  37745. limbLen++;
  37746. }
  37747. limbLen--;
  37748. limbPow = (limbPow / base) | 0;
  37749. var total = number.length - start;
  37750. var mod = total % limbLen;
  37751. var end = Math.min(total, total - mod) + start;
  37752. var word = 0;
  37753. for (var i = start; i < end; i += limbLen) {
  37754. word = parseBase(number, i, i + limbLen, base);
  37755. this.imuln(limbPow);
  37756. if (this.words[0] + word < 0x4000000) {
  37757. this.words[0] += word;
  37758. } else {
  37759. this._iaddn(word);
  37760. }
  37761. }
  37762. if (mod !== 0) {
  37763. var pow = 1;
  37764. word = parseBase(number, i, number.length, base);
  37765. for (i = 0; i < mod; i++) {
  37766. pow *= base;
  37767. }
  37768. this.imuln(pow);
  37769. if (this.words[0] + word < 0x4000000) {
  37770. this.words[0] += word;
  37771. } else {
  37772. this._iaddn(word);
  37773. }
  37774. }
  37775. this.strip();
  37776. };
  37777. BN.prototype.copy = function copy (dest) {
  37778. dest.words = new Array(this.length);
  37779. for (var i = 0; i < this.length; i++) {
  37780. dest.words[i] = this.words[i];
  37781. }
  37782. dest.length = this.length;
  37783. dest.negative = this.negative;
  37784. dest.red = this.red;
  37785. };
  37786. BN.prototype.clone = function clone () {
  37787. var r = new BN(null);
  37788. this.copy(r);
  37789. return r;
  37790. };
  37791. BN.prototype._expand = function _expand (size) {
  37792. while (this.length < size) {
  37793. this.words[this.length++] = 0;
  37794. }
  37795. return this;
  37796. };
  37797. // Remove leading `0` from `this`
  37798. BN.prototype.strip = function strip () {
  37799. while (this.length > 1 && this.words[this.length - 1] === 0) {
  37800. this.length--;
  37801. }
  37802. return this._normSign();
  37803. };
  37804. BN.prototype._normSign = function _normSign () {
  37805. // -0 = 0
  37806. if (this.length === 1 && this.words[0] === 0) {
  37807. this.negative = 0;
  37808. }
  37809. return this;
  37810. };
  37811. BN.prototype.inspect = function inspect () {
  37812. return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  37813. };
  37814. /*
  37815. var zeros = [];
  37816. var groupSizes = [];
  37817. var groupBases = [];
  37818. var s = '';
  37819. var i = -1;
  37820. while (++i < BN.wordSize) {
  37821. zeros[i] = s;
  37822. s += '0';
  37823. }
  37824. groupSizes[0] = 0;
  37825. groupSizes[1] = 0;
  37826. groupBases[0] = 0;
  37827. groupBases[1] = 0;
  37828. var base = 2 - 1;
  37829. while (++base < 36 + 1) {
  37830. var groupSize = 0;
  37831. var groupBase = 1;
  37832. while (groupBase < (1 << BN.wordSize) / base) {
  37833. groupBase *= base;
  37834. groupSize += 1;
  37835. }
  37836. groupSizes[base] = groupSize;
  37837. groupBases[base] = groupBase;
  37838. }
  37839. */
  37840. var zeros = [
  37841. '',
  37842. '0',
  37843. '00',
  37844. '000',
  37845. '0000',
  37846. '00000',
  37847. '000000',
  37848. '0000000',
  37849. '00000000',
  37850. '000000000',
  37851. '0000000000',
  37852. '00000000000',
  37853. '000000000000',
  37854. '0000000000000',
  37855. '00000000000000',
  37856. '000000000000000',
  37857. '0000000000000000',
  37858. '00000000000000000',
  37859. '000000000000000000',
  37860. '0000000000000000000',
  37861. '00000000000000000000',
  37862. '000000000000000000000',
  37863. '0000000000000000000000',
  37864. '00000000000000000000000',
  37865. '000000000000000000000000',
  37866. '0000000000000000000000000'
  37867. ];
  37868. var groupSizes = [
  37869. 0, 0,
  37870. 25, 16, 12, 11, 10, 9, 8,
  37871. 8, 7, 7, 7, 7, 6, 6,
  37872. 6, 6, 6, 6, 6, 5, 5,
  37873. 5, 5, 5, 5, 5, 5, 5,
  37874. 5, 5, 5, 5, 5, 5, 5
  37875. ];
  37876. var groupBases = [
  37877. 0, 0,
  37878. 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
  37879. 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
  37880. 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
  37881. 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
  37882. 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
  37883. ];
  37884. BN.prototype.toString = function toString (base, padding) {
  37885. base = base || 10;
  37886. padding = padding | 0 || 1;
  37887. var out;
  37888. if (base === 16 || base === 'hex') {
  37889. out = '';
  37890. var off = 0;
  37891. var carry = 0;
  37892. for (var i = 0; i < this.length; i++) {
  37893. var w = this.words[i];
  37894. var word = (((w << off) | carry) & 0xffffff).toString(16);
  37895. carry = (w >>> (24 - off)) & 0xffffff;
  37896. if (carry !== 0 || i !== this.length - 1) {
  37897. out = zeros[6 - word.length] + word + out;
  37898. } else {
  37899. out = word + out;
  37900. }
  37901. off += 2;
  37902. if (off >= 26) {
  37903. off -= 26;
  37904. i--;
  37905. }
  37906. }
  37907. if (carry !== 0) {
  37908. out = carry.toString(16) + out;
  37909. }
  37910. while (out.length % padding !== 0) {
  37911. out = '0' + out;
  37912. }
  37913. if (this.negative !== 0) {
  37914. out = '-' + out;
  37915. }
  37916. return out;
  37917. }
  37918. if (base === (base | 0) && base >= 2 && base <= 36) {
  37919. // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
  37920. var groupSize = groupSizes[base];
  37921. // var groupBase = Math.pow(base, groupSize);
  37922. var groupBase = groupBases[base];
  37923. out = '';
  37924. var c = this.clone();
  37925. c.negative = 0;
  37926. while (!c.isZero()) {
  37927. var r = c.modn(groupBase).toString(base);
  37928. c = c.idivn(groupBase);
  37929. if (!c.isZero()) {
  37930. out = zeros[groupSize - r.length] + r + out;
  37931. } else {
  37932. out = r + out;
  37933. }
  37934. }
  37935. if (this.isZero()) {
  37936. out = '0' + out;
  37937. }
  37938. while (out.length % padding !== 0) {
  37939. out = '0' + out;
  37940. }
  37941. if (this.negative !== 0) {
  37942. out = '-' + out;
  37943. }
  37944. return out;
  37945. }
  37946. assert(false, 'Base should be between 2 and 36');
  37947. };
  37948. BN.prototype.toNumber = function toNumber () {
  37949. var ret = this.words[0];
  37950. if (this.length === 2) {
  37951. ret += this.words[1] * 0x4000000;
  37952. } else if (this.length === 3 && this.words[2] === 0x01) {
  37953. // NOTE: at this stage it is known that the top bit is set
  37954. ret += 0x10000000000000 + (this.words[1] * 0x4000000);
  37955. } else if (this.length > 2) {
  37956. assert(false, 'Number can only safely store up to 53 bits');
  37957. }
  37958. return (this.negative !== 0) ? -ret : ret;
  37959. };
  37960. BN.prototype.toJSON = function toJSON () {
  37961. return this.toString(16);
  37962. };
  37963. BN.prototype.toBuffer = function toBuffer (endian, length) {
  37964. assert(typeof Buffer !== 'undefined');
  37965. return this.toArrayLike(Buffer, endian, length);
  37966. };
  37967. BN.prototype.toArray = function toArray (endian, length) {
  37968. return this.toArrayLike(Array, endian, length);
  37969. };
  37970. BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
  37971. var byteLength = this.byteLength();
  37972. var reqLength = length || Math.max(1, byteLength);
  37973. assert(byteLength <= reqLength, 'byte array longer than desired length');
  37974. assert(reqLength > 0, 'Requested array length <= 0');
  37975. this.strip();
  37976. var littleEndian = endian === 'le';
  37977. var res = new ArrayType(reqLength);
  37978. var b, i;
  37979. var q = this.clone();
  37980. if (!littleEndian) {
  37981. // Assume big-endian
  37982. for (i = 0; i < reqLength - byteLength; i++) {
  37983. res[i] = 0;
  37984. }
  37985. for (i = 0; !q.isZero(); i++) {
  37986. b = q.andln(0xff);
  37987. q.iushrn(8);
  37988. res[reqLength - i - 1] = b;
  37989. }
  37990. } else {
  37991. for (i = 0; !q.isZero(); i++) {
  37992. b = q.andln(0xff);
  37993. q.iushrn(8);
  37994. res[i] = b;
  37995. }
  37996. for (; i < reqLength; i++) {
  37997. res[i] = 0;
  37998. }
  37999. }
  38000. return res;
  38001. };
  38002. if (Math.clz32) {
  38003. BN.prototype._countBits = function _countBits (w) {
  38004. return 32 - Math.clz32(w);
  38005. };
  38006. } else {
  38007. BN.prototype._countBits = function _countBits (w) {
  38008. var t = w;
  38009. var r = 0;
  38010. if (t >= 0x1000) {
  38011. r += 13;
  38012. t >>>= 13;
  38013. }
  38014. if (t >= 0x40) {
  38015. r += 7;
  38016. t >>>= 7;
  38017. }
  38018. if (t >= 0x8) {
  38019. r += 4;
  38020. t >>>= 4;
  38021. }
  38022. if (t >= 0x02) {
  38023. r += 2;
  38024. t >>>= 2;
  38025. }
  38026. return r + t;
  38027. };
  38028. }
  38029. BN.prototype._zeroBits = function _zeroBits (w) {
  38030. // Short-cut
  38031. if (w === 0) return 26;
  38032. var t = w;
  38033. var r = 0;
  38034. if ((t & 0x1fff) === 0) {
  38035. r += 13;
  38036. t >>>= 13;
  38037. }
  38038. if ((t & 0x7f) === 0) {
  38039. r += 7;
  38040. t >>>= 7;
  38041. }
  38042. if ((t & 0xf) === 0) {
  38043. r += 4;
  38044. t >>>= 4;
  38045. }
  38046. if ((t & 0x3) === 0) {
  38047. r += 2;
  38048. t >>>= 2;
  38049. }
  38050. if ((t & 0x1) === 0) {
  38051. r++;
  38052. }
  38053. return r;
  38054. };
  38055. // Return number of used bits in a BN
  38056. BN.prototype.bitLength = function bitLength () {
  38057. var w = this.words[this.length - 1];
  38058. var hi = this._countBits(w);
  38059. return (this.length - 1) * 26 + hi;
  38060. };
  38061. function toBitArray (num) {
  38062. var w = new Array(num.bitLength());
  38063. for (var bit = 0; bit < w.length; bit++) {
  38064. var off = (bit / 26) | 0;
  38065. var wbit = bit % 26;
  38066. w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
  38067. }
  38068. return w;
  38069. }
  38070. // Number of trailing zero bits
  38071. BN.prototype.zeroBits = function zeroBits () {
  38072. if (this.isZero()) return 0;
  38073. var r = 0;
  38074. for (var i = 0; i < this.length; i++) {
  38075. var b = this._zeroBits(this.words[i]);
  38076. r += b;
  38077. if (b !== 26) break;
  38078. }
  38079. return r;
  38080. };
  38081. BN.prototype.byteLength = function byteLength () {
  38082. return Math.ceil(this.bitLength() / 8);
  38083. };
  38084. BN.prototype.toTwos = function toTwos (width) {
  38085. if (this.negative !== 0) {
  38086. return this.abs().inotn(width).iaddn(1);
  38087. }
  38088. return this.clone();
  38089. };
  38090. BN.prototype.fromTwos = function fromTwos (width) {
  38091. if (this.testn(width - 1)) {
  38092. return this.notn(width).iaddn(1).ineg();
  38093. }
  38094. return this.clone();
  38095. };
  38096. BN.prototype.isNeg = function isNeg () {
  38097. return this.negative !== 0;
  38098. };
  38099. // Return negative clone of `this`
  38100. BN.prototype.neg = function neg () {
  38101. return this.clone().ineg();
  38102. };
  38103. BN.prototype.ineg = function ineg () {
  38104. if (!this.isZero()) {
  38105. this.negative ^= 1;
  38106. }
  38107. return this;
  38108. };
  38109. // Or `num` with `this` in-place
  38110. BN.prototype.iuor = function iuor (num) {
  38111. while (this.length < num.length) {
  38112. this.words[this.length++] = 0;
  38113. }
  38114. for (var i = 0; i < num.length; i++) {
  38115. this.words[i] = this.words[i] | num.words[i];
  38116. }
  38117. return this.strip();
  38118. };
  38119. BN.prototype.ior = function ior (num) {
  38120. assert((this.negative | num.negative) === 0);
  38121. return this.iuor(num);
  38122. };
  38123. // Or `num` with `this`
  38124. BN.prototype.or = function or (num) {
  38125. if (this.length > num.length) return this.clone().ior(num);
  38126. return num.clone().ior(this);
  38127. };
  38128. BN.prototype.uor = function uor (num) {
  38129. if (this.length > num.length) return this.clone().iuor(num);
  38130. return num.clone().iuor(this);
  38131. };
  38132. // And `num` with `this` in-place
  38133. BN.prototype.iuand = function iuand (num) {
  38134. // b = min-length(num, this)
  38135. var b;
  38136. if (this.length > num.length) {
  38137. b = num;
  38138. } else {
  38139. b = this;
  38140. }
  38141. for (var i = 0; i < b.length; i++) {
  38142. this.words[i] = this.words[i] & num.words[i];
  38143. }
  38144. this.length = b.length;
  38145. return this.strip();
  38146. };
  38147. BN.prototype.iand = function iand (num) {
  38148. assert((this.negative | num.negative) === 0);
  38149. return this.iuand(num);
  38150. };
  38151. // And `num` with `this`
  38152. BN.prototype.and = function and (num) {
  38153. if (this.length > num.length) return this.clone().iand(num);
  38154. return num.clone().iand(this);
  38155. };
  38156. BN.prototype.uand = function uand (num) {
  38157. if (this.length > num.length) return this.clone().iuand(num);
  38158. return num.clone().iuand(this);
  38159. };
  38160. // Xor `num` with `this` in-place
  38161. BN.prototype.iuxor = function iuxor (num) {
  38162. // a.length > b.length
  38163. var a;
  38164. var b;
  38165. if (this.length > num.length) {
  38166. a = this;
  38167. b = num;
  38168. } else {
  38169. a = num;
  38170. b = this;
  38171. }
  38172. for (var i = 0; i < b.length; i++) {
  38173. this.words[i] = a.words[i] ^ b.words[i];
  38174. }
  38175. if (this !== a) {
  38176. for (; i < a.length; i++) {
  38177. this.words[i] = a.words[i];
  38178. }
  38179. }
  38180. this.length = a.length;
  38181. return this.strip();
  38182. };
  38183. BN.prototype.ixor = function ixor (num) {
  38184. assert((this.negative | num.negative) === 0);
  38185. return this.iuxor(num);
  38186. };
  38187. // Xor `num` with `this`
  38188. BN.prototype.xor = function xor (num) {
  38189. if (this.length > num.length) return this.clone().ixor(num);
  38190. return num.clone().ixor(this);
  38191. };
  38192. BN.prototype.uxor = function uxor (num) {
  38193. if (this.length > num.length) return this.clone().iuxor(num);
  38194. return num.clone().iuxor(this);
  38195. };
  38196. // Not ``this`` with ``width`` bitwidth
  38197. BN.prototype.inotn = function inotn (width) {
  38198. assert(typeof width === 'number' && width >= 0);
  38199. var bytesNeeded = Math.ceil(width / 26) | 0;
  38200. var bitsLeft = width % 26;
  38201. // Extend the buffer with leading zeroes
  38202. this._expand(bytesNeeded);
  38203. if (bitsLeft > 0) {
  38204. bytesNeeded--;
  38205. }
  38206. // Handle complete words
  38207. for (var i = 0; i < bytesNeeded; i++) {
  38208. this.words[i] = ~this.words[i] & 0x3ffffff;
  38209. }
  38210. // Handle the residue
  38211. if (bitsLeft > 0) {
  38212. this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
  38213. }
  38214. // And remove leading zeroes
  38215. return this.strip();
  38216. };
  38217. BN.prototype.notn = function notn (width) {
  38218. return this.clone().inotn(width);
  38219. };
  38220. // Set `bit` of `this`
  38221. BN.prototype.setn = function setn (bit, val) {
  38222. assert(typeof bit === 'number' && bit >= 0);
  38223. var off = (bit / 26) | 0;
  38224. var wbit = bit % 26;
  38225. this._expand(off + 1);
  38226. if (val) {
  38227. this.words[off] = this.words[off] | (1 << wbit);
  38228. } else {
  38229. this.words[off] = this.words[off] & ~(1 << wbit);
  38230. }
  38231. return this.strip();
  38232. };
  38233. // Add `num` to `this` in-place
  38234. BN.prototype.iadd = function iadd (num) {
  38235. var r;
  38236. // negative + positive
  38237. if (this.negative !== 0 && num.negative === 0) {
  38238. this.negative = 0;
  38239. r = this.isub(num);
  38240. this.negative ^= 1;
  38241. return this._normSign();
  38242. // positive + negative
  38243. } else if (this.negative === 0 && num.negative !== 0) {
  38244. num.negative = 0;
  38245. r = this.isub(num);
  38246. num.negative = 1;
  38247. return r._normSign();
  38248. }
  38249. // a.length > b.length
  38250. var a, b;
  38251. if (this.length > num.length) {
  38252. a = this;
  38253. b = num;
  38254. } else {
  38255. a = num;
  38256. b = this;
  38257. }
  38258. var carry = 0;
  38259. for (var i = 0; i < b.length; i++) {
  38260. r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
  38261. this.words[i] = r & 0x3ffffff;
  38262. carry = r >>> 26;
  38263. }
  38264. for (; carry !== 0 && i < a.length; i++) {
  38265. r = (a.words[i] | 0) + carry;
  38266. this.words[i] = r & 0x3ffffff;
  38267. carry = r >>> 26;
  38268. }
  38269. this.length = a.length;
  38270. if (carry !== 0) {
  38271. this.words[this.length] = carry;
  38272. this.length++;
  38273. // Copy the rest of the words
  38274. } else if (a !== this) {
  38275. for (; i < a.length; i++) {
  38276. this.words[i] = a.words[i];
  38277. }
  38278. }
  38279. return this;
  38280. };
  38281. // Add `num` to `this`
  38282. BN.prototype.add = function add (num) {
  38283. var res;
  38284. if (num.negative !== 0 && this.negative === 0) {
  38285. num.negative = 0;
  38286. res = this.sub(num);
  38287. num.negative ^= 1;
  38288. return res;
  38289. } else if (num.negative === 0 && this.negative !== 0) {
  38290. this.negative = 0;
  38291. res = num.sub(this);
  38292. this.negative = 1;
  38293. return res;
  38294. }
  38295. if (this.length > num.length) return this.clone().iadd(num);
  38296. return num.clone().iadd(this);
  38297. };
  38298. // Subtract `num` from `this` in-place
  38299. BN.prototype.isub = function isub (num) {
  38300. // this - (-num) = this + num
  38301. if (num.negative !== 0) {
  38302. num.negative = 0;
  38303. var r = this.iadd(num);
  38304. num.negative = 1;
  38305. return r._normSign();
  38306. // -this - num = -(this + num)
  38307. } else if (this.negative !== 0) {
  38308. this.negative = 0;
  38309. this.iadd(num);
  38310. this.negative = 1;
  38311. return this._normSign();
  38312. }
  38313. // At this point both numbers are positive
  38314. var cmp = this.cmp(num);
  38315. // Optimization - zeroify
  38316. if (cmp === 0) {
  38317. this.negative = 0;
  38318. this.length = 1;
  38319. this.words[0] = 0;
  38320. return this;
  38321. }
  38322. // a > b
  38323. var a, b;
  38324. if (cmp > 0) {
  38325. a = this;
  38326. b = num;
  38327. } else {
  38328. a = num;
  38329. b = this;
  38330. }
  38331. var carry = 0;
  38332. for (var i = 0; i < b.length; i++) {
  38333. r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
  38334. carry = r >> 26;
  38335. this.words[i] = r & 0x3ffffff;
  38336. }
  38337. for (; carry !== 0 && i < a.length; i++) {
  38338. r = (a.words[i] | 0) + carry;
  38339. carry = r >> 26;
  38340. this.words[i] = r & 0x3ffffff;
  38341. }
  38342. // Copy rest of the words
  38343. if (carry === 0 && i < a.length && a !== this) {
  38344. for (; i < a.length; i++) {
  38345. this.words[i] = a.words[i];
  38346. }
  38347. }
  38348. this.length = Math.max(this.length, i);
  38349. if (a !== this) {
  38350. this.negative = 1;
  38351. }
  38352. return this.strip();
  38353. };
  38354. // Subtract `num` from `this`
  38355. BN.prototype.sub = function sub (num) {
  38356. return this.clone().isub(num);
  38357. };
  38358. function smallMulTo (self, num, out) {
  38359. out.negative = num.negative ^ self.negative;
  38360. var len = (self.length + num.length) | 0;
  38361. out.length = len;
  38362. len = (len - 1) | 0;
  38363. // Peel one iteration (compiler can't do it, because of code complexity)
  38364. var a = self.words[0] | 0;
  38365. var b = num.words[0] | 0;
  38366. var r = a * b;
  38367. var lo = r & 0x3ffffff;
  38368. var carry = (r / 0x4000000) | 0;
  38369. out.words[0] = lo;
  38370. for (var k = 1; k < len; k++) {
  38371. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  38372. // note that ncarry could be >= 0x3ffffff
  38373. var ncarry = carry >>> 26;
  38374. var rword = carry & 0x3ffffff;
  38375. var maxJ = Math.min(k, num.length - 1);
  38376. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  38377. var i = (k - j) | 0;
  38378. a = self.words[i] | 0;
  38379. b = num.words[j] | 0;
  38380. r = a * b + rword;
  38381. ncarry += (r / 0x4000000) | 0;
  38382. rword = r & 0x3ffffff;
  38383. }
  38384. out.words[k] = rword | 0;
  38385. carry = ncarry | 0;
  38386. }
  38387. if (carry !== 0) {
  38388. out.words[k] = carry | 0;
  38389. } else {
  38390. out.length--;
  38391. }
  38392. return out.strip();
  38393. }
  38394. // TODO(indutny): it may be reasonable to omit it for users who don't need
  38395. // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
  38396. // multiplication (like elliptic secp256k1).
  38397. var comb10MulTo = function comb10MulTo (self, num, out) {
  38398. var a = self.words;
  38399. var b = num.words;
  38400. var o = out.words;
  38401. var c = 0;
  38402. var lo;
  38403. var mid;
  38404. var hi;
  38405. var a0 = a[0] | 0;
  38406. var al0 = a0 & 0x1fff;
  38407. var ah0 = a0 >>> 13;
  38408. var a1 = a[1] | 0;
  38409. var al1 = a1 & 0x1fff;
  38410. var ah1 = a1 >>> 13;
  38411. var a2 = a[2] | 0;
  38412. var al2 = a2 & 0x1fff;
  38413. var ah2 = a2 >>> 13;
  38414. var a3 = a[3] | 0;
  38415. var al3 = a3 & 0x1fff;
  38416. var ah3 = a3 >>> 13;
  38417. var a4 = a[4] | 0;
  38418. var al4 = a4 & 0x1fff;
  38419. var ah4 = a4 >>> 13;
  38420. var a5 = a[5] | 0;
  38421. var al5 = a5 & 0x1fff;
  38422. var ah5 = a5 >>> 13;
  38423. var a6 = a[6] | 0;
  38424. var al6 = a6 & 0x1fff;
  38425. var ah6 = a6 >>> 13;
  38426. var a7 = a[7] | 0;
  38427. var al7 = a7 & 0x1fff;
  38428. var ah7 = a7 >>> 13;
  38429. var a8 = a[8] | 0;
  38430. var al8 = a8 & 0x1fff;
  38431. var ah8 = a8 >>> 13;
  38432. var a9 = a[9] | 0;
  38433. var al9 = a9 & 0x1fff;
  38434. var ah9 = a9 >>> 13;
  38435. var b0 = b[0] | 0;
  38436. var bl0 = b0 & 0x1fff;
  38437. var bh0 = b0 >>> 13;
  38438. var b1 = b[1] | 0;
  38439. var bl1 = b1 & 0x1fff;
  38440. var bh1 = b1 >>> 13;
  38441. var b2 = b[2] | 0;
  38442. var bl2 = b2 & 0x1fff;
  38443. var bh2 = b2 >>> 13;
  38444. var b3 = b[3] | 0;
  38445. var bl3 = b3 & 0x1fff;
  38446. var bh3 = b3 >>> 13;
  38447. var b4 = b[4] | 0;
  38448. var bl4 = b4 & 0x1fff;
  38449. var bh4 = b4 >>> 13;
  38450. var b5 = b[5] | 0;
  38451. var bl5 = b5 & 0x1fff;
  38452. var bh5 = b5 >>> 13;
  38453. var b6 = b[6] | 0;
  38454. var bl6 = b6 & 0x1fff;
  38455. var bh6 = b6 >>> 13;
  38456. var b7 = b[7] | 0;
  38457. var bl7 = b7 & 0x1fff;
  38458. var bh7 = b7 >>> 13;
  38459. var b8 = b[8] | 0;
  38460. var bl8 = b8 & 0x1fff;
  38461. var bh8 = b8 >>> 13;
  38462. var b9 = b[9] | 0;
  38463. var bl9 = b9 & 0x1fff;
  38464. var bh9 = b9 >>> 13;
  38465. out.negative = self.negative ^ num.negative;
  38466. out.length = 19;
  38467. /* k = 0 */
  38468. lo = Math.imul(al0, bl0);
  38469. mid = Math.imul(al0, bh0);
  38470. mid = (mid + Math.imul(ah0, bl0)) | 0;
  38471. hi = Math.imul(ah0, bh0);
  38472. var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38473. c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
  38474. w0 &= 0x3ffffff;
  38475. /* k = 1 */
  38476. lo = Math.imul(al1, bl0);
  38477. mid = Math.imul(al1, bh0);
  38478. mid = (mid + Math.imul(ah1, bl0)) | 0;
  38479. hi = Math.imul(ah1, bh0);
  38480. lo = (lo + Math.imul(al0, bl1)) | 0;
  38481. mid = (mid + Math.imul(al0, bh1)) | 0;
  38482. mid = (mid + Math.imul(ah0, bl1)) | 0;
  38483. hi = (hi + Math.imul(ah0, bh1)) | 0;
  38484. var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38485. c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
  38486. w1 &= 0x3ffffff;
  38487. /* k = 2 */
  38488. lo = Math.imul(al2, bl0);
  38489. mid = Math.imul(al2, bh0);
  38490. mid = (mid + Math.imul(ah2, bl0)) | 0;
  38491. hi = Math.imul(ah2, bh0);
  38492. lo = (lo + Math.imul(al1, bl1)) | 0;
  38493. mid = (mid + Math.imul(al1, bh1)) | 0;
  38494. mid = (mid + Math.imul(ah1, bl1)) | 0;
  38495. hi = (hi + Math.imul(ah1, bh1)) | 0;
  38496. lo = (lo + Math.imul(al0, bl2)) | 0;
  38497. mid = (mid + Math.imul(al0, bh2)) | 0;
  38498. mid = (mid + Math.imul(ah0, bl2)) | 0;
  38499. hi = (hi + Math.imul(ah0, bh2)) | 0;
  38500. var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38501. c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
  38502. w2 &= 0x3ffffff;
  38503. /* k = 3 */
  38504. lo = Math.imul(al3, bl0);
  38505. mid = Math.imul(al3, bh0);
  38506. mid = (mid + Math.imul(ah3, bl0)) | 0;
  38507. hi = Math.imul(ah3, bh0);
  38508. lo = (lo + Math.imul(al2, bl1)) | 0;
  38509. mid = (mid + Math.imul(al2, bh1)) | 0;
  38510. mid = (mid + Math.imul(ah2, bl1)) | 0;
  38511. hi = (hi + Math.imul(ah2, bh1)) | 0;
  38512. lo = (lo + Math.imul(al1, bl2)) | 0;
  38513. mid = (mid + Math.imul(al1, bh2)) | 0;
  38514. mid = (mid + Math.imul(ah1, bl2)) | 0;
  38515. hi = (hi + Math.imul(ah1, bh2)) | 0;
  38516. lo = (lo + Math.imul(al0, bl3)) | 0;
  38517. mid = (mid + Math.imul(al0, bh3)) | 0;
  38518. mid = (mid + Math.imul(ah0, bl3)) | 0;
  38519. hi = (hi + Math.imul(ah0, bh3)) | 0;
  38520. var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38521. c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
  38522. w3 &= 0x3ffffff;
  38523. /* k = 4 */
  38524. lo = Math.imul(al4, bl0);
  38525. mid = Math.imul(al4, bh0);
  38526. mid = (mid + Math.imul(ah4, bl0)) | 0;
  38527. hi = Math.imul(ah4, bh0);
  38528. lo = (lo + Math.imul(al3, bl1)) | 0;
  38529. mid = (mid + Math.imul(al3, bh1)) | 0;
  38530. mid = (mid + Math.imul(ah3, bl1)) | 0;
  38531. hi = (hi + Math.imul(ah3, bh1)) | 0;
  38532. lo = (lo + Math.imul(al2, bl2)) | 0;
  38533. mid = (mid + Math.imul(al2, bh2)) | 0;
  38534. mid = (mid + Math.imul(ah2, bl2)) | 0;
  38535. hi = (hi + Math.imul(ah2, bh2)) | 0;
  38536. lo = (lo + Math.imul(al1, bl3)) | 0;
  38537. mid = (mid + Math.imul(al1, bh3)) | 0;
  38538. mid = (mid + Math.imul(ah1, bl3)) | 0;
  38539. hi = (hi + Math.imul(ah1, bh3)) | 0;
  38540. lo = (lo + Math.imul(al0, bl4)) | 0;
  38541. mid = (mid + Math.imul(al0, bh4)) | 0;
  38542. mid = (mid + Math.imul(ah0, bl4)) | 0;
  38543. hi = (hi + Math.imul(ah0, bh4)) | 0;
  38544. var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38545. c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
  38546. w4 &= 0x3ffffff;
  38547. /* k = 5 */
  38548. lo = Math.imul(al5, bl0);
  38549. mid = Math.imul(al5, bh0);
  38550. mid = (mid + Math.imul(ah5, bl0)) | 0;
  38551. hi = Math.imul(ah5, bh0);
  38552. lo = (lo + Math.imul(al4, bl1)) | 0;
  38553. mid = (mid + Math.imul(al4, bh1)) | 0;
  38554. mid = (mid + Math.imul(ah4, bl1)) | 0;
  38555. hi = (hi + Math.imul(ah4, bh1)) | 0;
  38556. lo = (lo + Math.imul(al3, bl2)) | 0;
  38557. mid = (mid + Math.imul(al3, bh2)) | 0;
  38558. mid = (mid + Math.imul(ah3, bl2)) | 0;
  38559. hi = (hi + Math.imul(ah3, bh2)) | 0;
  38560. lo = (lo + Math.imul(al2, bl3)) | 0;
  38561. mid = (mid + Math.imul(al2, bh3)) | 0;
  38562. mid = (mid + Math.imul(ah2, bl3)) | 0;
  38563. hi = (hi + Math.imul(ah2, bh3)) | 0;
  38564. lo = (lo + Math.imul(al1, bl4)) | 0;
  38565. mid = (mid + Math.imul(al1, bh4)) | 0;
  38566. mid = (mid + Math.imul(ah1, bl4)) | 0;
  38567. hi = (hi + Math.imul(ah1, bh4)) | 0;
  38568. lo = (lo + Math.imul(al0, bl5)) | 0;
  38569. mid = (mid + Math.imul(al0, bh5)) | 0;
  38570. mid = (mid + Math.imul(ah0, bl5)) | 0;
  38571. hi = (hi + Math.imul(ah0, bh5)) | 0;
  38572. var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38573. c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
  38574. w5 &= 0x3ffffff;
  38575. /* k = 6 */
  38576. lo = Math.imul(al6, bl0);
  38577. mid = Math.imul(al6, bh0);
  38578. mid = (mid + Math.imul(ah6, bl0)) | 0;
  38579. hi = Math.imul(ah6, bh0);
  38580. lo = (lo + Math.imul(al5, bl1)) | 0;
  38581. mid = (mid + Math.imul(al5, bh1)) | 0;
  38582. mid = (mid + Math.imul(ah5, bl1)) | 0;
  38583. hi = (hi + Math.imul(ah5, bh1)) | 0;
  38584. lo = (lo + Math.imul(al4, bl2)) | 0;
  38585. mid = (mid + Math.imul(al4, bh2)) | 0;
  38586. mid = (mid + Math.imul(ah4, bl2)) | 0;
  38587. hi = (hi + Math.imul(ah4, bh2)) | 0;
  38588. lo = (lo + Math.imul(al3, bl3)) | 0;
  38589. mid = (mid + Math.imul(al3, bh3)) | 0;
  38590. mid = (mid + Math.imul(ah3, bl3)) | 0;
  38591. hi = (hi + Math.imul(ah3, bh3)) | 0;
  38592. lo = (lo + Math.imul(al2, bl4)) | 0;
  38593. mid = (mid + Math.imul(al2, bh4)) | 0;
  38594. mid = (mid + Math.imul(ah2, bl4)) | 0;
  38595. hi = (hi + Math.imul(ah2, bh4)) | 0;
  38596. lo = (lo + Math.imul(al1, bl5)) | 0;
  38597. mid = (mid + Math.imul(al1, bh5)) | 0;
  38598. mid = (mid + Math.imul(ah1, bl5)) | 0;
  38599. hi = (hi + Math.imul(ah1, bh5)) | 0;
  38600. lo = (lo + Math.imul(al0, bl6)) | 0;
  38601. mid = (mid + Math.imul(al0, bh6)) | 0;
  38602. mid = (mid + Math.imul(ah0, bl6)) | 0;
  38603. hi = (hi + Math.imul(ah0, bh6)) | 0;
  38604. var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38605. c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
  38606. w6 &= 0x3ffffff;
  38607. /* k = 7 */
  38608. lo = Math.imul(al7, bl0);
  38609. mid = Math.imul(al7, bh0);
  38610. mid = (mid + Math.imul(ah7, bl0)) | 0;
  38611. hi = Math.imul(ah7, bh0);
  38612. lo = (lo + Math.imul(al6, bl1)) | 0;
  38613. mid = (mid + Math.imul(al6, bh1)) | 0;
  38614. mid = (mid + Math.imul(ah6, bl1)) | 0;
  38615. hi = (hi + Math.imul(ah6, bh1)) | 0;
  38616. lo = (lo + Math.imul(al5, bl2)) | 0;
  38617. mid = (mid + Math.imul(al5, bh2)) | 0;
  38618. mid = (mid + Math.imul(ah5, bl2)) | 0;
  38619. hi = (hi + Math.imul(ah5, bh2)) | 0;
  38620. lo = (lo + Math.imul(al4, bl3)) | 0;
  38621. mid = (mid + Math.imul(al4, bh3)) | 0;
  38622. mid = (mid + Math.imul(ah4, bl3)) | 0;
  38623. hi = (hi + Math.imul(ah4, bh3)) | 0;
  38624. lo = (lo + Math.imul(al3, bl4)) | 0;
  38625. mid = (mid + Math.imul(al3, bh4)) | 0;
  38626. mid = (mid + Math.imul(ah3, bl4)) | 0;
  38627. hi = (hi + Math.imul(ah3, bh4)) | 0;
  38628. lo = (lo + Math.imul(al2, bl5)) | 0;
  38629. mid = (mid + Math.imul(al2, bh5)) | 0;
  38630. mid = (mid + Math.imul(ah2, bl5)) | 0;
  38631. hi = (hi + Math.imul(ah2, bh5)) | 0;
  38632. lo = (lo + Math.imul(al1, bl6)) | 0;
  38633. mid = (mid + Math.imul(al1, bh6)) | 0;
  38634. mid = (mid + Math.imul(ah1, bl6)) | 0;
  38635. hi = (hi + Math.imul(ah1, bh6)) | 0;
  38636. lo = (lo + Math.imul(al0, bl7)) | 0;
  38637. mid = (mid + Math.imul(al0, bh7)) | 0;
  38638. mid = (mid + Math.imul(ah0, bl7)) | 0;
  38639. hi = (hi + Math.imul(ah0, bh7)) | 0;
  38640. var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38641. c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
  38642. w7 &= 0x3ffffff;
  38643. /* k = 8 */
  38644. lo = Math.imul(al8, bl0);
  38645. mid = Math.imul(al8, bh0);
  38646. mid = (mid + Math.imul(ah8, bl0)) | 0;
  38647. hi = Math.imul(ah8, bh0);
  38648. lo = (lo + Math.imul(al7, bl1)) | 0;
  38649. mid = (mid + Math.imul(al7, bh1)) | 0;
  38650. mid = (mid + Math.imul(ah7, bl1)) | 0;
  38651. hi = (hi + Math.imul(ah7, bh1)) | 0;
  38652. lo = (lo + Math.imul(al6, bl2)) | 0;
  38653. mid = (mid + Math.imul(al6, bh2)) | 0;
  38654. mid = (mid + Math.imul(ah6, bl2)) | 0;
  38655. hi = (hi + Math.imul(ah6, bh2)) | 0;
  38656. lo = (lo + Math.imul(al5, bl3)) | 0;
  38657. mid = (mid + Math.imul(al5, bh3)) | 0;
  38658. mid = (mid + Math.imul(ah5, bl3)) | 0;
  38659. hi = (hi + Math.imul(ah5, bh3)) | 0;
  38660. lo = (lo + Math.imul(al4, bl4)) | 0;
  38661. mid = (mid + Math.imul(al4, bh4)) | 0;
  38662. mid = (mid + Math.imul(ah4, bl4)) | 0;
  38663. hi = (hi + Math.imul(ah4, bh4)) | 0;
  38664. lo = (lo + Math.imul(al3, bl5)) | 0;
  38665. mid = (mid + Math.imul(al3, bh5)) | 0;
  38666. mid = (mid + Math.imul(ah3, bl5)) | 0;
  38667. hi = (hi + Math.imul(ah3, bh5)) | 0;
  38668. lo = (lo + Math.imul(al2, bl6)) | 0;
  38669. mid = (mid + Math.imul(al2, bh6)) | 0;
  38670. mid = (mid + Math.imul(ah2, bl6)) | 0;
  38671. hi = (hi + Math.imul(ah2, bh6)) | 0;
  38672. lo = (lo + Math.imul(al1, bl7)) | 0;
  38673. mid = (mid + Math.imul(al1, bh7)) | 0;
  38674. mid = (mid + Math.imul(ah1, bl7)) | 0;
  38675. hi = (hi + Math.imul(ah1, bh7)) | 0;
  38676. lo = (lo + Math.imul(al0, bl8)) | 0;
  38677. mid = (mid + Math.imul(al0, bh8)) | 0;
  38678. mid = (mid + Math.imul(ah0, bl8)) | 0;
  38679. hi = (hi + Math.imul(ah0, bh8)) | 0;
  38680. var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38681. c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
  38682. w8 &= 0x3ffffff;
  38683. /* k = 9 */
  38684. lo = Math.imul(al9, bl0);
  38685. mid = Math.imul(al9, bh0);
  38686. mid = (mid + Math.imul(ah9, bl0)) | 0;
  38687. hi = Math.imul(ah9, bh0);
  38688. lo = (lo + Math.imul(al8, bl1)) | 0;
  38689. mid = (mid + Math.imul(al8, bh1)) | 0;
  38690. mid = (mid + Math.imul(ah8, bl1)) | 0;
  38691. hi = (hi + Math.imul(ah8, bh1)) | 0;
  38692. lo = (lo + Math.imul(al7, bl2)) | 0;
  38693. mid = (mid + Math.imul(al7, bh2)) | 0;
  38694. mid = (mid + Math.imul(ah7, bl2)) | 0;
  38695. hi = (hi + Math.imul(ah7, bh2)) | 0;
  38696. lo = (lo + Math.imul(al6, bl3)) | 0;
  38697. mid = (mid + Math.imul(al6, bh3)) | 0;
  38698. mid = (mid + Math.imul(ah6, bl3)) | 0;
  38699. hi = (hi + Math.imul(ah6, bh3)) | 0;
  38700. lo = (lo + Math.imul(al5, bl4)) | 0;
  38701. mid = (mid + Math.imul(al5, bh4)) | 0;
  38702. mid = (mid + Math.imul(ah5, bl4)) | 0;
  38703. hi = (hi + Math.imul(ah5, bh4)) | 0;
  38704. lo = (lo + Math.imul(al4, bl5)) | 0;
  38705. mid = (mid + Math.imul(al4, bh5)) | 0;
  38706. mid = (mid + Math.imul(ah4, bl5)) | 0;
  38707. hi = (hi + Math.imul(ah4, bh5)) | 0;
  38708. lo = (lo + Math.imul(al3, bl6)) | 0;
  38709. mid = (mid + Math.imul(al3, bh6)) | 0;
  38710. mid = (mid + Math.imul(ah3, bl6)) | 0;
  38711. hi = (hi + Math.imul(ah3, bh6)) | 0;
  38712. lo = (lo + Math.imul(al2, bl7)) | 0;
  38713. mid = (mid + Math.imul(al2, bh7)) | 0;
  38714. mid = (mid + Math.imul(ah2, bl7)) | 0;
  38715. hi = (hi + Math.imul(ah2, bh7)) | 0;
  38716. lo = (lo + Math.imul(al1, bl8)) | 0;
  38717. mid = (mid + Math.imul(al1, bh8)) | 0;
  38718. mid = (mid + Math.imul(ah1, bl8)) | 0;
  38719. hi = (hi + Math.imul(ah1, bh8)) | 0;
  38720. lo = (lo + Math.imul(al0, bl9)) | 0;
  38721. mid = (mid + Math.imul(al0, bh9)) | 0;
  38722. mid = (mid + Math.imul(ah0, bl9)) | 0;
  38723. hi = (hi + Math.imul(ah0, bh9)) | 0;
  38724. var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38725. c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
  38726. w9 &= 0x3ffffff;
  38727. /* k = 10 */
  38728. lo = Math.imul(al9, bl1);
  38729. mid = Math.imul(al9, bh1);
  38730. mid = (mid + Math.imul(ah9, bl1)) | 0;
  38731. hi = Math.imul(ah9, bh1);
  38732. lo = (lo + Math.imul(al8, bl2)) | 0;
  38733. mid = (mid + Math.imul(al8, bh2)) | 0;
  38734. mid = (mid + Math.imul(ah8, bl2)) | 0;
  38735. hi = (hi + Math.imul(ah8, bh2)) | 0;
  38736. lo = (lo + Math.imul(al7, bl3)) | 0;
  38737. mid = (mid + Math.imul(al7, bh3)) | 0;
  38738. mid = (mid + Math.imul(ah7, bl3)) | 0;
  38739. hi = (hi + Math.imul(ah7, bh3)) | 0;
  38740. lo = (lo + Math.imul(al6, bl4)) | 0;
  38741. mid = (mid + Math.imul(al6, bh4)) | 0;
  38742. mid = (mid + Math.imul(ah6, bl4)) | 0;
  38743. hi = (hi + Math.imul(ah6, bh4)) | 0;
  38744. lo = (lo + Math.imul(al5, bl5)) | 0;
  38745. mid = (mid + Math.imul(al5, bh5)) | 0;
  38746. mid = (mid + Math.imul(ah5, bl5)) | 0;
  38747. hi = (hi + Math.imul(ah5, bh5)) | 0;
  38748. lo = (lo + Math.imul(al4, bl6)) | 0;
  38749. mid = (mid + Math.imul(al4, bh6)) | 0;
  38750. mid = (mid + Math.imul(ah4, bl6)) | 0;
  38751. hi = (hi + Math.imul(ah4, bh6)) | 0;
  38752. lo = (lo + Math.imul(al3, bl7)) | 0;
  38753. mid = (mid + Math.imul(al3, bh7)) | 0;
  38754. mid = (mid + Math.imul(ah3, bl7)) | 0;
  38755. hi = (hi + Math.imul(ah3, bh7)) | 0;
  38756. lo = (lo + Math.imul(al2, bl8)) | 0;
  38757. mid = (mid + Math.imul(al2, bh8)) | 0;
  38758. mid = (mid + Math.imul(ah2, bl8)) | 0;
  38759. hi = (hi + Math.imul(ah2, bh8)) | 0;
  38760. lo = (lo + Math.imul(al1, bl9)) | 0;
  38761. mid = (mid + Math.imul(al1, bh9)) | 0;
  38762. mid = (mid + Math.imul(ah1, bl9)) | 0;
  38763. hi = (hi + Math.imul(ah1, bh9)) | 0;
  38764. var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38765. c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
  38766. w10 &= 0x3ffffff;
  38767. /* k = 11 */
  38768. lo = Math.imul(al9, bl2);
  38769. mid = Math.imul(al9, bh2);
  38770. mid = (mid + Math.imul(ah9, bl2)) | 0;
  38771. hi = Math.imul(ah9, bh2);
  38772. lo = (lo + Math.imul(al8, bl3)) | 0;
  38773. mid = (mid + Math.imul(al8, bh3)) | 0;
  38774. mid = (mid + Math.imul(ah8, bl3)) | 0;
  38775. hi = (hi + Math.imul(ah8, bh3)) | 0;
  38776. lo = (lo + Math.imul(al7, bl4)) | 0;
  38777. mid = (mid + Math.imul(al7, bh4)) | 0;
  38778. mid = (mid + Math.imul(ah7, bl4)) | 0;
  38779. hi = (hi + Math.imul(ah7, bh4)) | 0;
  38780. lo = (lo + Math.imul(al6, bl5)) | 0;
  38781. mid = (mid + Math.imul(al6, bh5)) | 0;
  38782. mid = (mid + Math.imul(ah6, bl5)) | 0;
  38783. hi = (hi + Math.imul(ah6, bh5)) | 0;
  38784. lo = (lo + Math.imul(al5, bl6)) | 0;
  38785. mid = (mid + Math.imul(al5, bh6)) | 0;
  38786. mid = (mid + Math.imul(ah5, bl6)) | 0;
  38787. hi = (hi + Math.imul(ah5, bh6)) | 0;
  38788. lo = (lo + Math.imul(al4, bl7)) | 0;
  38789. mid = (mid + Math.imul(al4, bh7)) | 0;
  38790. mid = (mid + Math.imul(ah4, bl7)) | 0;
  38791. hi = (hi + Math.imul(ah4, bh7)) | 0;
  38792. lo = (lo + Math.imul(al3, bl8)) | 0;
  38793. mid = (mid + Math.imul(al3, bh8)) | 0;
  38794. mid = (mid + Math.imul(ah3, bl8)) | 0;
  38795. hi = (hi + Math.imul(ah3, bh8)) | 0;
  38796. lo = (lo + Math.imul(al2, bl9)) | 0;
  38797. mid = (mid + Math.imul(al2, bh9)) | 0;
  38798. mid = (mid + Math.imul(ah2, bl9)) | 0;
  38799. hi = (hi + Math.imul(ah2, bh9)) | 0;
  38800. var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38801. c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
  38802. w11 &= 0x3ffffff;
  38803. /* k = 12 */
  38804. lo = Math.imul(al9, bl3);
  38805. mid = Math.imul(al9, bh3);
  38806. mid = (mid + Math.imul(ah9, bl3)) | 0;
  38807. hi = Math.imul(ah9, bh3);
  38808. lo = (lo + Math.imul(al8, bl4)) | 0;
  38809. mid = (mid + Math.imul(al8, bh4)) | 0;
  38810. mid = (mid + Math.imul(ah8, bl4)) | 0;
  38811. hi = (hi + Math.imul(ah8, bh4)) | 0;
  38812. lo = (lo + Math.imul(al7, bl5)) | 0;
  38813. mid = (mid + Math.imul(al7, bh5)) | 0;
  38814. mid = (mid + Math.imul(ah7, bl5)) | 0;
  38815. hi = (hi + Math.imul(ah7, bh5)) | 0;
  38816. lo = (lo + Math.imul(al6, bl6)) | 0;
  38817. mid = (mid + Math.imul(al6, bh6)) | 0;
  38818. mid = (mid + Math.imul(ah6, bl6)) | 0;
  38819. hi = (hi + Math.imul(ah6, bh6)) | 0;
  38820. lo = (lo + Math.imul(al5, bl7)) | 0;
  38821. mid = (mid + Math.imul(al5, bh7)) | 0;
  38822. mid = (mid + Math.imul(ah5, bl7)) | 0;
  38823. hi = (hi + Math.imul(ah5, bh7)) | 0;
  38824. lo = (lo + Math.imul(al4, bl8)) | 0;
  38825. mid = (mid + Math.imul(al4, bh8)) | 0;
  38826. mid = (mid + Math.imul(ah4, bl8)) | 0;
  38827. hi = (hi + Math.imul(ah4, bh8)) | 0;
  38828. lo = (lo + Math.imul(al3, bl9)) | 0;
  38829. mid = (mid + Math.imul(al3, bh9)) | 0;
  38830. mid = (mid + Math.imul(ah3, bl9)) | 0;
  38831. hi = (hi + Math.imul(ah3, bh9)) | 0;
  38832. var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38833. c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
  38834. w12 &= 0x3ffffff;
  38835. /* k = 13 */
  38836. lo = Math.imul(al9, bl4);
  38837. mid = Math.imul(al9, bh4);
  38838. mid = (mid + Math.imul(ah9, bl4)) | 0;
  38839. hi = Math.imul(ah9, bh4);
  38840. lo = (lo + Math.imul(al8, bl5)) | 0;
  38841. mid = (mid + Math.imul(al8, bh5)) | 0;
  38842. mid = (mid + Math.imul(ah8, bl5)) | 0;
  38843. hi = (hi + Math.imul(ah8, bh5)) | 0;
  38844. lo = (lo + Math.imul(al7, bl6)) | 0;
  38845. mid = (mid + Math.imul(al7, bh6)) | 0;
  38846. mid = (mid + Math.imul(ah7, bl6)) | 0;
  38847. hi = (hi + Math.imul(ah7, bh6)) | 0;
  38848. lo = (lo + Math.imul(al6, bl7)) | 0;
  38849. mid = (mid + Math.imul(al6, bh7)) | 0;
  38850. mid = (mid + Math.imul(ah6, bl7)) | 0;
  38851. hi = (hi + Math.imul(ah6, bh7)) | 0;
  38852. lo = (lo + Math.imul(al5, bl8)) | 0;
  38853. mid = (mid + Math.imul(al5, bh8)) | 0;
  38854. mid = (mid + Math.imul(ah5, bl8)) | 0;
  38855. hi = (hi + Math.imul(ah5, bh8)) | 0;
  38856. lo = (lo + Math.imul(al4, bl9)) | 0;
  38857. mid = (mid + Math.imul(al4, bh9)) | 0;
  38858. mid = (mid + Math.imul(ah4, bl9)) | 0;
  38859. hi = (hi + Math.imul(ah4, bh9)) | 0;
  38860. var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38861. c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
  38862. w13 &= 0x3ffffff;
  38863. /* k = 14 */
  38864. lo = Math.imul(al9, bl5);
  38865. mid = Math.imul(al9, bh5);
  38866. mid = (mid + Math.imul(ah9, bl5)) | 0;
  38867. hi = Math.imul(ah9, bh5);
  38868. lo = (lo + Math.imul(al8, bl6)) | 0;
  38869. mid = (mid + Math.imul(al8, bh6)) | 0;
  38870. mid = (mid + Math.imul(ah8, bl6)) | 0;
  38871. hi = (hi + Math.imul(ah8, bh6)) | 0;
  38872. lo = (lo + Math.imul(al7, bl7)) | 0;
  38873. mid = (mid + Math.imul(al7, bh7)) | 0;
  38874. mid = (mid + Math.imul(ah7, bl7)) | 0;
  38875. hi = (hi + Math.imul(ah7, bh7)) | 0;
  38876. lo = (lo + Math.imul(al6, bl8)) | 0;
  38877. mid = (mid + Math.imul(al6, bh8)) | 0;
  38878. mid = (mid + Math.imul(ah6, bl8)) | 0;
  38879. hi = (hi + Math.imul(ah6, bh8)) | 0;
  38880. lo = (lo + Math.imul(al5, bl9)) | 0;
  38881. mid = (mid + Math.imul(al5, bh9)) | 0;
  38882. mid = (mid + Math.imul(ah5, bl9)) | 0;
  38883. hi = (hi + Math.imul(ah5, bh9)) | 0;
  38884. var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38885. c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
  38886. w14 &= 0x3ffffff;
  38887. /* k = 15 */
  38888. lo = Math.imul(al9, bl6);
  38889. mid = Math.imul(al9, bh6);
  38890. mid = (mid + Math.imul(ah9, bl6)) | 0;
  38891. hi = Math.imul(ah9, bh6);
  38892. lo = (lo + Math.imul(al8, bl7)) | 0;
  38893. mid = (mid + Math.imul(al8, bh7)) | 0;
  38894. mid = (mid + Math.imul(ah8, bl7)) | 0;
  38895. hi = (hi + Math.imul(ah8, bh7)) | 0;
  38896. lo = (lo + Math.imul(al7, bl8)) | 0;
  38897. mid = (mid + Math.imul(al7, bh8)) | 0;
  38898. mid = (mid + Math.imul(ah7, bl8)) | 0;
  38899. hi = (hi + Math.imul(ah7, bh8)) | 0;
  38900. lo = (lo + Math.imul(al6, bl9)) | 0;
  38901. mid = (mid + Math.imul(al6, bh9)) | 0;
  38902. mid = (mid + Math.imul(ah6, bl9)) | 0;
  38903. hi = (hi + Math.imul(ah6, bh9)) | 0;
  38904. var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38905. c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
  38906. w15 &= 0x3ffffff;
  38907. /* k = 16 */
  38908. lo = Math.imul(al9, bl7);
  38909. mid = Math.imul(al9, bh7);
  38910. mid = (mid + Math.imul(ah9, bl7)) | 0;
  38911. hi = Math.imul(ah9, bh7);
  38912. lo = (lo + Math.imul(al8, bl8)) | 0;
  38913. mid = (mid + Math.imul(al8, bh8)) | 0;
  38914. mid = (mid + Math.imul(ah8, bl8)) | 0;
  38915. hi = (hi + Math.imul(ah8, bh8)) | 0;
  38916. lo = (lo + Math.imul(al7, bl9)) | 0;
  38917. mid = (mid + Math.imul(al7, bh9)) | 0;
  38918. mid = (mid + Math.imul(ah7, bl9)) | 0;
  38919. hi = (hi + Math.imul(ah7, bh9)) | 0;
  38920. var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38921. c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
  38922. w16 &= 0x3ffffff;
  38923. /* k = 17 */
  38924. lo = Math.imul(al9, bl8);
  38925. mid = Math.imul(al9, bh8);
  38926. mid = (mid + Math.imul(ah9, bl8)) | 0;
  38927. hi = Math.imul(ah9, bh8);
  38928. lo = (lo + Math.imul(al8, bl9)) | 0;
  38929. mid = (mid + Math.imul(al8, bh9)) | 0;
  38930. mid = (mid + Math.imul(ah8, bl9)) | 0;
  38931. hi = (hi + Math.imul(ah8, bh9)) | 0;
  38932. var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38933. c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
  38934. w17 &= 0x3ffffff;
  38935. /* k = 18 */
  38936. lo = Math.imul(al9, bl9);
  38937. mid = Math.imul(al9, bh9);
  38938. mid = (mid + Math.imul(ah9, bl9)) | 0;
  38939. hi = Math.imul(ah9, bh9);
  38940. var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  38941. c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
  38942. w18 &= 0x3ffffff;
  38943. o[0] = w0;
  38944. o[1] = w1;
  38945. o[2] = w2;
  38946. o[3] = w3;
  38947. o[4] = w4;
  38948. o[5] = w5;
  38949. o[6] = w6;
  38950. o[7] = w7;
  38951. o[8] = w8;
  38952. o[9] = w9;
  38953. o[10] = w10;
  38954. o[11] = w11;
  38955. o[12] = w12;
  38956. o[13] = w13;
  38957. o[14] = w14;
  38958. o[15] = w15;
  38959. o[16] = w16;
  38960. o[17] = w17;
  38961. o[18] = w18;
  38962. if (c !== 0) {
  38963. o[19] = c;
  38964. out.length++;
  38965. }
  38966. return out;
  38967. };
  38968. // Polyfill comb
  38969. if (!Math.imul) {
  38970. comb10MulTo = smallMulTo;
  38971. }
  38972. function bigMulTo (self, num, out) {
  38973. out.negative = num.negative ^ self.negative;
  38974. out.length = self.length + num.length;
  38975. var carry = 0;
  38976. var hncarry = 0;
  38977. for (var k = 0; k < out.length - 1; k++) {
  38978. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  38979. // note that ncarry could be >= 0x3ffffff
  38980. var ncarry = hncarry;
  38981. hncarry = 0;
  38982. var rword = carry & 0x3ffffff;
  38983. var maxJ = Math.min(k, num.length - 1);
  38984. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  38985. var i = k - j;
  38986. var a = self.words[i] | 0;
  38987. var b = num.words[j] | 0;
  38988. var r = a * b;
  38989. var lo = r & 0x3ffffff;
  38990. ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
  38991. lo = (lo + rword) | 0;
  38992. rword = lo & 0x3ffffff;
  38993. ncarry = (ncarry + (lo >>> 26)) | 0;
  38994. hncarry += ncarry >>> 26;
  38995. ncarry &= 0x3ffffff;
  38996. }
  38997. out.words[k] = rword;
  38998. carry = ncarry;
  38999. ncarry = hncarry;
  39000. }
  39001. if (carry !== 0) {
  39002. out.words[k] = carry;
  39003. } else {
  39004. out.length--;
  39005. }
  39006. return out.strip();
  39007. }
  39008. function jumboMulTo (self, num, out) {
  39009. var fftm = new FFTM();
  39010. return fftm.mulp(self, num, out);
  39011. }
  39012. BN.prototype.mulTo = function mulTo (num, out) {
  39013. var res;
  39014. var len = this.length + num.length;
  39015. if (this.length === 10 && num.length === 10) {
  39016. res = comb10MulTo(this, num, out);
  39017. } else if (len < 63) {
  39018. res = smallMulTo(this, num, out);
  39019. } else if (len < 1024) {
  39020. res = bigMulTo(this, num, out);
  39021. } else {
  39022. res = jumboMulTo(this, num, out);
  39023. }
  39024. return res;
  39025. };
  39026. // Cooley-Tukey algorithm for FFT
  39027. // slightly revisited to rely on looping instead of recursion
  39028. function FFTM (x, y) {
  39029. this.x = x;
  39030. this.y = y;
  39031. }
  39032. FFTM.prototype.makeRBT = function makeRBT (N) {
  39033. var t = new Array(N);
  39034. var l = BN.prototype._countBits(N) - 1;
  39035. for (var i = 0; i < N; i++) {
  39036. t[i] = this.revBin(i, l, N);
  39037. }
  39038. return t;
  39039. };
  39040. // Returns binary-reversed representation of `x`
  39041. FFTM.prototype.revBin = function revBin (x, l, N) {
  39042. if (x === 0 || x === N - 1) return x;
  39043. var rb = 0;
  39044. for (var i = 0; i < l; i++) {
  39045. rb |= (x & 1) << (l - i - 1);
  39046. x >>= 1;
  39047. }
  39048. return rb;
  39049. };
  39050. // Performs "tweedling" phase, therefore 'emulating'
  39051. // behaviour of the recursive algorithm
  39052. FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
  39053. for (var i = 0; i < N; i++) {
  39054. rtws[i] = rws[rbt[i]];
  39055. itws[i] = iws[rbt[i]];
  39056. }
  39057. };
  39058. FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
  39059. this.permute(rbt, rws, iws, rtws, itws, N);
  39060. for (var s = 1; s < N; s <<= 1) {
  39061. var l = s << 1;
  39062. var rtwdf = Math.cos(2 * Math.PI / l);
  39063. var itwdf = Math.sin(2 * Math.PI / l);
  39064. for (var p = 0; p < N; p += l) {
  39065. var rtwdf_ = rtwdf;
  39066. var itwdf_ = itwdf;
  39067. for (var j = 0; j < s; j++) {
  39068. var re = rtws[p + j];
  39069. var ie = itws[p + j];
  39070. var ro = rtws[p + j + s];
  39071. var io = itws[p + j + s];
  39072. var rx = rtwdf_ * ro - itwdf_ * io;
  39073. io = rtwdf_ * io + itwdf_ * ro;
  39074. ro = rx;
  39075. rtws[p + j] = re + ro;
  39076. itws[p + j] = ie + io;
  39077. rtws[p + j + s] = re - ro;
  39078. itws[p + j + s] = ie - io;
  39079. /* jshint maxdepth : false */
  39080. if (j !== l) {
  39081. rx = rtwdf * rtwdf_ - itwdf * itwdf_;
  39082. itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
  39083. rtwdf_ = rx;
  39084. }
  39085. }
  39086. }
  39087. }
  39088. };
  39089. FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
  39090. var N = Math.max(m, n) | 1;
  39091. var odd = N & 1;
  39092. var i = 0;
  39093. for (N = N / 2 | 0; N; N = N >>> 1) {
  39094. i++;
  39095. }
  39096. return 1 << i + 1 + odd;
  39097. };
  39098. FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
  39099. if (N <= 1) return;
  39100. for (var i = 0; i < N / 2; i++) {
  39101. var t = rws[i];
  39102. rws[i] = rws[N - i - 1];
  39103. rws[N - i - 1] = t;
  39104. t = iws[i];
  39105. iws[i] = -iws[N - i - 1];
  39106. iws[N - i - 1] = -t;
  39107. }
  39108. };
  39109. FFTM.prototype.normalize13b = function normalize13b (ws, N) {
  39110. var carry = 0;
  39111. for (var i = 0; i < N / 2; i++) {
  39112. var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
  39113. Math.round(ws[2 * i] / N) +
  39114. carry;
  39115. ws[i] = w & 0x3ffffff;
  39116. if (w < 0x4000000) {
  39117. carry = 0;
  39118. } else {
  39119. carry = w / 0x4000000 | 0;
  39120. }
  39121. }
  39122. return ws;
  39123. };
  39124. FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
  39125. var carry = 0;
  39126. for (var i = 0; i < len; i++) {
  39127. carry = carry + (ws[i] | 0);
  39128. rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
  39129. rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
  39130. }
  39131. // Pad with zeroes
  39132. for (i = 2 * len; i < N; ++i) {
  39133. rws[i] = 0;
  39134. }
  39135. assert(carry === 0);
  39136. assert((carry & ~0x1fff) === 0);
  39137. };
  39138. FFTM.prototype.stub = function stub (N) {
  39139. var ph = new Array(N);
  39140. for (var i = 0; i < N; i++) {
  39141. ph[i] = 0;
  39142. }
  39143. return ph;
  39144. };
  39145. FFTM.prototype.mulp = function mulp (x, y, out) {
  39146. var N = 2 * this.guessLen13b(x.length, y.length);
  39147. var rbt = this.makeRBT(N);
  39148. var _ = this.stub(N);
  39149. var rws = new Array(N);
  39150. var rwst = new Array(N);
  39151. var iwst = new Array(N);
  39152. var nrws = new Array(N);
  39153. var nrwst = new Array(N);
  39154. var niwst = new Array(N);
  39155. var rmws = out.words;
  39156. rmws.length = N;
  39157. this.convert13b(x.words, x.length, rws, N);
  39158. this.convert13b(y.words, y.length, nrws, N);
  39159. this.transform(rws, _, rwst, iwst, N, rbt);
  39160. this.transform(nrws, _, nrwst, niwst, N, rbt);
  39161. for (var i = 0; i < N; i++) {
  39162. var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
  39163. iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
  39164. rwst[i] = rx;
  39165. }
  39166. this.conjugate(rwst, iwst, N);
  39167. this.transform(rwst, iwst, rmws, _, N, rbt);
  39168. this.conjugate(rmws, _, N);
  39169. this.normalize13b(rmws, N);
  39170. out.negative = x.negative ^ y.negative;
  39171. out.length = x.length + y.length;
  39172. return out.strip();
  39173. };
  39174. // Multiply `this` by `num`
  39175. BN.prototype.mul = function mul (num) {
  39176. var out = new BN(null);
  39177. out.words = new Array(this.length + num.length);
  39178. return this.mulTo(num, out);
  39179. };
  39180. // Multiply employing FFT
  39181. BN.prototype.mulf = function mulf (num) {
  39182. var out = new BN(null);
  39183. out.words = new Array(this.length + num.length);
  39184. return jumboMulTo(this, num, out);
  39185. };
  39186. // In-place Multiplication
  39187. BN.prototype.imul = function imul (num) {
  39188. return this.clone().mulTo(num, this);
  39189. };
  39190. BN.prototype.imuln = function imuln (num) {
  39191. assert(typeof num === 'number');
  39192. assert(num < 0x4000000);
  39193. // Carry
  39194. var carry = 0;
  39195. for (var i = 0; i < this.length; i++) {
  39196. var w = (this.words[i] | 0) * num;
  39197. var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
  39198. carry >>= 26;
  39199. carry += (w / 0x4000000) | 0;
  39200. // NOTE: lo is 27bit maximum
  39201. carry += lo >>> 26;
  39202. this.words[i] = lo & 0x3ffffff;
  39203. }
  39204. if (carry !== 0) {
  39205. this.words[i] = carry;
  39206. this.length++;
  39207. }
  39208. return this;
  39209. };
  39210. BN.prototype.muln = function muln (num) {
  39211. return this.clone().imuln(num);
  39212. };
  39213. // `this` * `this`
  39214. BN.prototype.sqr = function sqr () {
  39215. return this.mul(this);
  39216. };
  39217. // `this` * `this` in-place
  39218. BN.prototype.isqr = function isqr () {
  39219. return this.imul(this.clone());
  39220. };
  39221. // Math.pow(`this`, `num`)
  39222. BN.prototype.pow = function pow (num) {
  39223. var w = toBitArray(num);
  39224. if (w.length === 0) return new BN(1);
  39225. // Skip leading zeroes
  39226. var res = this;
  39227. for (var i = 0; i < w.length; i++, res = res.sqr()) {
  39228. if (w[i] !== 0) break;
  39229. }
  39230. if (++i < w.length) {
  39231. for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
  39232. if (w[i] === 0) continue;
  39233. res = res.mul(q);
  39234. }
  39235. }
  39236. return res;
  39237. };
  39238. // Shift-left in-place
  39239. BN.prototype.iushln = function iushln (bits) {
  39240. assert(typeof bits === 'number' && bits >= 0);
  39241. var r = bits % 26;
  39242. var s = (bits - r) / 26;
  39243. var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
  39244. var i;
  39245. if (r !== 0) {
  39246. var carry = 0;
  39247. for (i = 0; i < this.length; i++) {
  39248. var newCarry = this.words[i] & carryMask;
  39249. var c = ((this.words[i] | 0) - newCarry) << r;
  39250. this.words[i] = c | carry;
  39251. carry = newCarry >>> (26 - r);
  39252. }
  39253. if (carry) {
  39254. this.words[i] = carry;
  39255. this.length++;
  39256. }
  39257. }
  39258. if (s !== 0) {
  39259. for (i = this.length - 1; i >= 0; i--) {
  39260. this.words[i + s] = this.words[i];
  39261. }
  39262. for (i = 0; i < s; i++) {
  39263. this.words[i] = 0;
  39264. }
  39265. this.length += s;
  39266. }
  39267. return this.strip();
  39268. };
  39269. BN.prototype.ishln = function ishln (bits) {
  39270. // TODO(indutny): implement me
  39271. assert(this.negative === 0);
  39272. return this.iushln(bits);
  39273. };
  39274. // Shift-right in-place
  39275. // NOTE: `hint` is a lowest bit before trailing zeroes
  39276. // NOTE: if `extended` is present - it will be filled with destroyed bits
  39277. BN.prototype.iushrn = function iushrn (bits, hint, extended) {
  39278. assert(typeof bits === 'number' && bits >= 0);
  39279. var h;
  39280. if (hint) {
  39281. h = (hint - (hint % 26)) / 26;
  39282. } else {
  39283. h = 0;
  39284. }
  39285. var r = bits % 26;
  39286. var s = Math.min((bits - r) / 26, this.length);
  39287. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  39288. var maskedWords = extended;
  39289. h -= s;
  39290. h = Math.max(0, h);
  39291. // Extended mode, copy masked part
  39292. if (maskedWords) {
  39293. for (var i = 0; i < s; i++) {
  39294. maskedWords.words[i] = this.words[i];
  39295. }
  39296. maskedWords.length = s;
  39297. }
  39298. if (s === 0) {
  39299. // No-op, we should not move anything at all
  39300. } else if (this.length > s) {
  39301. this.length -= s;
  39302. for (i = 0; i < this.length; i++) {
  39303. this.words[i] = this.words[i + s];
  39304. }
  39305. } else {
  39306. this.words[0] = 0;
  39307. this.length = 1;
  39308. }
  39309. var carry = 0;
  39310. for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
  39311. var word = this.words[i] | 0;
  39312. this.words[i] = (carry << (26 - r)) | (word >>> r);
  39313. carry = word & mask;
  39314. }
  39315. // Push carried bits as a mask
  39316. if (maskedWords && carry !== 0) {
  39317. maskedWords.words[maskedWords.length++] = carry;
  39318. }
  39319. if (this.length === 0) {
  39320. this.words[0] = 0;
  39321. this.length = 1;
  39322. }
  39323. return this.strip();
  39324. };
  39325. BN.prototype.ishrn = function ishrn (bits, hint, extended) {
  39326. // TODO(indutny): implement me
  39327. assert(this.negative === 0);
  39328. return this.iushrn(bits, hint, extended);
  39329. };
  39330. // Shift-left
  39331. BN.prototype.shln = function shln (bits) {
  39332. return this.clone().ishln(bits);
  39333. };
  39334. BN.prototype.ushln = function ushln (bits) {
  39335. return this.clone().iushln(bits);
  39336. };
  39337. // Shift-right
  39338. BN.prototype.shrn = function shrn (bits) {
  39339. return this.clone().ishrn(bits);
  39340. };
  39341. BN.prototype.ushrn = function ushrn (bits) {
  39342. return this.clone().iushrn(bits);
  39343. };
  39344. // Test if n bit is set
  39345. BN.prototype.testn = function testn (bit) {
  39346. assert(typeof bit === 'number' && bit >= 0);
  39347. var r = bit % 26;
  39348. var s = (bit - r) / 26;
  39349. var q = 1 << r;
  39350. // Fast case: bit is much higher than all existing words
  39351. if (this.length <= s) return false;
  39352. // Check bit and return
  39353. var w = this.words[s];
  39354. return !!(w & q);
  39355. };
  39356. // Return only lowers bits of number (in-place)
  39357. BN.prototype.imaskn = function imaskn (bits) {
  39358. assert(typeof bits === 'number' && bits >= 0);
  39359. var r = bits % 26;
  39360. var s = (bits - r) / 26;
  39361. assert(this.negative === 0, 'imaskn works only with positive numbers');
  39362. if (this.length <= s) {
  39363. return this;
  39364. }
  39365. if (r !== 0) {
  39366. s++;
  39367. }
  39368. this.length = Math.min(s, this.length);
  39369. if (r !== 0) {
  39370. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  39371. this.words[this.length - 1] &= mask;
  39372. }
  39373. return this.strip();
  39374. };
  39375. // Return only lowers bits of number
  39376. BN.prototype.maskn = function maskn (bits) {
  39377. return this.clone().imaskn(bits);
  39378. };
  39379. // Add plain number `num` to `this`
  39380. BN.prototype.iaddn = function iaddn (num) {
  39381. assert(typeof num === 'number');
  39382. assert(num < 0x4000000);
  39383. if (num < 0) return this.isubn(-num);
  39384. // Possible sign change
  39385. if (this.negative !== 0) {
  39386. if (this.length === 1 && (this.words[0] | 0) < num) {
  39387. this.words[0] = num - (this.words[0] | 0);
  39388. this.negative = 0;
  39389. return this;
  39390. }
  39391. this.negative = 0;
  39392. this.isubn(num);
  39393. this.negative = 1;
  39394. return this;
  39395. }
  39396. // Add without checks
  39397. return this._iaddn(num);
  39398. };
  39399. BN.prototype._iaddn = function _iaddn (num) {
  39400. this.words[0] += num;
  39401. // Carry
  39402. for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
  39403. this.words[i] -= 0x4000000;
  39404. if (i === this.length - 1) {
  39405. this.words[i + 1] = 1;
  39406. } else {
  39407. this.words[i + 1]++;
  39408. }
  39409. }
  39410. this.length = Math.max(this.length, i + 1);
  39411. return this;
  39412. };
  39413. // Subtract plain number `num` from `this`
  39414. BN.prototype.isubn = function isubn (num) {
  39415. assert(typeof num === 'number');
  39416. assert(num < 0x4000000);
  39417. if (num < 0) return this.iaddn(-num);
  39418. if (this.negative !== 0) {
  39419. this.negative = 0;
  39420. this.iaddn(num);
  39421. this.negative = 1;
  39422. return this;
  39423. }
  39424. this.words[0] -= num;
  39425. if (this.length === 1 && this.words[0] < 0) {
  39426. this.words[0] = -this.words[0];
  39427. this.negative = 1;
  39428. } else {
  39429. // Carry
  39430. for (var i = 0; i < this.length && this.words[i] < 0; i++) {
  39431. this.words[i] += 0x4000000;
  39432. this.words[i + 1] -= 1;
  39433. }
  39434. }
  39435. return this.strip();
  39436. };
  39437. BN.prototype.addn = function addn (num) {
  39438. return this.clone().iaddn(num);
  39439. };
  39440. BN.prototype.subn = function subn (num) {
  39441. return this.clone().isubn(num);
  39442. };
  39443. BN.prototype.iabs = function iabs () {
  39444. this.negative = 0;
  39445. return this;
  39446. };
  39447. BN.prototype.abs = function abs () {
  39448. return this.clone().iabs();
  39449. };
  39450. BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
  39451. var len = num.length + shift;
  39452. var i;
  39453. this._expand(len);
  39454. var w;
  39455. var carry = 0;
  39456. for (i = 0; i < num.length; i++) {
  39457. w = (this.words[i + shift] | 0) + carry;
  39458. var right = (num.words[i] | 0) * mul;
  39459. w -= right & 0x3ffffff;
  39460. carry = (w >> 26) - ((right / 0x4000000) | 0);
  39461. this.words[i + shift] = w & 0x3ffffff;
  39462. }
  39463. for (; i < this.length - shift; i++) {
  39464. w = (this.words[i + shift] | 0) + carry;
  39465. carry = w >> 26;
  39466. this.words[i + shift] = w & 0x3ffffff;
  39467. }
  39468. if (carry === 0) return this.strip();
  39469. // Subtraction overflow
  39470. assert(carry === -1);
  39471. carry = 0;
  39472. for (i = 0; i < this.length; i++) {
  39473. w = -(this.words[i] | 0) + carry;
  39474. carry = w >> 26;
  39475. this.words[i] = w & 0x3ffffff;
  39476. }
  39477. this.negative = 1;
  39478. return this.strip();
  39479. };
  39480. BN.prototype._wordDiv = function _wordDiv (num, mode) {
  39481. var shift = this.length - num.length;
  39482. var a = this.clone();
  39483. var b = num;
  39484. // Normalize
  39485. var bhi = b.words[b.length - 1] | 0;
  39486. var bhiBits = this._countBits(bhi);
  39487. shift = 26 - bhiBits;
  39488. if (shift !== 0) {
  39489. b = b.ushln(shift);
  39490. a.iushln(shift);
  39491. bhi = b.words[b.length - 1] | 0;
  39492. }
  39493. // Initialize quotient
  39494. var m = a.length - b.length;
  39495. var q;
  39496. if (mode !== 'mod') {
  39497. q = new BN(null);
  39498. q.length = m + 1;
  39499. q.words = new Array(q.length);
  39500. for (var i = 0; i < q.length; i++) {
  39501. q.words[i] = 0;
  39502. }
  39503. }
  39504. var diff = a.clone()._ishlnsubmul(b, 1, m);
  39505. if (diff.negative === 0) {
  39506. a = diff;
  39507. if (q) {
  39508. q.words[m] = 1;
  39509. }
  39510. }
  39511. for (var j = m - 1; j >= 0; j--) {
  39512. var qj = (a.words[b.length + j] | 0) * 0x4000000 +
  39513. (a.words[b.length + j - 1] | 0);
  39514. // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
  39515. // (0x7ffffff)
  39516. qj = Math.min((qj / bhi) | 0, 0x3ffffff);
  39517. a._ishlnsubmul(b, qj, j);
  39518. while (a.negative !== 0) {
  39519. qj--;
  39520. a.negative = 0;
  39521. a._ishlnsubmul(b, 1, j);
  39522. if (!a.isZero()) {
  39523. a.negative ^= 1;
  39524. }
  39525. }
  39526. if (q) {
  39527. q.words[j] = qj;
  39528. }
  39529. }
  39530. if (q) {
  39531. q.strip();
  39532. }
  39533. a.strip();
  39534. // Denormalize
  39535. if (mode !== 'div' && shift !== 0) {
  39536. a.iushrn(shift);
  39537. }
  39538. return {
  39539. div: q || null,
  39540. mod: a
  39541. };
  39542. };
  39543. // NOTE: 1) `mode` can be set to `mod` to request mod only,
  39544. // to `div` to request div only, or be absent to
  39545. // request both div & mod
  39546. // 2) `positive` is true if unsigned mod is requested
  39547. BN.prototype.divmod = function divmod (num, mode, positive) {
  39548. assert(!num.isZero());
  39549. if (this.isZero()) {
  39550. return {
  39551. div: new BN(0),
  39552. mod: new BN(0)
  39553. };
  39554. }
  39555. var div, mod, res;
  39556. if (this.negative !== 0 && num.negative === 0) {
  39557. res = this.neg().divmod(num, mode);
  39558. if (mode !== 'mod') {
  39559. div = res.div.neg();
  39560. }
  39561. if (mode !== 'div') {
  39562. mod = res.mod.neg();
  39563. if (positive && mod.negative !== 0) {
  39564. mod.iadd(num);
  39565. }
  39566. }
  39567. return {
  39568. div: div,
  39569. mod: mod
  39570. };
  39571. }
  39572. if (this.negative === 0 && num.negative !== 0) {
  39573. res = this.divmod(num.neg(), mode);
  39574. if (mode !== 'mod') {
  39575. div = res.div.neg();
  39576. }
  39577. return {
  39578. div: div,
  39579. mod: res.mod
  39580. };
  39581. }
  39582. if ((this.negative & num.negative) !== 0) {
  39583. res = this.neg().divmod(num.neg(), mode);
  39584. if (mode !== 'div') {
  39585. mod = res.mod.neg();
  39586. if (positive && mod.negative !== 0) {
  39587. mod.isub(num);
  39588. }
  39589. }
  39590. return {
  39591. div: res.div,
  39592. mod: mod
  39593. };
  39594. }
  39595. // Both numbers are positive at this point
  39596. // Strip both numbers to approximate shift value
  39597. if (num.length > this.length || this.cmp(num) < 0) {
  39598. return {
  39599. div: new BN(0),
  39600. mod: this
  39601. };
  39602. }
  39603. // Very short reduction
  39604. if (num.length === 1) {
  39605. if (mode === 'div') {
  39606. return {
  39607. div: this.divn(num.words[0]),
  39608. mod: null
  39609. };
  39610. }
  39611. if (mode === 'mod') {
  39612. return {
  39613. div: null,
  39614. mod: new BN(this.modn(num.words[0]))
  39615. };
  39616. }
  39617. return {
  39618. div: this.divn(num.words[0]),
  39619. mod: new BN(this.modn(num.words[0]))
  39620. };
  39621. }
  39622. return this._wordDiv(num, mode);
  39623. };
  39624. // Find `this` / `num`
  39625. BN.prototype.div = function div (num) {
  39626. return this.divmod(num, 'div', false).div;
  39627. };
  39628. // Find `this` % `num`
  39629. BN.prototype.mod = function mod (num) {
  39630. return this.divmod(num, 'mod', false).mod;
  39631. };
  39632. BN.prototype.umod = function umod (num) {
  39633. return this.divmod(num, 'mod', true).mod;
  39634. };
  39635. // Find Round(`this` / `num`)
  39636. BN.prototype.divRound = function divRound (num) {
  39637. var dm = this.divmod(num);
  39638. // Fast case - exact division
  39639. if (dm.mod.isZero()) return dm.div;
  39640. var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
  39641. var half = num.ushrn(1);
  39642. var r2 = num.andln(1);
  39643. var cmp = mod.cmp(half);
  39644. // Round down
  39645. if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
  39646. // Round up
  39647. return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
  39648. };
  39649. BN.prototype.modn = function modn (num) {
  39650. assert(num <= 0x3ffffff);
  39651. var p = (1 << 26) % num;
  39652. var acc = 0;
  39653. for (var i = this.length - 1; i >= 0; i--) {
  39654. acc = (p * acc + (this.words[i] | 0)) % num;
  39655. }
  39656. return acc;
  39657. };
  39658. // In-place division by number
  39659. BN.prototype.idivn = function idivn (num) {
  39660. assert(num <= 0x3ffffff);
  39661. var carry = 0;
  39662. for (var i = this.length - 1; i >= 0; i--) {
  39663. var w = (this.words[i] | 0) + carry * 0x4000000;
  39664. this.words[i] = (w / num) | 0;
  39665. carry = w % num;
  39666. }
  39667. return this.strip();
  39668. };
  39669. BN.prototype.divn = function divn (num) {
  39670. return this.clone().idivn(num);
  39671. };
  39672. BN.prototype.egcd = function egcd (p) {
  39673. assert(p.negative === 0);
  39674. assert(!p.isZero());
  39675. var x = this;
  39676. var y = p.clone();
  39677. if (x.negative !== 0) {
  39678. x = x.umod(p);
  39679. } else {
  39680. x = x.clone();
  39681. }
  39682. // A * x + B * y = x
  39683. var A = new BN(1);
  39684. var B = new BN(0);
  39685. // C * x + D * y = y
  39686. var C = new BN(0);
  39687. var D = new BN(1);
  39688. var g = 0;
  39689. while (x.isEven() && y.isEven()) {
  39690. x.iushrn(1);
  39691. y.iushrn(1);
  39692. ++g;
  39693. }
  39694. var yp = y.clone();
  39695. var xp = x.clone();
  39696. while (!x.isZero()) {
  39697. for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  39698. if (i > 0) {
  39699. x.iushrn(i);
  39700. while (i-- > 0) {
  39701. if (A.isOdd() || B.isOdd()) {
  39702. A.iadd(yp);
  39703. B.isub(xp);
  39704. }
  39705. A.iushrn(1);
  39706. B.iushrn(1);
  39707. }
  39708. }
  39709. for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  39710. if (j > 0) {
  39711. y.iushrn(j);
  39712. while (j-- > 0) {
  39713. if (C.isOdd() || D.isOdd()) {
  39714. C.iadd(yp);
  39715. D.isub(xp);
  39716. }
  39717. C.iushrn(1);
  39718. D.iushrn(1);
  39719. }
  39720. }
  39721. if (x.cmp(y) >= 0) {
  39722. x.isub(y);
  39723. A.isub(C);
  39724. B.isub(D);
  39725. } else {
  39726. y.isub(x);
  39727. C.isub(A);
  39728. D.isub(B);
  39729. }
  39730. }
  39731. return {
  39732. a: C,
  39733. b: D,
  39734. gcd: y.iushln(g)
  39735. };
  39736. };
  39737. // This is reduced incarnation of the binary EEA
  39738. // above, designated to invert members of the
  39739. // _prime_ fields F(p) at a maximal speed
  39740. BN.prototype._invmp = function _invmp (p) {
  39741. assert(p.negative === 0);
  39742. assert(!p.isZero());
  39743. var a = this;
  39744. var b = p.clone();
  39745. if (a.negative !== 0) {
  39746. a = a.umod(p);
  39747. } else {
  39748. a = a.clone();
  39749. }
  39750. var x1 = new BN(1);
  39751. var x2 = new BN(0);
  39752. var delta = b.clone();
  39753. while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
  39754. for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  39755. if (i > 0) {
  39756. a.iushrn(i);
  39757. while (i-- > 0) {
  39758. if (x1.isOdd()) {
  39759. x1.iadd(delta);
  39760. }
  39761. x1.iushrn(1);
  39762. }
  39763. }
  39764. for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  39765. if (j > 0) {
  39766. b.iushrn(j);
  39767. while (j-- > 0) {
  39768. if (x2.isOdd()) {
  39769. x2.iadd(delta);
  39770. }
  39771. x2.iushrn(1);
  39772. }
  39773. }
  39774. if (a.cmp(b) >= 0) {
  39775. a.isub(b);
  39776. x1.isub(x2);
  39777. } else {
  39778. b.isub(a);
  39779. x2.isub(x1);
  39780. }
  39781. }
  39782. var res;
  39783. if (a.cmpn(1) === 0) {
  39784. res = x1;
  39785. } else {
  39786. res = x2;
  39787. }
  39788. if (res.cmpn(0) < 0) {
  39789. res.iadd(p);
  39790. }
  39791. return res;
  39792. };
  39793. BN.prototype.gcd = function gcd (num) {
  39794. if (this.isZero()) return num.abs();
  39795. if (num.isZero()) return this.abs();
  39796. var a = this.clone();
  39797. var b = num.clone();
  39798. a.negative = 0;
  39799. b.negative = 0;
  39800. // Remove common factor of two
  39801. for (var shift = 0; a.isEven() && b.isEven(); shift++) {
  39802. a.iushrn(1);
  39803. b.iushrn(1);
  39804. }
  39805. do {
  39806. while (a.isEven()) {
  39807. a.iushrn(1);
  39808. }
  39809. while (b.isEven()) {
  39810. b.iushrn(1);
  39811. }
  39812. var r = a.cmp(b);
  39813. if (r < 0) {
  39814. // Swap `a` and `b` to make `a` always bigger than `b`
  39815. var t = a;
  39816. a = b;
  39817. b = t;
  39818. } else if (r === 0 || b.cmpn(1) === 0) {
  39819. break;
  39820. }
  39821. a.isub(b);
  39822. } while (true);
  39823. return b.iushln(shift);
  39824. };
  39825. // Invert number in the field F(num)
  39826. BN.prototype.invm = function invm (num) {
  39827. return this.egcd(num).a.umod(num);
  39828. };
  39829. BN.prototype.isEven = function isEven () {
  39830. return (this.words[0] & 1) === 0;
  39831. };
  39832. BN.prototype.isOdd = function isOdd () {
  39833. return (this.words[0] & 1) === 1;
  39834. };
  39835. // And first word and num
  39836. BN.prototype.andln = function andln (num) {
  39837. return this.words[0] & num;
  39838. };
  39839. // Increment at the bit position in-line
  39840. BN.prototype.bincn = function bincn (bit) {
  39841. assert(typeof bit === 'number');
  39842. var r = bit % 26;
  39843. var s = (bit - r) / 26;
  39844. var q = 1 << r;
  39845. // Fast case: bit is much higher than all existing words
  39846. if (this.length <= s) {
  39847. this._expand(s + 1);
  39848. this.words[s] |= q;
  39849. return this;
  39850. }
  39851. // Add bit and propagate, if needed
  39852. var carry = q;
  39853. for (var i = s; carry !== 0 && i < this.length; i++) {
  39854. var w = this.words[i] | 0;
  39855. w += carry;
  39856. carry = w >>> 26;
  39857. w &= 0x3ffffff;
  39858. this.words[i] = w;
  39859. }
  39860. if (carry !== 0) {
  39861. this.words[i] = carry;
  39862. this.length++;
  39863. }
  39864. return this;
  39865. };
  39866. BN.prototype.isZero = function isZero () {
  39867. return this.length === 1 && this.words[0] === 0;
  39868. };
  39869. BN.prototype.cmpn = function cmpn (num) {
  39870. var negative = num < 0;
  39871. if (this.negative !== 0 && !negative) return -1;
  39872. if (this.negative === 0 && negative) return 1;
  39873. this.strip();
  39874. var res;
  39875. if (this.length > 1) {
  39876. res = 1;
  39877. } else {
  39878. if (negative) {
  39879. num = -num;
  39880. }
  39881. assert(num <= 0x3ffffff, 'Number is too big');
  39882. var w = this.words[0] | 0;
  39883. res = w === num ? 0 : w < num ? -1 : 1;
  39884. }
  39885. if (this.negative !== 0) return -res | 0;
  39886. return res;
  39887. };
  39888. // Compare two numbers and return:
  39889. // 1 - if `this` > `num`
  39890. // 0 - if `this` == `num`
  39891. // -1 - if `this` < `num`
  39892. BN.prototype.cmp = function cmp (num) {
  39893. if (this.negative !== 0 && num.negative === 0) return -1;
  39894. if (this.negative === 0 && num.negative !== 0) return 1;
  39895. var res = this.ucmp(num);
  39896. if (this.negative !== 0) return -res | 0;
  39897. return res;
  39898. };
  39899. // Unsigned comparison
  39900. BN.prototype.ucmp = function ucmp (num) {
  39901. // At this point both numbers have the same sign
  39902. if (this.length > num.length) return 1;
  39903. if (this.length < num.length) return -1;
  39904. var res = 0;
  39905. for (var i = this.length - 1; i >= 0; i--) {
  39906. var a = this.words[i] | 0;
  39907. var b = num.words[i] | 0;
  39908. if (a === b) continue;
  39909. if (a < b) {
  39910. res = -1;
  39911. } else if (a > b) {
  39912. res = 1;
  39913. }
  39914. break;
  39915. }
  39916. return res;
  39917. };
  39918. BN.prototype.gtn = function gtn (num) {
  39919. return this.cmpn(num) === 1;
  39920. };
  39921. BN.prototype.gt = function gt (num) {
  39922. return this.cmp(num) === 1;
  39923. };
  39924. BN.prototype.gten = function gten (num) {
  39925. return this.cmpn(num) >= 0;
  39926. };
  39927. BN.prototype.gte = function gte (num) {
  39928. return this.cmp(num) >= 0;
  39929. };
  39930. BN.prototype.ltn = function ltn (num) {
  39931. return this.cmpn(num) === -1;
  39932. };
  39933. BN.prototype.lt = function lt (num) {
  39934. return this.cmp(num) === -1;
  39935. };
  39936. BN.prototype.lten = function lten (num) {
  39937. return this.cmpn(num) <= 0;
  39938. };
  39939. BN.prototype.lte = function lte (num) {
  39940. return this.cmp(num) <= 0;
  39941. };
  39942. BN.prototype.eqn = function eqn (num) {
  39943. return this.cmpn(num) === 0;
  39944. };
  39945. BN.prototype.eq = function eq (num) {
  39946. return this.cmp(num) === 0;
  39947. };
  39948. //
  39949. // A reduce context, could be using montgomery or something better, depending
  39950. // on the `m` itself.
  39951. //
  39952. BN.red = function red (num) {
  39953. return new Red(num);
  39954. };
  39955. BN.prototype.toRed = function toRed (ctx) {
  39956. assert(!this.red, 'Already a number in reduction context');
  39957. assert(this.negative === 0, 'red works only with positives');
  39958. return ctx.convertTo(this)._forceRed(ctx);
  39959. };
  39960. BN.prototype.fromRed = function fromRed () {
  39961. assert(this.red, 'fromRed works only with numbers in reduction context');
  39962. return this.red.convertFrom(this);
  39963. };
  39964. BN.prototype._forceRed = function _forceRed (ctx) {
  39965. this.red = ctx;
  39966. return this;
  39967. };
  39968. BN.prototype.forceRed = function forceRed (ctx) {
  39969. assert(!this.red, 'Already a number in reduction context');
  39970. return this._forceRed(ctx);
  39971. };
  39972. BN.prototype.redAdd = function redAdd (num) {
  39973. assert(this.red, 'redAdd works only with red numbers');
  39974. return this.red.add(this, num);
  39975. };
  39976. BN.prototype.redIAdd = function redIAdd (num) {
  39977. assert(this.red, 'redIAdd works only with red numbers');
  39978. return this.red.iadd(this, num);
  39979. };
  39980. BN.prototype.redSub = function redSub (num) {
  39981. assert(this.red, 'redSub works only with red numbers');
  39982. return this.red.sub(this, num);
  39983. };
  39984. BN.prototype.redISub = function redISub (num) {
  39985. assert(this.red, 'redISub works only with red numbers');
  39986. return this.red.isub(this, num);
  39987. };
  39988. BN.prototype.redShl = function redShl (num) {
  39989. assert(this.red, 'redShl works only with red numbers');
  39990. return this.red.shl(this, num);
  39991. };
  39992. BN.prototype.redMul = function redMul (num) {
  39993. assert(this.red, 'redMul works only with red numbers');
  39994. this.red._verify2(this, num);
  39995. return this.red.mul(this, num);
  39996. };
  39997. BN.prototype.redIMul = function redIMul (num) {
  39998. assert(this.red, 'redMul works only with red numbers');
  39999. this.red._verify2(this, num);
  40000. return this.red.imul(this, num);
  40001. };
  40002. BN.prototype.redSqr = function redSqr () {
  40003. assert(this.red, 'redSqr works only with red numbers');
  40004. this.red._verify1(this);
  40005. return this.red.sqr(this);
  40006. };
  40007. BN.prototype.redISqr = function redISqr () {
  40008. assert(this.red, 'redISqr works only with red numbers');
  40009. this.red._verify1(this);
  40010. return this.red.isqr(this);
  40011. };
  40012. // Square root over p
  40013. BN.prototype.redSqrt = function redSqrt () {
  40014. assert(this.red, 'redSqrt works only with red numbers');
  40015. this.red._verify1(this);
  40016. return this.red.sqrt(this);
  40017. };
  40018. BN.prototype.redInvm = function redInvm () {
  40019. assert(this.red, 'redInvm works only with red numbers');
  40020. this.red._verify1(this);
  40021. return this.red.invm(this);
  40022. };
  40023. // Return negative clone of `this` % `red modulo`
  40024. BN.prototype.redNeg = function redNeg () {
  40025. assert(this.red, 'redNeg works only with red numbers');
  40026. this.red._verify1(this);
  40027. return this.red.neg(this);
  40028. };
  40029. BN.prototype.redPow = function redPow (num) {
  40030. assert(this.red && !num.red, 'redPow(normalNum)');
  40031. this.red._verify1(this);
  40032. return this.red.pow(this, num);
  40033. };
  40034. // Prime numbers with efficient reduction
  40035. var primes = {
  40036. k256: null,
  40037. p224: null,
  40038. p192: null,
  40039. p25519: null
  40040. };
  40041. // Pseudo-Mersenne prime
  40042. function MPrime (name, p) {
  40043. // P = 2 ^ N - K
  40044. this.name = name;
  40045. this.p = new BN(p, 16);
  40046. this.n = this.p.bitLength();
  40047. this.k = new BN(1).iushln(this.n).isub(this.p);
  40048. this.tmp = this._tmp();
  40049. }
  40050. MPrime.prototype._tmp = function _tmp () {
  40051. var tmp = new BN(null);
  40052. tmp.words = new Array(Math.ceil(this.n / 13));
  40053. return tmp;
  40054. };
  40055. MPrime.prototype.ireduce = function ireduce (num) {
  40056. // Assumes that `num` is less than `P^2`
  40057. // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
  40058. var r = num;
  40059. var rlen;
  40060. do {
  40061. this.split(r, this.tmp);
  40062. r = this.imulK(r);
  40063. r = r.iadd(this.tmp);
  40064. rlen = r.bitLength();
  40065. } while (rlen > this.n);
  40066. var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
  40067. if (cmp === 0) {
  40068. r.words[0] = 0;
  40069. r.length = 1;
  40070. } else if (cmp > 0) {
  40071. r.isub(this.p);
  40072. } else {
  40073. if (r.strip !== undefined) {
  40074. // r is BN v4 instance
  40075. r.strip();
  40076. } else {
  40077. // r is BN v5 instance
  40078. r._strip();
  40079. }
  40080. }
  40081. return r;
  40082. };
  40083. MPrime.prototype.split = function split (input, out) {
  40084. input.iushrn(this.n, 0, out);
  40085. };
  40086. MPrime.prototype.imulK = function imulK (num) {
  40087. return num.imul(this.k);
  40088. };
  40089. function K256 () {
  40090. MPrime.call(
  40091. this,
  40092. 'k256',
  40093. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
  40094. }
  40095. inherits(K256, MPrime);
  40096. K256.prototype.split = function split (input, output) {
  40097. // 256 = 9 * 26 + 22
  40098. var mask = 0x3fffff;
  40099. var outLen = Math.min(input.length, 9);
  40100. for (var i = 0; i < outLen; i++) {
  40101. output.words[i] = input.words[i];
  40102. }
  40103. output.length = outLen;
  40104. if (input.length <= 9) {
  40105. input.words[0] = 0;
  40106. input.length = 1;
  40107. return;
  40108. }
  40109. // Shift by 9 limbs
  40110. var prev = input.words[9];
  40111. output.words[output.length++] = prev & mask;
  40112. for (i = 10; i < input.length; i++) {
  40113. var next = input.words[i] | 0;
  40114. input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
  40115. prev = next;
  40116. }
  40117. prev >>>= 22;
  40118. input.words[i - 10] = prev;
  40119. if (prev === 0 && input.length > 10) {
  40120. input.length -= 10;
  40121. } else {
  40122. input.length -= 9;
  40123. }
  40124. };
  40125. K256.prototype.imulK = function imulK (num) {
  40126. // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
  40127. num.words[num.length] = 0;
  40128. num.words[num.length + 1] = 0;
  40129. num.length += 2;
  40130. // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
  40131. var lo = 0;
  40132. for (var i = 0; i < num.length; i++) {
  40133. var w = num.words[i] | 0;
  40134. lo += w * 0x3d1;
  40135. num.words[i] = lo & 0x3ffffff;
  40136. lo = w * 0x40 + ((lo / 0x4000000) | 0);
  40137. }
  40138. // Fast length reduction
  40139. if (num.words[num.length - 1] === 0) {
  40140. num.length--;
  40141. if (num.words[num.length - 1] === 0) {
  40142. num.length--;
  40143. }
  40144. }
  40145. return num;
  40146. };
  40147. function P224 () {
  40148. MPrime.call(
  40149. this,
  40150. 'p224',
  40151. 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
  40152. }
  40153. inherits(P224, MPrime);
  40154. function P192 () {
  40155. MPrime.call(
  40156. this,
  40157. 'p192',
  40158. 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
  40159. }
  40160. inherits(P192, MPrime);
  40161. function P25519 () {
  40162. // 2 ^ 255 - 19
  40163. MPrime.call(
  40164. this,
  40165. '25519',
  40166. '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
  40167. }
  40168. inherits(P25519, MPrime);
  40169. P25519.prototype.imulK = function imulK (num) {
  40170. // K = 0x13
  40171. var carry = 0;
  40172. for (var i = 0; i < num.length; i++) {
  40173. var hi = (num.words[i] | 0) * 0x13 + carry;
  40174. var lo = hi & 0x3ffffff;
  40175. hi >>>= 26;
  40176. num.words[i] = lo;
  40177. carry = hi;
  40178. }
  40179. if (carry !== 0) {
  40180. num.words[num.length++] = carry;
  40181. }
  40182. return num;
  40183. };
  40184. // Exported mostly for testing purposes, use plain name instead
  40185. BN._prime = function prime (name) {
  40186. // Cached version of prime
  40187. if (primes[name]) return primes[name];
  40188. var prime;
  40189. if (name === 'k256') {
  40190. prime = new K256();
  40191. } else if (name === 'p224') {
  40192. prime = new P224();
  40193. } else if (name === 'p192') {
  40194. prime = new P192();
  40195. } else if (name === 'p25519') {
  40196. prime = new P25519();
  40197. } else {
  40198. throw new Error('Unknown prime ' + name);
  40199. }
  40200. primes[name] = prime;
  40201. return prime;
  40202. };
  40203. //
  40204. // Base reduction engine
  40205. //
  40206. function Red (m) {
  40207. if (typeof m === 'string') {
  40208. var prime = BN._prime(m);
  40209. this.m = prime.p;
  40210. this.prime = prime;
  40211. } else {
  40212. assert(m.gtn(1), 'modulus must be greater than 1');
  40213. this.m = m;
  40214. this.prime = null;
  40215. }
  40216. }
  40217. Red.prototype._verify1 = function _verify1 (a) {
  40218. assert(a.negative === 0, 'red works only with positives');
  40219. assert(a.red, 'red works only with red numbers');
  40220. };
  40221. Red.prototype._verify2 = function _verify2 (a, b) {
  40222. assert((a.negative | b.negative) === 0, 'red works only with positives');
  40223. assert(a.red && a.red === b.red,
  40224. 'red works only with red numbers');
  40225. };
  40226. Red.prototype.imod = function imod (a) {
  40227. if (this.prime) return this.prime.ireduce(a)._forceRed(this);
  40228. return a.umod(this.m)._forceRed(this);
  40229. };
  40230. Red.prototype.neg = function neg (a) {
  40231. if (a.isZero()) {
  40232. return a.clone();
  40233. }
  40234. return this.m.sub(a)._forceRed(this);
  40235. };
  40236. Red.prototype.add = function add (a, b) {
  40237. this._verify2(a, b);
  40238. var res = a.add(b);
  40239. if (res.cmp(this.m) >= 0) {
  40240. res.isub(this.m);
  40241. }
  40242. return res._forceRed(this);
  40243. };
  40244. Red.prototype.iadd = function iadd (a, b) {
  40245. this._verify2(a, b);
  40246. var res = a.iadd(b);
  40247. if (res.cmp(this.m) >= 0) {
  40248. res.isub(this.m);
  40249. }
  40250. return res;
  40251. };
  40252. Red.prototype.sub = function sub (a, b) {
  40253. this._verify2(a, b);
  40254. var res = a.sub(b);
  40255. if (res.cmpn(0) < 0) {
  40256. res.iadd(this.m);
  40257. }
  40258. return res._forceRed(this);
  40259. };
  40260. Red.prototype.isub = function isub (a, b) {
  40261. this._verify2(a, b);
  40262. var res = a.isub(b);
  40263. if (res.cmpn(0) < 0) {
  40264. res.iadd(this.m);
  40265. }
  40266. return res;
  40267. };
  40268. Red.prototype.shl = function shl (a, num) {
  40269. this._verify1(a);
  40270. return this.imod(a.ushln(num));
  40271. };
  40272. Red.prototype.imul = function imul (a, b) {
  40273. this._verify2(a, b);
  40274. return this.imod(a.imul(b));
  40275. };
  40276. Red.prototype.mul = function mul (a, b) {
  40277. this._verify2(a, b);
  40278. return this.imod(a.mul(b));
  40279. };
  40280. Red.prototype.isqr = function isqr (a) {
  40281. return this.imul(a, a.clone());
  40282. };
  40283. Red.prototype.sqr = function sqr (a) {
  40284. return this.mul(a, a);
  40285. };
  40286. Red.prototype.sqrt = function sqrt (a) {
  40287. if (a.isZero()) return a.clone();
  40288. var mod3 = this.m.andln(3);
  40289. assert(mod3 % 2 === 1);
  40290. // Fast case
  40291. if (mod3 === 3) {
  40292. var pow = this.m.add(new BN(1)).iushrn(2);
  40293. return this.pow(a, pow);
  40294. }
  40295. // Tonelli-Shanks algorithm (Totally unoptimized and slow)
  40296. //
  40297. // Find Q and S, that Q * 2 ^ S = (P - 1)
  40298. var q = this.m.subn(1);
  40299. var s = 0;
  40300. while (!q.isZero() && q.andln(1) === 0) {
  40301. s++;
  40302. q.iushrn(1);
  40303. }
  40304. assert(!q.isZero());
  40305. var one = new BN(1).toRed(this);
  40306. var nOne = one.redNeg();
  40307. // Find quadratic non-residue
  40308. // NOTE: Max is such because of generalized Riemann hypothesis.
  40309. var lpow = this.m.subn(1).iushrn(1);
  40310. var z = this.m.bitLength();
  40311. z = new BN(2 * z * z).toRed(this);
  40312. while (this.pow(z, lpow).cmp(nOne) !== 0) {
  40313. z.redIAdd(nOne);
  40314. }
  40315. var c = this.pow(z, q);
  40316. var r = this.pow(a, q.addn(1).iushrn(1));
  40317. var t = this.pow(a, q);
  40318. var m = s;
  40319. while (t.cmp(one) !== 0) {
  40320. var tmp = t;
  40321. for (var i = 0; tmp.cmp(one) !== 0; i++) {
  40322. tmp = tmp.redSqr();
  40323. }
  40324. assert(i < m);
  40325. var b = this.pow(c, new BN(1).iushln(m - i - 1));
  40326. r = r.redMul(b);
  40327. c = b.redSqr();
  40328. t = t.redMul(c);
  40329. m = i;
  40330. }
  40331. return r;
  40332. };
  40333. Red.prototype.invm = function invm (a) {
  40334. var inv = a._invmp(this.m);
  40335. if (inv.negative !== 0) {
  40336. inv.negative = 0;
  40337. return this.imod(inv).redNeg();
  40338. } else {
  40339. return this.imod(inv);
  40340. }
  40341. };
  40342. Red.prototype.pow = function pow (a, num) {
  40343. if (num.isZero()) return new BN(1).toRed(this);
  40344. if (num.cmpn(1) === 0) return a.clone();
  40345. var windowSize = 4;
  40346. var wnd = new Array(1 << windowSize);
  40347. wnd[0] = new BN(1).toRed(this);
  40348. wnd[1] = a;
  40349. for (var i = 2; i < wnd.length; i++) {
  40350. wnd[i] = this.mul(wnd[i - 1], a);
  40351. }
  40352. var res = wnd[0];
  40353. var current = 0;
  40354. var currentLen = 0;
  40355. var start = num.bitLength() % 26;
  40356. if (start === 0) {
  40357. start = 26;
  40358. }
  40359. for (i = num.length - 1; i >= 0; i--) {
  40360. var word = num.words[i];
  40361. for (var j = start - 1; j >= 0; j--) {
  40362. var bit = (word >> j) & 1;
  40363. if (res !== wnd[0]) {
  40364. res = this.sqr(res);
  40365. }
  40366. if (bit === 0 && current === 0) {
  40367. currentLen = 0;
  40368. continue;
  40369. }
  40370. current <<= 1;
  40371. current |= bit;
  40372. currentLen++;
  40373. if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
  40374. res = this.mul(res, wnd[current]);
  40375. currentLen = 0;
  40376. current = 0;
  40377. }
  40378. start = 26;
  40379. }
  40380. return res;
  40381. };
  40382. Red.prototype.convertTo = function convertTo (num) {
  40383. var r = num.umod(this.m);
  40384. return r === num ? r.clone() : r;
  40385. };
  40386. Red.prototype.convertFrom = function convertFrom (num) {
  40387. var res = num.clone();
  40388. res.red = null;
  40389. return res;
  40390. };
  40391. //
  40392. // Montgomery method engine
  40393. //
  40394. BN.mont = function mont (num) {
  40395. return new Mont(num);
  40396. };
  40397. function Mont (m) {
  40398. Red.call(this, m);
  40399. this.shift = this.m.bitLength();
  40400. if (this.shift % 26 !== 0) {
  40401. this.shift += 26 - (this.shift % 26);
  40402. }
  40403. this.r = new BN(1).iushln(this.shift);
  40404. this.r2 = this.imod(this.r.sqr());
  40405. this.rinv = this.r._invmp(this.m);
  40406. this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
  40407. this.minv = this.minv.umod(this.r);
  40408. this.minv = this.r.sub(this.minv);
  40409. }
  40410. inherits(Mont, Red);
  40411. Mont.prototype.convertTo = function convertTo (num) {
  40412. return this.imod(num.ushln(this.shift));
  40413. };
  40414. Mont.prototype.convertFrom = function convertFrom (num) {
  40415. var r = this.imod(num.mul(this.rinv));
  40416. r.red = null;
  40417. return r;
  40418. };
  40419. Mont.prototype.imul = function imul (a, b) {
  40420. if (a.isZero() || b.isZero()) {
  40421. a.words[0] = 0;
  40422. a.length = 1;
  40423. return a;
  40424. }
  40425. var t = a.imul(b);
  40426. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  40427. var u = t.isub(c).iushrn(this.shift);
  40428. var res = u;
  40429. if (u.cmp(this.m) >= 0) {
  40430. res = u.isub(this.m);
  40431. } else if (u.cmpn(0) < 0) {
  40432. res = u.iadd(this.m);
  40433. }
  40434. return res._forceRed(this);
  40435. };
  40436. Mont.prototype.mul = function mul (a, b) {
  40437. if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
  40438. var t = a.mul(b);
  40439. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  40440. var u = t.isub(c).iushrn(this.shift);
  40441. var res = u;
  40442. if (u.cmp(this.m) >= 0) {
  40443. res = u.isub(this.m);
  40444. } else if (u.cmpn(0) < 0) {
  40445. res = u.iadd(this.m);
  40446. }
  40447. return res._forceRed(this);
  40448. };
  40449. Mont.prototype.invm = function invm (a) {
  40450. // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
  40451. var res = this.imod(a._invmp(this.m).mul(this.r2));
  40452. return res._forceRed(this);
  40453. };
  40454. })( false || module, this);
  40455. /***/ }),
  40456. /***/ 8091:
  40457. /***/ ((module) => {
  40458. "use strict";
  40459. /**
  40460. * Code refactored from Mozilla Developer Network:
  40461. * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
  40462. */
  40463. function assign(target, firstSource) {
  40464. if (target === undefined || target === null) {
  40465. throw new TypeError('Cannot convert first argument to object');
  40466. }
  40467. var to = Object(target);
  40468. for (var i = 1; i < arguments.length; i++) {
  40469. var nextSource = arguments[i];
  40470. if (nextSource === undefined || nextSource === null) {
  40471. continue;
  40472. }
  40473. var keysArray = Object.keys(Object(nextSource));
  40474. for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
  40475. var nextKey = keysArray[nextIndex];
  40476. var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
  40477. if (desc !== undefined && desc.enumerable) {
  40478. to[nextKey] = nextSource[nextKey];
  40479. }
  40480. }
  40481. }
  40482. return to;
  40483. }
  40484. function polyfill() {
  40485. if (!Object.assign) {
  40486. Object.defineProperty(Object, 'assign', {
  40487. enumerable: false,
  40488. configurable: true,
  40489. writable: true,
  40490. value: assign
  40491. });
  40492. }
  40493. }
  40494. module.exports = {
  40495. assign: assign,
  40496. polyfill: polyfill
  40497. };
  40498. /***/ }),
  40499. /***/ 17187:
  40500. /***/ ((module) => {
  40501. "use strict";
  40502. // Copyright Joyent, Inc. and other Node contributors.
  40503. //
  40504. // Permission is hereby granted, free of charge, to any person obtaining a
  40505. // copy of this software and associated documentation files (the
  40506. // "Software"), to deal in the Software without restriction, including
  40507. // without limitation the rights to use, copy, modify, merge, publish,
  40508. // distribute, sublicense, and/or sell copies of the Software, and to permit
  40509. // persons to whom the Software is furnished to do so, subject to the
  40510. // following conditions:
  40511. //
  40512. // The above copyright notice and this permission notice shall be included
  40513. // in all copies or substantial portions of the Software.
  40514. //
  40515. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  40516. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  40517. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  40518. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  40519. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  40520. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  40521. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  40522. var R = typeof Reflect === 'object' ? Reflect : null
  40523. var ReflectApply = R && typeof R.apply === 'function'
  40524. ? R.apply
  40525. : function ReflectApply(target, receiver, args) {
  40526. return Function.prototype.apply.call(target, receiver, args);
  40527. }
  40528. var ReflectOwnKeys
  40529. if (R && typeof R.ownKeys === 'function') {
  40530. ReflectOwnKeys = R.ownKeys
  40531. } else if (Object.getOwnPropertySymbols) {
  40532. ReflectOwnKeys = function ReflectOwnKeys(target) {
  40533. return Object.getOwnPropertyNames(target)
  40534. .concat(Object.getOwnPropertySymbols(target));
  40535. };
  40536. } else {
  40537. ReflectOwnKeys = function ReflectOwnKeys(target) {
  40538. return Object.getOwnPropertyNames(target);
  40539. };
  40540. }
  40541. function ProcessEmitWarning(warning) {
  40542. if (console && console.warn) console.warn(warning);
  40543. }
  40544. var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
  40545. return value !== value;
  40546. }
  40547. function EventEmitter() {
  40548. EventEmitter.init.call(this);
  40549. }
  40550. module.exports = EventEmitter;
  40551. module.exports.once = once;
  40552. // Backwards-compat with node 0.10.x
  40553. EventEmitter.EventEmitter = EventEmitter;
  40554. EventEmitter.prototype._events = undefined;
  40555. EventEmitter.prototype._eventsCount = 0;
  40556. EventEmitter.prototype._maxListeners = undefined;
  40557. // By default EventEmitters will print a warning if more than 10 listeners are
  40558. // added to it. This is a useful default which helps finding memory leaks.
  40559. var defaultMaxListeners = 10;
  40560. function checkListener(listener) {
  40561. if (typeof listener !== 'function') {
  40562. throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
  40563. }
  40564. }
  40565. Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
  40566. enumerable: true,
  40567. get: function() {
  40568. return defaultMaxListeners;
  40569. },
  40570. set: function(arg) {
  40571. if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
  40572. throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
  40573. }
  40574. defaultMaxListeners = arg;
  40575. }
  40576. });
  40577. EventEmitter.init = function() {
  40578. if (this._events === undefined ||
  40579. this._events === Object.getPrototypeOf(this)._events) {
  40580. this._events = Object.create(null);
  40581. this._eventsCount = 0;
  40582. }
  40583. this._maxListeners = this._maxListeners || undefined;
  40584. };
  40585. // Obviously not all Emitters should be limited to 10. This function allows
  40586. // that to be increased. Set to zero for unlimited.
  40587. EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
  40588. if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
  40589. throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
  40590. }
  40591. this._maxListeners = n;
  40592. return this;
  40593. };
  40594. function _getMaxListeners(that) {
  40595. if (that._maxListeners === undefined)
  40596. return EventEmitter.defaultMaxListeners;
  40597. return that._maxListeners;
  40598. }
  40599. EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
  40600. return _getMaxListeners(this);
  40601. };
  40602. EventEmitter.prototype.emit = function emit(type) {
  40603. var args = [];
  40604. for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
  40605. var doError = (type === 'error');
  40606. var events = this._events;
  40607. if (events !== undefined)
  40608. doError = (doError && events.error === undefined);
  40609. else if (!doError)
  40610. return false;
  40611. // If there is no 'error' event listener then throw.
  40612. if (doError) {
  40613. var er;
  40614. if (args.length > 0)
  40615. er = args[0];
  40616. if (er instanceof Error) {
  40617. // Note: The comments on the `throw` lines are intentional, they show
  40618. // up in Node's output if this results in an unhandled exception.
  40619. throw er; // Unhandled 'error' event
  40620. }
  40621. // At least give some kind of context to the user
  40622. var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
  40623. err.context = er;
  40624. throw err; // Unhandled 'error' event
  40625. }
  40626. var handler = events[type];
  40627. if (handler === undefined)
  40628. return false;
  40629. if (typeof handler === 'function') {
  40630. ReflectApply(handler, this, args);
  40631. } else {
  40632. var len = handler.length;
  40633. var listeners = arrayClone(handler, len);
  40634. for (var i = 0; i < len; ++i)
  40635. ReflectApply(listeners[i], this, args);
  40636. }
  40637. return true;
  40638. };
  40639. function _addListener(target, type, listener, prepend) {
  40640. var m;
  40641. var events;
  40642. var existing;
  40643. checkListener(listener);
  40644. events = target._events;
  40645. if (events === undefined) {
  40646. events = target._events = Object.create(null);
  40647. target._eventsCount = 0;
  40648. } else {
  40649. // To avoid recursion in the case that type === "newListener"! Before
  40650. // adding it to the listeners, first emit "newListener".
  40651. if (events.newListener !== undefined) {
  40652. target.emit('newListener', type,
  40653. listener.listener ? listener.listener : listener);
  40654. // Re-assign `events` because a newListener handler could have caused the
  40655. // this._events to be assigned to a new object
  40656. events = target._events;
  40657. }
  40658. existing = events[type];
  40659. }
  40660. if (existing === undefined) {
  40661. // Optimize the case of one listener. Don't need the extra array object.
  40662. existing = events[type] = listener;
  40663. ++target._eventsCount;
  40664. } else {
  40665. if (typeof existing === 'function') {
  40666. // Adding the second element, need to change to array.
  40667. existing = events[type] =
  40668. prepend ? [listener, existing] : [existing, listener];
  40669. // If we've already got an array, just append.
  40670. } else if (prepend) {
  40671. existing.unshift(listener);
  40672. } else {
  40673. existing.push(listener);
  40674. }
  40675. // Check for listener leak
  40676. m = _getMaxListeners(target);
  40677. if (m > 0 && existing.length > m && !existing.warned) {
  40678. existing.warned = true;
  40679. // No error code for this since it is a Warning
  40680. // eslint-disable-next-line no-restricted-syntax
  40681. var w = new Error('Possible EventEmitter memory leak detected. ' +
  40682. existing.length + ' ' + String(type) + ' listeners ' +
  40683. 'added. Use emitter.setMaxListeners() to ' +
  40684. 'increase limit');
  40685. w.name = 'MaxListenersExceededWarning';
  40686. w.emitter = target;
  40687. w.type = type;
  40688. w.count = existing.length;
  40689. ProcessEmitWarning(w);
  40690. }
  40691. }
  40692. return target;
  40693. }
  40694. EventEmitter.prototype.addListener = function addListener(type, listener) {
  40695. return _addListener(this, type, listener, false);
  40696. };
  40697. EventEmitter.prototype.on = EventEmitter.prototype.addListener;
  40698. EventEmitter.prototype.prependListener =
  40699. function prependListener(type, listener) {
  40700. return _addListener(this, type, listener, true);
  40701. };
  40702. function onceWrapper() {
  40703. if (!this.fired) {
  40704. this.target.removeListener(this.type, this.wrapFn);
  40705. this.fired = true;
  40706. if (arguments.length === 0)
  40707. return this.listener.call(this.target);
  40708. return this.listener.apply(this.target, arguments);
  40709. }
  40710. }
  40711. function _onceWrap(target, type, listener) {
  40712. var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
  40713. var wrapped = onceWrapper.bind(state);
  40714. wrapped.listener = listener;
  40715. state.wrapFn = wrapped;
  40716. return wrapped;
  40717. }
  40718. EventEmitter.prototype.once = function once(type, listener) {
  40719. checkListener(listener);
  40720. this.on(type, _onceWrap(this, type, listener));
  40721. return this;
  40722. };
  40723. EventEmitter.prototype.prependOnceListener =
  40724. function prependOnceListener(type, listener) {
  40725. checkListener(listener);
  40726. this.prependListener(type, _onceWrap(this, type, listener));
  40727. return this;
  40728. };
  40729. // Emits a 'removeListener' event if and only if the listener was removed.
  40730. EventEmitter.prototype.removeListener =
  40731. function removeListener(type, listener) {
  40732. var list, events, position, i, originalListener;
  40733. checkListener(listener);
  40734. events = this._events;
  40735. if (events === undefined)
  40736. return this;
  40737. list = events[type];
  40738. if (list === undefined)
  40739. return this;
  40740. if (list === listener || list.listener === listener) {
  40741. if (--this._eventsCount === 0)
  40742. this._events = Object.create(null);
  40743. else {
  40744. delete events[type];
  40745. if (events.removeListener)
  40746. this.emit('removeListener', type, list.listener || listener);
  40747. }
  40748. } else if (typeof list !== 'function') {
  40749. position = -1;
  40750. for (i = list.length - 1; i >= 0; i--) {
  40751. if (list[i] === listener || list[i].listener === listener) {
  40752. originalListener = list[i].listener;
  40753. position = i;
  40754. break;
  40755. }
  40756. }
  40757. if (position < 0)
  40758. return this;
  40759. if (position === 0)
  40760. list.shift();
  40761. else {
  40762. spliceOne(list, position);
  40763. }
  40764. if (list.length === 1)
  40765. events[type] = list[0];
  40766. if (events.removeListener !== undefined)
  40767. this.emit('removeListener', type, originalListener || listener);
  40768. }
  40769. return this;
  40770. };
  40771. EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
  40772. EventEmitter.prototype.removeAllListeners =
  40773. function removeAllListeners(type) {
  40774. var listeners, events, i;
  40775. events = this._events;
  40776. if (events === undefined)
  40777. return this;
  40778. // not listening for removeListener, no need to emit
  40779. if (events.removeListener === undefined) {
  40780. if (arguments.length === 0) {
  40781. this._events = Object.create(null);
  40782. this._eventsCount = 0;
  40783. } else if (events[type] !== undefined) {
  40784. if (--this._eventsCount === 0)
  40785. this._events = Object.create(null);
  40786. else
  40787. delete events[type];
  40788. }
  40789. return this;
  40790. }
  40791. // emit removeListener for all listeners on all events
  40792. if (arguments.length === 0) {
  40793. var keys = Object.keys(events);
  40794. var key;
  40795. for (i = 0; i < keys.length; ++i) {
  40796. key = keys[i];
  40797. if (key === 'removeListener') continue;
  40798. this.removeAllListeners(key);
  40799. }
  40800. this.removeAllListeners('removeListener');
  40801. this._events = Object.create(null);
  40802. this._eventsCount = 0;
  40803. return this;
  40804. }
  40805. listeners = events[type];
  40806. if (typeof listeners === 'function') {
  40807. this.removeListener(type, listeners);
  40808. } else if (listeners !== undefined) {
  40809. // LIFO order
  40810. for (i = listeners.length - 1; i >= 0; i--) {
  40811. this.removeListener(type, listeners[i]);
  40812. }
  40813. }
  40814. return this;
  40815. };
  40816. function _listeners(target, type, unwrap) {
  40817. var events = target._events;
  40818. if (events === undefined)
  40819. return [];
  40820. var evlistener = events[type];
  40821. if (evlistener === undefined)
  40822. return [];
  40823. if (typeof evlistener === 'function')
  40824. return unwrap ? [evlistener.listener || evlistener] : [evlistener];
  40825. return unwrap ?
  40826. unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
  40827. }
  40828. EventEmitter.prototype.listeners = function listeners(type) {
  40829. return _listeners(this, type, true);
  40830. };
  40831. EventEmitter.prototype.rawListeners = function rawListeners(type) {
  40832. return _listeners(this, type, false);
  40833. };
  40834. EventEmitter.listenerCount = function(emitter, type) {
  40835. if (typeof emitter.listenerCount === 'function') {
  40836. return emitter.listenerCount(type);
  40837. } else {
  40838. return listenerCount.call(emitter, type);
  40839. }
  40840. };
  40841. EventEmitter.prototype.listenerCount = listenerCount;
  40842. function listenerCount(type) {
  40843. var events = this._events;
  40844. if (events !== undefined) {
  40845. var evlistener = events[type];
  40846. if (typeof evlistener === 'function') {
  40847. return 1;
  40848. } else if (evlistener !== undefined) {
  40849. return evlistener.length;
  40850. }
  40851. }
  40852. return 0;
  40853. }
  40854. EventEmitter.prototype.eventNames = function eventNames() {
  40855. return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
  40856. };
  40857. function arrayClone(arr, n) {
  40858. var copy = new Array(n);
  40859. for (var i = 0; i < n; ++i)
  40860. copy[i] = arr[i];
  40861. return copy;
  40862. }
  40863. function spliceOne(list, index) {
  40864. for (; index + 1 < list.length; index++)
  40865. list[index] = list[index + 1];
  40866. list.pop();
  40867. }
  40868. function unwrapListeners(arr) {
  40869. var ret = new Array(arr.length);
  40870. for (var i = 0; i < ret.length; ++i) {
  40871. ret[i] = arr[i].listener || arr[i];
  40872. }
  40873. return ret;
  40874. }
  40875. function once(emitter, name) {
  40876. return new Promise(function (resolve, reject) {
  40877. function errorListener(err) {
  40878. emitter.removeListener(name, resolver);
  40879. reject(err);
  40880. }
  40881. function resolver() {
  40882. if (typeof emitter.removeListener === 'function') {
  40883. emitter.removeListener('error', errorListener);
  40884. }
  40885. resolve([].slice.call(arguments));
  40886. };
  40887. eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
  40888. if (name !== 'error') {
  40889. addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
  40890. }
  40891. });
  40892. }
  40893. function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
  40894. if (typeof emitter.on === 'function') {
  40895. eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
  40896. }
  40897. }
  40898. function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
  40899. if (typeof emitter.on === 'function') {
  40900. if (flags.once) {
  40901. emitter.once(name, listener);
  40902. } else {
  40903. emitter.on(name, listener);
  40904. }
  40905. } else if (typeof emitter.addEventListener === 'function') {
  40906. // EventTarget does not have `error` event semantics like Node
  40907. // EventEmitters, we do not listen for `error` events here.
  40908. emitter.addEventListener(name, function wrapListener(arg) {
  40909. // IE does not have builtin `{ once: true }` support so we
  40910. // have to do it manually.
  40911. if (flags.once) {
  40912. emitter.removeEventListener(name, wrapListener);
  40913. }
  40914. listener(arg);
  40915. });
  40916. } else {
  40917. throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
  40918. }
  40919. }
  40920. /***/ }),
  40921. /***/ 13048:
  40922. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  40923. var Buffer = (__webpack_require__(89509).Buffer)
  40924. var MD5 = __webpack_require__(62318)
  40925. /* eslint-disable camelcase */
  40926. function EVP_BytesToKey (password, salt, keyBits, ivLen) {
  40927. if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
  40928. if (salt) {
  40929. if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
  40930. if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
  40931. }
  40932. var keyLen = keyBits / 8
  40933. var key = Buffer.alloc(keyLen)
  40934. var iv = Buffer.alloc(ivLen || 0)
  40935. var tmp = Buffer.alloc(0)
  40936. while (keyLen > 0 || ivLen > 0) {
  40937. var hash = new MD5()
  40938. hash.update(tmp)
  40939. hash.update(password)
  40940. if (salt) hash.update(salt)
  40941. tmp = hash.digest()
  40942. var used = 0
  40943. if (keyLen > 0) {
  40944. var keyStart = key.length - keyLen
  40945. used = Math.min(keyLen, tmp.length)
  40946. tmp.copy(key, keyStart, 0, used)
  40947. keyLen -= used
  40948. }
  40949. if (used < tmp.length && ivLen > 0) {
  40950. var ivStart = iv.length - ivLen
  40951. var length = Math.min(ivLen, tmp.length - used)
  40952. tmp.copy(iv, ivStart, used, used + length)
  40953. ivLen -= length
  40954. }
  40955. }
  40956. tmp.fill(0)
  40957. return { key: key, iv: iv }
  40958. }
  40959. module.exports = EVP_BytesToKey
  40960. /***/ }),
  40961. /***/ 49804:
  40962. /***/ ((module) => {
  40963. var hasOwn = Object.prototype.hasOwnProperty;
  40964. var toString = Object.prototype.toString;
  40965. module.exports = function forEach (obj, fn, ctx) {
  40966. if (toString.call(fn) !== '[object Function]') {
  40967. throw new TypeError('iterator must be a function');
  40968. }
  40969. var l = obj.length;
  40970. if (l === +l) {
  40971. for (var i = 0; i < l; i++) {
  40972. fn.call(ctx, obj[i], i, obj);
  40973. }
  40974. } else {
  40975. for (var k in obj) {
  40976. if (hasOwn.call(obj, k)) {
  40977. fn.call(ctx, obj[k], k, obj);
  40978. }
  40979. }
  40980. }
  40981. };
  40982. /***/ }),
  40983. /***/ 17648:
  40984. /***/ ((module) => {
  40985. "use strict";
  40986. /* eslint no-invalid-this: 1 */
  40987. var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
  40988. var slice = Array.prototype.slice;
  40989. var toStr = Object.prototype.toString;
  40990. var funcType = '[object Function]';
  40991. module.exports = function bind(that) {
  40992. var target = this;
  40993. if (typeof target !== 'function' || toStr.call(target) !== funcType) {
  40994. throw new TypeError(ERROR_MESSAGE + target);
  40995. }
  40996. var args = slice.call(arguments, 1);
  40997. var bound;
  40998. var binder = function () {
  40999. if (this instanceof bound) {
  41000. var result = target.apply(
  41001. this,
  41002. args.concat(slice.call(arguments))
  41003. );
  41004. if (Object(result) === result) {
  41005. return result;
  41006. }
  41007. return this;
  41008. } else {
  41009. return target.apply(
  41010. that,
  41011. args.concat(slice.call(arguments))
  41012. );
  41013. }
  41014. };
  41015. var boundLength = Math.max(0, target.length - args.length);
  41016. var boundArgs = [];
  41017. for (var i = 0; i < boundLength; i++) {
  41018. boundArgs.push('$' + i);
  41019. }
  41020. bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
  41021. if (target.prototype) {
  41022. var Empty = function Empty() {};
  41023. Empty.prototype = target.prototype;
  41024. bound.prototype = new Empty();
  41025. Empty.prototype = null;
  41026. }
  41027. return bound;
  41028. };
  41029. /***/ }),
  41030. /***/ 58612:
  41031. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41032. "use strict";
  41033. var implementation = __webpack_require__(17648);
  41034. module.exports = Function.prototype.bind || implementation;
  41035. /***/ }),
  41036. /***/ 40210:
  41037. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41038. "use strict";
  41039. var undefined;
  41040. var $SyntaxError = SyntaxError;
  41041. var $Function = Function;
  41042. var $TypeError = TypeError;
  41043. // eslint-disable-next-line consistent-return
  41044. var getEvalledConstructor = function (expressionSyntax) {
  41045. try {
  41046. return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
  41047. } catch (e) {}
  41048. };
  41049. var $gOPD = Object.getOwnPropertyDescriptor;
  41050. if ($gOPD) {
  41051. try {
  41052. $gOPD({}, '');
  41053. } catch (e) {
  41054. $gOPD = null; // this is IE 8, which has a broken gOPD
  41055. }
  41056. }
  41057. var throwTypeError = function () {
  41058. throw new $TypeError();
  41059. };
  41060. var ThrowTypeError = $gOPD
  41061. ? (function () {
  41062. try {
  41063. // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
  41064. arguments.callee; // IE 8 does not throw here
  41065. return throwTypeError;
  41066. } catch (calleeThrows) {
  41067. try {
  41068. // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
  41069. return $gOPD(arguments, 'callee').get;
  41070. } catch (gOPDthrows) {
  41071. return throwTypeError;
  41072. }
  41073. }
  41074. }())
  41075. : throwTypeError;
  41076. var hasSymbols = __webpack_require__(41405)();
  41077. var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
  41078. var needsEval = {};
  41079. var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);
  41080. var INTRINSICS = {
  41081. '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
  41082. '%Array%': Array,
  41083. '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
  41084. '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,
  41085. '%AsyncFromSyncIteratorPrototype%': undefined,
  41086. '%AsyncFunction%': needsEval,
  41087. '%AsyncGenerator%': needsEval,
  41088. '%AsyncGeneratorFunction%': needsEval,
  41089. '%AsyncIteratorPrototype%': needsEval,
  41090. '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
  41091. '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
  41092. '%Boolean%': Boolean,
  41093. '%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
  41094. '%Date%': Date,
  41095. '%decodeURI%': decodeURI,
  41096. '%decodeURIComponent%': decodeURIComponent,
  41097. '%encodeURI%': encodeURI,
  41098. '%encodeURIComponent%': encodeURIComponent,
  41099. '%Error%': Error,
  41100. '%eval%': eval, // eslint-disable-line no-eval
  41101. '%EvalError%': EvalError,
  41102. '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
  41103. '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
  41104. '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
  41105. '%Function%': $Function,
  41106. '%GeneratorFunction%': needsEval,
  41107. '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
  41108. '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
  41109. '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
  41110. '%isFinite%': isFinite,
  41111. '%isNaN%': isNaN,
  41112. '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,
  41113. '%JSON%': typeof JSON === 'object' ? JSON : undefined,
  41114. '%Map%': typeof Map === 'undefined' ? undefined : Map,
  41115. '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),
  41116. '%Math%': Math,
  41117. '%Number%': Number,
  41118. '%Object%': Object,
  41119. '%parseFloat%': parseFloat,
  41120. '%parseInt%': parseInt,
  41121. '%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
  41122. '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
  41123. '%RangeError%': RangeError,
  41124. '%ReferenceError%': ReferenceError,
  41125. '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
  41126. '%RegExp%': RegExp,
  41127. '%Set%': typeof Set === 'undefined' ? undefined : Set,
  41128. '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),
  41129. '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
  41130. '%String%': String,
  41131. '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,
  41132. '%Symbol%': hasSymbols ? Symbol : undefined,
  41133. '%SyntaxError%': $SyntaxError,
  41134. '%ThrowTypeError%': ThrowTypeError,
  41135. '%TypedArray%': TypedArray,
  41136. '%TypeError%': $TypeError,
  41137. '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
  41138. '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
  41139. '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
  41140. '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
  41141. '%URIError%': URIError,
  41142. '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
  41143. '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
  41144. '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet
  41145. };
  41146. var doEval = function doEval(name) {
  41147. var value;
  41148. if (name === '%AsyncFunction%') {
  41149. value = getEvalledConstructor('async function () {}');
  41150. } else if (name === '%GeneratorFunction%') {
  41151. value = getEvalledConstructor('function* () {}');
  41152. } else if (name === '%AsyncGeneratorFunction%') {
  41153. value = getEvalledConstructor('async function* () {}');
  41154. } else if (name === '%AsyncGenerator%') {
  41155. var fn = doEval('%AsyncGeneratorFunction%');
  41156. if (fn) {
  41157. value = fn.prototype;
  41158. }
  41159. } else if (name === '%AsyncIteratorPrototype%') {
  41160. var gen = doEval('%AsyncGenerator%');
  41161. if (gen) {
  41162. value = getProto(gen.prototype);
  41163. }
  41164. }
  41165. INTRINSICS[name] = value;
  41166. return value;
  41167. };
  41168. var LEGACY_ALIASES = {
  41169. '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
  41170. '%ArrayPrototype%': ['Array', 'prototype'],
  41171. '%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
  41172. '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
  41173. '%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
  41174. '%ArrayProto_values%': ['Array', 'prototype', 'values'],
  41175. '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
  41176. '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
  41177. '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
  41178. '%BooleanPrototype%': ['Boolean', 'prototype'],
  41179. '%DataViewPrototype%': ['DataView', 'prototype'],
  41180. '%DatePrototype%': ['Date', 'prototype'],
  41181. '%ErrorPrototype%': ['Error', 'prototype'],
  41182. '%EvalErrorPrototype%': ['EvalError', 'prototype'],
  41183. '%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
  41184. '%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
  41185. '%FunctionPrototype%': ['Function', 'prototype'],
  41186. '%Generator%': ['GeneratorFunction', 'prototype'],
  41187. '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
  41188. '%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
  41189. '%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
  41190. '%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
  41191. '%JSONParse%': ['JSON', 'parse'],
  41192. '%JSONStringify%': ['JSON', 'stringify'],
  41193. '%MapPrototype%': ['Map', 'prototype'],
  41194. '%NumberPrototype%': ['Number', 'prototype'],
  41195. '%ObjectPrototype%': ['Object', 'prototype'],
  41196. '%ObjProto_toString%': ['Object', 'prototype', 'toString'],
  41197. '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
  41198. '%PromisePrototype%': ['Promise', 'prototype'],
  41199. '%PromiseProto_then%': ['Promise', 'prototype', 'then'],
  41200. '%Promise_all%': ['Promise', 'all'],
  41201. '%Promise_reject%': ['Promise', 'reject'],
  41202. '%Promise_resolve%': ['Promise', 'resolve'],
  41203. '%RangeErrorPrototype%': ['RangeError', 'prototype'],
  41204. '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
  41205. '%RegExpPrototype%': ['RegExp', 'prototype'],
  41206. '%SetPrototype%': ['Set', 'prototype'],
  41207. '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
  41208. '%StringPrototype%': ['String', 'prototype'],
  41209. '%SymbolPrototype%': ['Symbol', 'prototype'],
  41210. '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
  41211. '%TypedArrayPrototype%': ['TypedArray', 'prototype'],
  41212. '%TypeErrorPrototype%': ['TypeError', 'prototype'],
  41213. '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
  41214. '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
  41215. '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
  41216. '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
  41217. '%URIErrorPrototype%': ['URIError', 'prototype'],
  41218. '%WeakMapPrototype%': ['WeakMap', 'prototype'],
  41219. '%WeakSetPrototype%': ['WeakSet', 'prototype']
  41220. };
  41221. var bind = __webpack_require__(58612);
  41222. var hasOwn = __webpack_require__(17642);
  41223. var $concat = bind.call(Function.call, Array.prototype.concat);
  41224. var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
  41225. var $replace = bind.call(Function.call, String.prototype.replace);
  41226. var $strSlice = bind.call(Function.call, String.prototype.slice);
  41227. /* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
  41228. var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
  41229. var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
  41230. var stringToPath = function stringToPath(string) {
  41231. var first = $strSlice(string, 0, 1);
  41232. var last = $strSlice(string, -1);
  41233. if (first === '%' && last !== '%') {
  41234. throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
  41235. } else if (last === '%' && first !== '%') {
  41236. throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
  41237. }
  41238. var result = [];
  41239. $replace(string, rePropName, function (match, number, quote, subString) {
  41240. result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
  41241. });
  41242. return result;
  41243. };
  41244. /* end adaptation */
  41245. var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
  41246. var intrinsicName = name;
  41247. var alias;
  41248. if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
  41249. alias = LEGACY_ALIASES[intrinsicName];
  41250. intrinsicName = '%' + alias[0] + '%';
  41251. }
  41252. if (hasOwn(INTRINSICS, intrinsicName)) {
  41253. var value = INTRINSICS[intrinsicName];
  41254. if (value === needsEval) {
  41255. value = doEval(intrinsicName);
  41256. }
  41257. if (typeof value === 'undefined' && !allowMissing) {
  41258. throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
  41259. }
  41260. return {
  41261. alias: alias,
  41262. name: intrinsicName,
  41263. value: value
  41264. };
  41265. }
  41266. throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
  41267. };
  41268. module.exports = function GetIntrinsic(name, allowMissing) {
  41269. if (typeof name !== 'string' || name.length === 0) {
  41270. throw new $TypeError('intrinsic name must be a non-empty string');
  41271. }
  41272. if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
  41273. throw new $TypeError('"allowMissing" argument must be a boolean');
  41274. }
  41275. var parts = stringToPath(name);
  41276. var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
  41277. var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
  41278. var intrinsicRealName = intrinsic.name;
  41279. var value = intrinsic.value;
  41280. var skipFurtherCaching = false;
  41281. var alias = intrinsic.alias;
  41282. if (alias) {
  41283. intrinsicBaseName = alias[0];
  41284. $spliceApply(parts, $concat([0, 1], alias));
  41285. }
  41286. for (var i = 1, isOwn = true; i < parts.length; i += 1) {
  41287. var part = parts[i];
  41288. var first = $strSlice(part, 0, 1);
  41289. var last = $strSlice(part, -1);
  41290. if (
  41291. (
  41292. (first === '"' || first === "'" || first === '`')
  41293. || (last === '"' || last === "'" || last === '`')
  41294. )
  41295. && first !== last
  41296. ) {
  41297. throw new $SyntaxError('property names with quotes must have matching quotes');
  41298. }
  41299. if (part === 'constructor' || !isOwn) {
  41300. skipFurtherCaching = true;
  41301. }
  41302. intrinsicBaseName += '.' + part;
  41303. intrinsicRealName = '%' + intrinsicBaseName + '%';
  41304. if (hasOwn(INTRINSICS, intrinsicRealName)) {
  41305. value = INTRINSICS[intrinsicRealName];
  41306. } else if (value != null) {
  41307. if (!(part in value)) {
  41308. if (!allowMissing) {
  41309. throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
  41310. }
  41311. return void undefined;
  41312. }
  41313. if ($gOPD && (i + 1) >= parts.length) {
  41314. var desc = $gOPD(value, part);
  41315. isOwn = !!desc;
  41316. // By convention, when a data property is converted to an accessor
  41317. // property to emulate a data property that does not suffer from
  41318. // the override mistake, that accessor's getter is marked with
  41319. // an `originalValue` property. Here, when we detect this, we
  41320. // uphold the illusion by pretending to see that original data
  41321. // property, i.e., returning the value rather than the getter
  41322. // itself.
  41323. if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
  41324. value = desc.get;
  41325. } else {
  41326. value = value[part];
  41327. }
  41328. } else {
  41329. isOwn = hasOwn(value, part);
  41330. value = value[part];
  41331. }
  41332. if (isOwn && !skipFurtherCaching) {
  41333. INTRINSICS[intrinsicRealName] = value;
  41334. }
  41335. }
  41336. }
  41337. return value;
  41338. };
  41339. /***/ }),
  41340. /***/ 41405:
  41341. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41342. "use strict";
  41343. var origSymbol = typeof Symbol !== 'undefined' && Symbol;
  41344. var hasSymbolSham = __webpack_require__(55419);
  41345. module.exports = function hasNativeSymbols() {
  41346. if (typeof origSymbol !== 'function') { return false; }
  41347. if (typeof Symbol !== 'function') { return false; }
  41348. if (typeof origSymbol('foo') !== 'symbol') { return false; }
  41349. if (typeof Symbol('bar') !== 'symbol') { return false; }
  41350. return hasSymbolSham();
  41351. };
  41352. /***/ }),
  41353. /***/ 55419:
  41354. /***/ ((module) => {
  41355. "use strict";
  41356. /* eslint complexity: [2, 18], max-statements: [2, 33] */
  41357. module.exports = function hasSymbols() {
  41358. if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
  41359. if (typeof Symbol.iterator === 'symbol') { return true; }
  41360. var obj = {};
  41361. var sym = Symbol('test');
  41362. var symObj = Object(sym);
  41363. if (typeof sym === 'string') { return false; }
  41364. if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
  41365. if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
  41366. // temp disabled per https://github.com/ljharb/object.assign/issues/17
  41367. // if (sym instanceof Symbol) { return false; }
  41368. // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
  41369. // if (!(symObj instanceof Symbol)) { return false; }
  41370. // if (typeof Symbol.prototype.toString !== 'function') { return false; }
  41371. // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
  41372. var symVal = 42;
  41373. obj[sym] = symVal;
  41374. for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
  41375. if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
  41376. if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
  41377. var syms = Object.getOwnPropertySymbols(obj);
  41378. if (syms.length !== 1 || syms[0] !== sym) { return false; }
  41379. if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
  41380. if (typeof Object.getOwnPropertyDescriptor === 'function') {
  41381. var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
  41382. if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
  41383. }
  41384. return true;
  41385. };
  41386. /***/ }),
  41387. /***/ 96410:
  41388. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41389. "use strict";
  41390. var hasSymbols = __webpack_require__(55419);
  41391. module.exports = function hasToStringTagShams() {
  41392. return hasSymbols() && !!Symbol.toStringTag;
  41393. };
  41394. /***/ }),
  41395. /***/ 17642:
  41396. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41397. "use strict";
  41398. var bind = __webpack_require__(58612);
  41399. module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);
  41400. /***/ }),
  41401. /***/ 3349:
  41402. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41403. "use strict";
  41404. var Buffer = (__webpack_require__(89509).Buffer)
  41405. var Transform = (__webpack_require__(88473).Transform)
  41406. var inherits = __webpack_require__(35717)
  41407. function throwIfNotStringOrBuffer (val, prefix) {
  41408. if (!Buffer.isBuffer(val) && typeof val !== 'string') {
  41409. throw new TypeError(prefix + ' must be a string or a buffer')
  41410. }
  41411. }
  41412. function HashBase (blockSize) {
  41413. Transform.call(this)
  41414. this._block = Buffer.allocUnsafe(blockSize)
  41415. this._blockSize = blockSize
  41416. this._blockOffset = 0
  41417. this._length = [0, 0, 0, 0]
  41418. this._finalized = false
  41419. }
  41420. inherits(HashBase, Transform)
  41421. HashBase.prototype._transform = function (chunk, encoding, callback) {
  41422. var error = null
  41423. try {
  41424. this.update(chunk, encoding)
  41425. } catch (err) {
  41426. error = err
  41427. }
  41428. callback(error)
  41429. }
  41430. HashBase.prototype._flush = function (callback) {
  41431. var error = null
  41432. try {
  41433. this.push(this.digest())
  41434. } catch (err) {
  41435. error = err
  41436. }
  41437. callback(error)
  41438. }
  41439. HashBase.prototype.update = function (data, encoding) {
  41440. throwIfNotStringOrBuffer(data, 'Data')
  41441. if (this._finalized) throw new Error('Digest already called')
  41442. if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
  41443. // consume data
  41444. var block = this._block
  41445. var offset = 0
  41446. while (this._blockOffset + data.length - offset >= this._blockSize) {
  41447. for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
  41448. this._update()
  41449. this._blockOffset = 0
  41450. }
  41451. while (offset < data.length) block[this._blockOffset++] = data[offset++]
  41452. // update length
  41453. for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
  41454. this._length[j] += carry
  41455. carry = (this._length[j] / 0x0100000000) | 0
  41456. if (carry > 0) this._length[j] -= 0x0100000000 * carry
  41457. }
  41458. return this
  41459. }
  41460. HashBase.prototype._update = function () {
  41461. throw new Error('_update is not implemented')
  41462. }
  41463. HashBase.prototype.digest = function (encoding) {
  41464. if (this._finalized) throw new Error('Digest already called')
  41465. this._finalized = true
  41466. var digest = this._digest()
  41467. if (encoding !== undefined) digest = digest.toString(encoding)
  41468. // reset state
  41469. this._block.fill(0)
  41470. this._blockOffset = 0
  41471. for (var i = 0; i < 4; ++i) this._length[i] = 0
  41472. return digest
  41473. }
  41474. HashBase.prototype._digest = function () {
  41475. throw new Error('_digest is not implemented')
  41476. }
  41477. module.exports = HashBase
  41478. /***/ }),
  41479. /***/ 33715:
  41480. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  41481. var hash = exports;
  41482. hash.utils = __webpack_require__(26436);
  41483. hash.common = __webpack_require__(95772);
  41484. hash.sha = __webpack_require__(89041);
  41485. hash.ripemd = __webpack_require__(12949);
  41486. hash.hmac = __webpack_require__(52344);
  41487. // Proxy hash functions to the main object
  41488. hash.sha1 = hash.sha.sha1;
  41489. hash.sha256 = hash.sha.sha256;
  41490. hash.sha224 = hash.sha.sha224;
  41491. hash.sha384 = hash.sha.sha384;
  41492. hash.sha512 = hash.sha.sha512;
  41493. hash.ripemd160 = hash.ripemd.ripemd160;
  41494. /***/ }),
  41495. /***/ 95772:
  41496. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  41497. "use strict";
  41498. var utils = __webpack_require__(26436);
  41499. var assert = __webpack_require__(79746);
  41500. function BlockHash() {
  41501. this.pending = null;
  41502. this.pendingTotal = 0;
  41503. this.blockSize = this.constructor.blockSize;
  41504. this.outSize = this.constructor.outSize;
  41505. this.hmacStrength = this.constructor.hmacStrength;
  41506. this.padLength = this.constructor.padLength / 8;
  41507. this.endian = 'big';
  41508. this._delta8 = this.blockSize / 8;
  41509. this._delta32 = this.blockSize / 32;
  41510. }
  41511. exports.BlockHash = BlockHash;
  41512. BlockHash.prototype.update = function update(msg, enc) {
  41513. // Convert message to array, pad it, and join into 32bit blocks
  41514. msg = utils.toArray(msg, enc);
  41515. if (!this.pending)
  41516. this.pending = msg;
  41517. else
  41518. this.pending = this.pending.concat(msg);
  41519. this.pendingTotal += msg.length;
  41520. // Enough data, try updating
  41521. if (this.pending.length >= this._delta8) {
  41522. msg = this.pending;
  41523. // Process pending data in blocks
  41524. var r = msg.length % this._delta8;
  41525. this.pending = msg.slice(msg.length - r, msg.length);
  41526. if (this.pending.length === 0)
  41527. this.pending = null;
  41528. msg = utils.join32(msg, 0, msg.length - r, this.endian);
  41529. for (var i = 0; i < msg.length; i += this._delta32)
  41530. this._update(msg, i, i + this._delta32);
  41531. }
  41532. return this;
  41533. };
  41534. BlockHash.prototype.digest = function digest(enc) {
  41535. this.update(this._pad());
  41536. assert(this.pending === null);
  41537. return this._digest(enc);
  41538. };
  41539. BlockHash.prototype._pad = function pad() {
  41540. var len = this.pendingTotal;
  41541. var bytes = this._delta8;
  41542. var k = bytes - ((len + this.padLength) % bytes);
  41543. var res = new Array(k + this.padLength);
  41544. res[0] = 0x80;
  41545. for (var i = 1; i < k; i++)
  41546. res[i] = 0;
  41547. // Append length
  41548. len <<= 3;
  41549. if (this.endian === 'big') {
  41550. for (var t = 8; t < this.padLength; t++)
  41551. res[i++] = 0;
  41552. res[i++] = 0;
  41553. res[i++] = 0;
  41554. res[i++] = 0;
  41555. res[i++] = 0;
  41556. res[i++] = (len >>> 24) & 0xff;
  41557. res[i++] = (len >>> 16) & 0xff;
  41558. res[i++] = (len >>> 8) & 0xff;
  41559. res[i++] = len & 0xff;
  41560. } else {
  41561. res[i++] = len & 0xff;
  41562. res[i++] = (len >>> 8) & 0xff;
  41563. res[i++] = (len >>> 16) & 0xff;
  41564. res[i++] = (len >>> 24) & 0xff;
  41565. res[i++] = 0;
  41566. res[i++] = 0;
  41567. res[i++] = 0;
  41568. res[i++] = 0;
  41569. for (t = 8; t < this.padLength; t++)
  41570. res[i++] = 0;
  41571. }
  41572. return res;
  41573. };
  41574. /***/ }),
  41575. /***/ 52344:
  41576. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41577. "use strict";
  41578. var utils = __webpack_require__(26436);
  41579. var assert = __webpack_require__(79746);
  41580. function Hmac(hash, key, enc) {
  41581. if (!(this instanceof Hmac))
  41582. return new Hmac(hash, key, enc);
  41583. this.Hash = hash;
  41584. this.blockSize = hash.blockSize / 8;
  41585. this.outSize = hash.outSize / 8;
  41586. this.inner = null;
  41587. this.outer = null;
  41588. this._init(utils.toArray(key, enc));
  41589. }
  41590. module.exports = Hmac;
  41591. Hmac.prototype._init = function init(key) {
  41592. // Shorten key, if needed
  41593. if (key.length > this.blockSize)
  41594. key = new this.Hash().update(key).digest();
  41595. assert(key.length <= this.blockSize);
  41596. // Add padding to key
  41597. for (var i = key.length; i < this.blockSize; i++)
  41598. key.push(0);
  41599. for (i = 0; i < key.length; i++)
  41600. key[i] ^= 0x36;
  41601. this.inner = new this.Hash().update(key);
  41602. // 0x36 ^ 0x5c = 0x6a
  41603. for (i = 0; i < key.length; i++)
  41604. key[i] ^= 0x6a;
  41605. this.outer = new this.Hash().update(key);
  41606. };
  41607. Hmac.prototype.update = function update(msg, enc) {
  41608. this.inner.update(msg, enc);
  41609. return this;
  41610. };
  41611. Hmac.prototype.digest = function digest(enc) {
  41612. this.outer.update(this.inner.digest());
  41613. return this.outer.digest(enc);
  41614. };
  41615. /***/ }),
  41616. /***/ 12949:
  41617. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  41618. "use strict";
  41619. var utils = __webpack_require__(26436);
  41620. var common = __webpack_require__(95772);
  41621. var rotl32 = utils.rotl32;
  41622. var sum32 = utils.sum32;
  41623. var sum32_3 = utils.sum32_3;
  41624. var sum32_4 = utils.sum32_4;
  41625. var BlockHash = common.BlockHash;
  41626. function RIPEMD160() {
  41627. if (!(this instanceof RIPEMD160))
  41628. return new RIPEMD160();
  41629. BlockHash.call(this);
  41630. this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
  41631. this.endian = 'little';
  41632. }
  41633. utils.inherits(RIPEMD160, BlockHash);
  41634. exports.ripemd160 = RIPEMD160;
  41635. RIPEMD160.blockSize = 512;
  41636. RIPEMD160.outSize = 160;
  41637. RIPEMD160.hmacStrength = 192;
  41638. RIPEMD160.padLength = 64;
  41639. RIPEMD160.prototype._update = function update(msg, start) {
  41640. var A = this.h[0];
  41641. var B = this.h[1];
  41642. var C = this.h[2];
  41643. var D = this.h[3];
  41644. var E = this.h[4];
  41645. var Ah = A;
  41646. var Bh = B;
  41647. var Ch = C;
  41648. var Dh = D;
  41649. var Eh = E;
  41650. for (var j = 0; j < 80; j++) {
  41651. var T = sum32(
  41652. rotl32(
  41653. sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
  41654. s[j]),
  41655. E);
  41656. A = E;
  41657. E = D;
  41658. D = rotl32(C, 10);
  41659. C = B;
  41660. B = T;
  41661. T = sum32(
  41662. rotl32(
  41663. sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
  41664. sh[j]),
  41665. Eh);
  41666. Ah = Eh;
  41667. Eh = Dh;
  41668. Dh = rotl32(Ch, 10);
  41669. Ch = Bh;
  41670. Bh = T;
  41671. }
  41672. T = sum32_3(this.h[1], C, Dh);
  41673. this.h[1] = sum32_3(this.h[2], D, Eh);
  41674. this.h[2] = sum32_3(this.h[3], E, Ah);
  41675. this.h[3] = sum32_3(this.h[4], A, Bh);
  41676. this.h[4] = sum32_3(this.h[0], B, Ch);
  41677. this.h[0] = T;
  41678. };
  41679. RIPEMD160.prototype._digest = function digest(enc) {
  41680. if (enc === 'hex')
  41681. return utils.toHex32(this.h, 'little');
  41682. else
  41683. return utils.split32(this.h, 'little');
  41684. };
  41685. function f(j, x, y, z) {
  41686. if (j <= 15)
  41687. return x ^ y ^ z;
  41688. else if (j <= 31)
  41689. return (x & y) | ((~x) & z);
  41690. else if (j <= 47)
  41691. return (x | (~y)) ^ z;
  41692. else if (j <= 63)
  41693. return (x & z) | (y & (~z));
  41694. else
  41695. return x ^ (y | (~z));
  41696. }
  41697. function K(j) {
  41698. if (j <= 15)
  41699. return 0x00000000;
  41700. else if (j <= 31)
  41701. return 0x5a827999;
  41702. else if (j <= 47)
  41703. return 0x6ed9eba1;
  41704. else if (j <= 63)
  41705. return 0x8f1bbcdc;
  41706. else
  41707. return 0xa953fd4e;
  41708. }
  41709. function Kh(j) {
  41710. if (j <= 15)
  41711. return 0x50a28be6;
  41712. else if (j <= 31)
  41713. return 0x5c4dd124;
  41714. else if (j <= 47)
  41715. return 0x6d703ef3;
  41716. else if (j <= 63)
  41717. return 0x7a6d76e9;
  41718. else
  41719. return 0x00000000;
  41720. }
  41721. var r = [
  41722. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  41723. 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
  41724. 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
  41725. 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
  41726. 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
  41727. ];
  41728. var rh = [
  41729. 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
  41730. 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
  41731. 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
  41732. 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
  41733. 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
  41734. ];
  41735. var s = [
  41736. 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
  41737. 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
  41738. 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
  41739. 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
  41740. 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
  41741. ];
  41742. var sh = [
  41743. 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
  41744. 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
  41745. 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
  41746. 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
  41747. 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
  41748. ];
  41749. /***/ }),
  41750. /***/ 89041:
  41751. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  41752. "use strict";
  41753. exports.sha1 = __webpack_require__(84761);
  41754. exports.sha224 = __webpack_require__(10799);
  41755. exports.sha256 = __webpack_require__(89344);
  41756. exports.sha384 = __webpack_require__(80772);
  41757. exports.sha512 = __webpack_require__(45900);
  41758. /***/ }),
  41759. /***/ 84761:
  41760. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41761. "use strict";
  41762. var utils = __webpack_require__(26436);
  41763. var common = __webpack_require__(95772);
  41764. var shaCommon = __webpack_require__(37038);
  41765. var rotl32 = utils.rotl32;
  41766. var sum32 = utils.sum32;
  41767. var sum32_5 = utils.sum32_5;
  41768. var ft_1 = shaCommon.ft_1;
  41769. var BlockHash = common.BlockHash;
  41770. var sha1_K = [
  41771. 0x5A827999, 0x6ED9EBA1,
  41772. 0x8F1BBCDC, 0xCA62C1D6
  41773. ];
  41774. function SHA1() {
  41775. if (!(this instanceof SHA1))
  41776. return new SHA1();
  41777. BlockHash.call(this);
  41778. this.h = [
  41779. 0x67452301, 0xefcdab89, 0x98badcfe,
  41780. 0x10325476, 0xc3d2e1f0 ];
  41781. this.W = new Array(80);
  41782. }
  41783. utils.inherits(SHA1, BlockHash);
  41784. module.exports = SHA1;
  41785. SHA1.blockSize = 512;
  41786. SHA1.outSize = 160;
  41787. SHA1.hmacStrength = 80;
  41788. SHA1.padLength = 64;
  41789. SHA1.prototype._update = function _update(msg, start) {
  41790. var W = this.W;
  41791. for (var i = 0; i < 16; i++)
  41792. W[i] = msg[start + i];
  41793. for(; i < W.length; i++)
  41794. W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
  41795. var a = this.h[0];
  41796. var b = this.h[1];
  41797. var c = this.h[2];
  41798. var d = this.h[3];
  41799. var e = this.h[4];
  41800. for (i = 0; i < W.length; i++) {
  41801. var s = ~~(i / 20);
  41802. var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
  41803. e = d;
  41804. d = c;
  41805. c = rotl32(b, 30);
  41806. b = a;
  41807. a = t;
  41808. }
  41809. this.h[0] = sum32(this.h[0], a);
  41810. this.h[1] = sum32(this.h[1], b);
  41811. this.h[2] = sum32(this.h[2], c);
  41812. this.h[3] = sum32(this.h[3], d);
  41813. this.h[4] = sum32(this.h[4], e);
  41814. };
  41815. SHA1.prototype._digest = function digest(enc) {
  41816. if (enc === 'hex')
  41817. return utils.toHex32(this.h, 'big');
  41818. else
  41819. return utils.split32(this.h, 'big');
  41820. };
  41821. /***/ }),
  41822. /***/ 10799:
  41823. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41824. "use strict";
  41825. var utils = __webpack_require__(26436);
  41826. var SHA256 = __webpack_require__(89344);
  41827. function SHA224() {
  41828. if (!(this instanceof SHA224))
  41829. return new SHA224();
  41830. SHA256.call(this);
  41831. this.h = [
  41832. 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
  41833. 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
  41834. }
  41835. utils.inherits(SHA224, SHA256);
  41836. module.exports = SHA224;
  41837. SHA224.blockSize = 512;
  41838. SHA224.outSize = 224;
  41839. SHA224.hmacStrength = 192;
  41840. SHA224.padLength = 64;
  41841. SHA224.prototype._digest = function digest(enc) {
  41842. // Just truncate output
  41843. if (enc === 'hex')
  41844. return utils.toHex32(this.h.slice(0, 7), 'big');
  41845. else
  41846. return utils.split32(this.h.slice(0, 7), 'big');
  41847. };
  41848. /***/ }),
  41849. /***/ 89344:
  41850. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41851. "use strict";
  41852. var utils = __webpack_require__(26436);
  41853. var common = __webpack_require__(95772);
  41854. var shaCommon = __webpack_require__(37038);
  41855. var assert = __webpack_require__(79746);
  41856. var sum32 = utils.sum32;
  41857. var sum32_4 = utils.sum32_4;
  41858. var sum32_5 = utils.sum32_5;
  41859. var ch32 = shaCommon.ch32;
  41860. var maj32 = shaCommon.maj32;
  41861. var s0_256 = shaCommon.s0_256;
  41862. var s1_256 = shaCommon.s1_256;
  41863. var g0_256 = shaCommon.g0_256;
  41864. var g1_256 = shaCommon.g1_256;
  41865. var BlockHash = common.BlockHash;
  41866. var sha256_K = [
  41867. 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
  41868. 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
  41869. 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
  41870. 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
  41871. 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
  41872. 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
  41873. 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
  41874. 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
  41875. 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
  41876. 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
  41877. 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
  41878. 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
  41879. 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
  41880. 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
  41881. 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
  41882. 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
  41883. ];
  41884. function SHA256() {
  41885. if (!(this instanceof SHA256))
  41886. return new SHA256();
  41887. BlockHash.call(this);
  41888. this.h = [
  41889. 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
  41890. 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
  41891. ];
  41892. this.k = sha256_K;
  41893. this.W = new Array(64);
  41894. }
  41895. utils.inherits(SHA256, BlockHash);
  41896. module.exports = SHA256;
  41897. SHA256.blockSize = 512;
  41898. SHA256.outSize = 256;
  41899. SHA256.hmacStrength = 192;
  41900. SHA256.padLength = 64;
  41901. SHA256.prototype._update = function _update(msg, start) {
  41902. var W = this.W;
  41903. for (var i = 0; i < 16; i++)
  41904. W[i] = msg[start + i];
  41905. for (; i < W.length; i++)
  41906. W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
  41907. var a = this.h[0];
  41908. var b = this.h[1];
  41909. var c = this.h[2];
  41910. var d = this.h[3];
  41911. var e = this.h[4];
  41912. var f = this.h[5];
  41913. var g = this.h[6];
  41914. var h = this.h[7];
  41915. assert(this.k.length === W.length);
  41916. for (i = 0; i < W.length; i++) {
  41917. var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
  41918. var T2 = sum32(s0_256(a), maj32(a, b, c));
  41919. h = g;
  41920. g = f;
  41921. f = e;
  41922. e = sum32(d, T1);
  41923. d = c;
  41924. c = b;
  41925. b = a;
  41926. a = sum32(T1, T2);
  41927. }
  41928. this.h[0] = sum32(this.h[0], a);
  41929. this.h[1] = sum32(this.h[1], b);
  41930. this.h[2] = sum32(this.h[2], c);
  41931. this.h[3] = sum32(this.h[3], d);
  41932. this.h[4] = sum32(this.h[4], e);
  41933. this.h[5] = sum32(this.h[5], f);
  41934. this.h[6] = sum32(this.h[6], g);
  41935. this.h[7] = sum32(this.h[7], h);
  41936. };
  41937. SHA256.prototype._digest = function digest(enc) {
  41938. if (enc === 'hex')
  41939. return utils.toHex32(this.h, 'big');
  41940. else
  41941. return utils.split32(this.h, 'big');
  41942. };
  41943. /***/ }),
  41944. /***/ 80772:
  41945. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41946. "use strict";
  41947. var utils = __webpack_require__(26436);
  41948. var SHA512 = __webpack_require__(45900);
  41949. function SHA384() {
  41950. if (!(this instanceof SHA384))
  41951. return new SHA384();
  41952. SHA512.call(this);
  41953. this.h = [
  41954. 0xcbbb9d5d, 0xc1059ed8,
  41955. 0x629a292a, 0x367cd507,
  41956. 0x9159015a, 0x3070dd17,
  41957. 0x152fecd8, 0xf70e5939,
  41958. 0x67332667, 0xffc00b31,
  41959. 0x8eb44a87, 0x68581511,
  41960. 0xdb0c2e0d, 0x64f98fa7,
  41961. 0x47b5481d, 0xbefa4fa4 ];
  41962. }
  41963. utils.inherits(SHA384, SHA512);
  41964. module.exports = SHA384;
  41965. SHA384.blockSize = 1024;
  41966. SHA384.outSize = 384;
  41967. SHA384.hmacStrength = 192;
  41968. SHA384.padLength = 128;
  41969. SHA384.prototype._digest = function digest(enc) {
  41970. if (enc === 'hex')
  41971. return utils.toHex32(this.h.slice(0, 12), 'big');
  41972. else
  41973. return utils.split32(this.h.slice(0, 12), 'big');
  41974. };
  41975. /***/ }),
  41976. /***/ 45900:
  41977. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  41978. "use strict";
  41979. var utils = __webpack_require__(26436);
  41980. var common = __webpack_require__(95772);
  41981. var assert = __webpack_require__(79746);
  41982. var rotr64_hi = utils.rotr64_hi;
  41983. var rotr64_lo = utils.rotr64_lo;
  41984. var shr64_hi = utils.shr64_hi;
  41985. var shr64_lo = utils.shr64_lo;
  41986. var sum64 = utils.sum64;
  41987. var sum64_hi = utils.sum64_hi;
  41988. var sum64_lo = utils.sum64_lo;
  41989. var sum64_4_hi = utils.sum64_4_hi;
  41990. var sum64_4_lo = utils.sum64_4_lo;
  41991. var sum64_5_hi = utils.sum64_5_hi;
  41992. var sum64_5_lo = utils.sum64_5_lo;
  41993. var BlockHash = common.BlockHash;
  41994. var sha512_K = [
  41995. 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
  41996. 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
  41997. 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
  41998. 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
  41999. 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
  42000. 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
  42001. 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
  42002. 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
  42003. 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
  42004. 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
  42005. 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
  42006. 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
  42007. 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
  42008. 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
  42009. 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
  42010. 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
  42011. 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
  42012. 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
  42013. 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
  42014. 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
  42015. 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
  42016. 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
  42017. 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
  42018. 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
  42019. 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
  42020. 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
  42021. 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
  42022. 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
  42023. 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
  42024. 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
  42025. 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
  42026. 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
  42027. 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
  42028. 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
  42029. 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
  42030. 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
  42031. 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
  42032. 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
  42033. 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
  42034. 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
  42035. ];
  42036. function SHA512() {
  42037. if (!(this instanceof SHA512))
  42038. return new SHA512();
  42039. BlockHash.call(this);
  42040. this.h = [
  42041. 0x6a09e667, 0xf3bcc908,
  42042. 0xbb67ae85, 0x84caa73b,
  42043. 0x3c6ef372, 0xfe94f82b,
  42044. 0xa54ff53a, 0x5f1d36f1,
  42045. 0x510e527f, 0xade682d1,
  42046. 0x9b05688c, 0x2b3e6c1f,
  42047. 0x1f83d9ab, 0xfb41bd6b,
  42048. 0x5be0cd19, 0x137e2179 ];
  42049. this.k = sha512_K;
  42050. this.W = new Array(160);
  42051. }
  42052. utils.inherits(SHA512, BlockHash);
  42053. module.exports = SHA512;
  42054. SHA512.blockSize = 1024;
  42055. SHA512.outSize = 512;
  42056. SHA512.hmacStrength = 192;
  42057. SHA512.padLength = 128;
  42058. SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
  42059. var W = this.W;
  42060. // 32 x 32bit words
  42061. for (var i = 0; i < 32; i++)
  42062. W[i] = msg[start + i];
  42063. for (; i < W.length; i += 2) {
  42064. var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
  42065. var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
  42066. var c1_hi = W[i - 14]; // i - 7
  42067. var c1_lo = W[i - 13];
  42068. var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
  42069. var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
  42070. var c3_hi = W[i - 32]; // i - 16
  42071. var c3_lo = W[i - 31];
  42072. W[i] = sum64_4_hi(
  42073. c0_hi, c0_lo,
  42074. c1_hi, c1_lo,
  42075. c2_hi, c2_lo,
  42076. c3_hi, c3_lo);
  42077. W[i + 1] = sum64_4_lo(
  42078. c0_hi, c0_lo,
  42079. c1_hi, c1_lo,
  42080. c2_hi, c2_lo,
  42081. c3_hi, c3_lo);
  42082. }
  42083. };
  42084. SHA512.prototype._update = function _update(msg, start) {
  42085. this._prepareBlock(msg, start);
  42086. var W = this.W;
  42087. var ah = this.h[0];
  42088. var al = this.h[1];
  42089. var bh = this.h[2];
  42090. var bl = this.h[3];
  42091. var ch = this.h[4];
  42092. var cl = this.h[5];
  42093. var dh = this.h[6];
  42094. var dl = this.h[7];
  42095. var eh = this.h[8];
  42096. var el = this.h[9];
  42097. var fh = this.h[10];
  42098. var fl = this.h[11];
  42099. var gh = this.h[12];
  42100. var gl = this.h[13];
  42101. var hh = this.h[14];
  42102. var hl = this.h[15];
  42103. assert(this.k.length === W.length);
  42104. for (var i = 0; i < W.length; i += 2) {
  42105. var c0_hi = hh;
  42106. var c0_lo = hl;
  42107. var c1_hi = s1_512_hi(eh, el);
  42108. var c1_lo = s1_512_lo(eh, el);
  42109. var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
  42110. var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
  42111. var c3_hi = this.k[i];
  42112. var c3_lo = this.k[i + 1];
  42113. var c4_hi = W[i];
  42114. var c4_lo = W[i + 1];
  42115. var T1_hi = sum64_5_hi(
  42116. c0_hi, c0_lo,
  42117. c1_hi, c1_lo,
  42118. c2_hi, c2_lo,
  42119. c3_hi, c3_lo,
  42120. c4_hi, c4_lo);
  42121. var T1_lo = sum64_5_lo(
  42122. c0_hi, c0_lo,
  42123. c1_hi, c1_lo,
  42124. c2_hi, c2_lo,
  42125. c3_hi, c3_lo,
  42126. c4_hi, c4_lo);
  42127. c0_hi = s0_512_hi(ah, al);
  42128. c0_lo = s0_512_lo(ah, al);
  42129. c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
  42130. c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
  42131. var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
  42132. var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
  42133. hh = gh;
  42134. hl = gl;
  42135. gh = fh;
  42136. gl = fl;
  42137. fh = eh;
  42138. fl = el;
  42139. eh = sum64_hi(dh, dl, T1_hi, T1_lo);
  42140. el = sum64_lo(dl, dl, T1_hi, T1_lo);
  42141. dh = ch;
  42142. dl = cl;
  42143. ch = bh;
  42144. cl = bl;
  42145. bh = ah;
  42146. bl = al;
  42147. ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
  42148. al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
  42149. }
  42150. sum64(this.h, 0, ah, al);
  42151. sum64(this.h, 2, bh, bl);
  42152. sum64(this.h, 4, ch, cl);
  42153. sum64(this.h, 6, dh, dl);
  42154. sum64(this.h, 8, eh, el);
  42155. sum64(this.h, 10, fh, fl);
  42156. sum64(this.h, 12, gh, gl);
  42157. sum64(this.h, 14, hh, hl);
  42158. };
  42159. SHA512.prototype._digest = function digest(enc) {
  42160. if (enc === 'hex')
  42161. return utils.toHex32(this.h, 'big');
  42162. else
  42163. return utils.split32(this.h, 'big');
  42164. };
  42165. function ch64_hi(xh, xl, yh, yl, zh) {
  42166. var r = (xh & yh) ^ ((~xh) & zh);
  42167. if (r < 0)
  42168. r += 0x100000000;
  42169. return r;
  42170. }
  42171. function ch64_lo(xh, xl, yh, yl, zh, zl) {
  42172. var r = (xl & yl) ^ ((~xl) & zl);
  42173. if (r < 0)
  42174. r += 0x100000000;
  42175. return r;
  42176. }
  42177. function maj64_hi(xh, xl, yh, yl, zh) {
  42178. var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
  42179. if (r < 0)
  42180. r += 0x100000000;
  42181. return r;
  42182. }
  42183. function maj64_lo(xh, xl, yh, yl, zh, zl) {
  42184. var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
  42185. if (r < 0)
  42186. r += 0x100000000;
  42187. return r;
  42188. }
  42189. function s0_512_hi(xh, xl) {
  42190. var c0_hi = rotr64_hi(xh, xl, 28);
  42191. var c1_hi = rotr64_hi(xl, xh, 2); // 34
  42192. var c2_hi = rotr64_hi(xl, xh, 7); // 39
  42193. var r = c0_hi ^ c1_hi ^ c2_hi;
  42194. if (r < 0)
  42195. r += 0x100000000;
  42196. return r;
  42197. }
  42198. function s0_512_lo(xh, xl) {
  42199. var c0_lo = rotr64_lo(xh, xl, 28);
  42200. var c1_lo = rotr64_lo(xl, xh, 2); // 34
  42201. var c2_lo = rotr64_lo(xl, xh, 7); // 39
  42202. var r = c0_lo ^ c1_lo ^ c2_lo;
  42203. if (r < 0)
  42204. r += 0x100000000;
  42205. return r;
  42206. }
  42207. function s1_512_hi(xh, xl) {
  42208. var c0_hi = rotr64_hi(xh, xl, 14);
  42209. var c1_hi = rotr64_hi(xh, xl, 18);
  42210. var c2_hi = rotr64_hi(xl, xh, 9); // 41
  42211. var r = c0_hi ^ c1_hi ^ c2_hi;
  42212. if (r < 0)
  42213. r += 0x100000000;
  42214. return r;
  42215. }
  42216. function s1_512_lo(xh, xl) {
  42217. var c0_lo = rotr64_lo(xh, xl, 14);
  42218. var c1_lo = rotr64_lo(xh, xl, 18);
  42219. var c2_lo = rotr64_lo(xl, xh, 9); // 41
  42220. var r = c0_lo ^ c1_lo ^ c2_lo;
  42221. if (r < 0)
  42222. r += 0x100000000;
  42223. return r;
  42224. }
  42225. function g0_512_hi(xh, xl) {
  42226. var c0_hi = rotr64_hi(xh, xl, 1);
  42227. var c1_hi = rotr64_hi(xh, xl, 8);
  42228. var c2_hi = shr64_hi(xh, xl, 7);
  42229. var r = c0_hi ^ c1_hi ^ c2_hi;
  42230. if (r < 0)
  42231. r += 0x100000000;
  42232. return r;
  42233. }
  42234. function g0_512_lo(xh, xl) {
  42235. var c0_lo = rotr64_lo(xh, xl, 1);
  42236. var c1_lo = rotr64_lo(xh, xl, 8);
  42237. var c2_lo = shr64_lo(xh, xl, 7);
  42238. var r = c0_lo ^ c1_lo ^ c2_lo;
  42239. if (r < 0)
  42240. r += 0x100000000;
  42241. return r;
  42242. }
  42243. function g1_512_hi(xh, xl) {
  42244. var c0_hi = rotr64_hi(xh, xl, 19);
  42245. var c1_hi = rotr64_hi(xl, xh, 29); // 61
  42246. var c2_hi = shr64_hi(xh, xl, 6);
  42247. var r = c0_hi ^ c1_hi ^ c2_hi;
  42248. if (r < 0)
  42249. r += 0x100000000;
  42250. return r;
  42251. }
  42252. function g1_512_lo(xh, xl) {
  42253. var c0_lo = rotr64_lo(xh, xl, 19);
  42254. var c1_lo = rotr64_lo(xl, xh, 29); // 61
  42255. var c2_lo = shr64_lo(xh, xl, 6);
  42256. var r = c0_lo ^ c1_lo ^ c2_lo;
  42257. if (r < 0)
  42258. r += 0x100000000;
  42259. return r;
  42260. }
  42261. /***/ }),
  42262. /***/ 37038:
  42263. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  42264. "use strict";
  42265. var utils = __webpack_require__(26436);
  42266. var rotr32 = utils.rotr32;
  42267. function ft_1(s, x, y, z) {
  42268. if (s === 0)
  42269. return ch32(x, y, z);
  42270. if (s === 1 || s === 3)
  42271. return p32(x, y, z);
  42272. if (s === 2)
  42273. return maj32(x, y, z);
  42274. }
  42275. exports.ft_1 = ft_1;
  42276. function ch32(x, y, z) {
  42277. return (x & y) ^ ((~x) & z);
  42278. }
  42279. exports.ch32 = ch32;
  42280. function maj32(x, y, z) {
  42281. return (x & y) ^ (x & z) ^ (y & z);
  42282. }
  42283. exports.maj32 = maj32;
  42284. function p32(x, y, z) {
  42285. return x ^ y ^ z;
  42286. }
  42287. exports.p32 = p32;
  42288. function s0_256(x) {
  42289. return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
  42290. }
  42291. exports.s0_256 = s0_256;
  42292. function s1_256(x) {
  42293. return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
  42294. }
  42295. exports.s1_256 = s1_256;
  42296. function g0_256(x) {
  42297. return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
  42298. }
  42299. exports.g0_256 = g0_256;
  42300. function g1_256(x) {
  42301. return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
  42302. }
  42303. exports.g1_256 = g1_256;
  42304. /***/ }),
  42305. /***/ 26436:
  42306. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  42307. "use strict";
  42308. var assert = __webpack_require__(79746);
  42309. var inherits = __webpack_require__(35717);
  42310. exports.inherits = inherits;
  42311. function isSurrogatePair(msg, i) {
  42312. if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {
  42313. return false;
  42314. }
  42315. if (i < 0 || i + 1 >= msg.length) {
  42316. return false;
  42317. }
  42318. return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;
  42319. }
  42320. function toArray(msg, enc) {
  42321. if (Array.isArray(msg))
  42322. return msg.slice();
  42323. if (!msg)
  42324. return [];
  42325. var res = [];
  42326. if (typeof msg === 'string') {
  42327. if (!enc) {
  42328. // Inspired by stringToUtf8ByteArray() in closure-library by Google
  42329. // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143
  42330. // Apache License 2.0
  42331. // https://github.com/google/closure-library/blob/master/LICENSE
  42332. var p = 0;
  42333. for (var i = 0; i < msg.length; i++) {
  42334. var c = msg.charCodeAt(i);
  42335. if (c < 128) {
  42336. res[p++] = c;
  42337. } else if (c < 2048) {
  42338. res[p++] = (c >> 6) | 192;
  42339. res[p++] = (c & 63) | 128;
  42340. } else if (isSurrogatePair(msg, i)) {
  42341. c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);
  42342. res[p++] = (c >> 18) | 240;
  42343. res[p++] = ((c >> 12) & 63) | 128;
  42344. res[p++] = ((c >> 6) & 63) | 128;
  42345. res[p++] = (c & 63) | 128;
  42346. } else {
  42347. res[p++] = (c >> 12) | 224;
  42348. res[p++] = ((c >> 6) & 63) | 128;
  42349. res[p++] = (c & 63) | 128;
  42350. }
  42351. }
  42352. } else if (enc === 'hex') {
  42353. msg = msg.replace(/[^a-z0-9]+/ig, '');
  42354. if (msg.length % 2 !== 0)
  42355. msg = '0' + msg;
  42356. for (i = 0; i < msg.length; i += 2)
  42357. res.push(parseInt(msg[i] + msg[i + 1], 16));
  42358. }
  42359. } else {
  42360. for (i = 0; i < msg.length; i++)
  42361. res[i] = msg[i] | 0;
  42362. }
  42363. return res;
  42364. }
  42365. exports.toArray = toArray;
  42366. function toHex(msg) {
  42367. var res = '';
  42368. for (var i = 0; i < msg.length; i++)
  42369. res += zero2(msg[i].toString(16));
  42370. return res;
  42371. }
  42372. exports.toHex = toHex;
  42373. function htonl(w) {
  42374. var res = (w >>> 24) |
  42375. ((w >>> 8) & 0xff00) |
  42376. ((w << 8) & 0xff0000) |
  42377. ((w & 0xff) << 24);
  42378. return res >>> 0;
  42379. }
  42380. exports.htonl = htonl;
  42381. function toHex32(msg, endian) {
  42382. var res = '';
  42383. for (var i = 0; i < msg.length; i++) {
  42384. var w = msg[i];
  42385. if (endian === 'little')
  42386. w = htonl(w);
  42387. res += zero8(w.toString(16));
  42388. }
  42389. return res;
  42390. }
  42391. exports.toHex32 = toHex32;
  42392. function zero2(word) {
  42393. if (word.length === 1)
  42394. return '0' + word;
  42395. else
  42396. return word;
  42397. }
  42398. exports.zero2 = zero2;
  42399. function zero8(word) {
  42400. if (word.length === 7)
  42401. return '0' + word;
  42402. else if (word.length === 6)
  42403. return '00' + word;
  42404. else if (word.length === 5)
  42405. return '000' + word;
  42406. else if (word.length === 4)
  42407. return '0000' + word;
  42408. else if (word.length === 3)
  42409. return '00000' + word;
  42410. else if (word.length === 2)
  42411. return '000000' + word;
  42412. else if (word.length === 1)
  42413. return '0000000' + word;
  42414. else
  42415. return word;
  42416. }
  42417. exports.zero8 = zero8;
  42418. function join32(msg, start, end, endian) {
  42419. var len = end - start;
  42420. assert(len % 4 === 0);
  42421. var res = new Array(len / 4);
  42422. for (var i = 0, k = start; i < res.length; i++, k += 4) {
  42423. var w;
  42424. if (endian === 'big')
  42425. w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
  42426. else
  42427. w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
  42428. res[i] = w >>> 0;
  42429. }
  42430. return res;
  42431. }
  42432. exports.join32 = join32;
  42433. function split32(msg, endian) {
  42434. var res = new Array(msg.length * 4);
  42435. for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
  42436. var m = msg[i];
  42437. if (endian === 'big') {
  42438. res[k] = m >>> 24;
  42439. res[k + 1] = (m >>> 16) & 0xff;
  42440. res[k + 2] = (m >>> 8) & 0xff;
  42441. res[k + 3] = m & 0xff;
  42442. } else {
  42443. res[k + 3] = m >>> 24;
  42444. res[k + 2] = (m >>> 16) & 0xff;
  42445. res[k + 1] = (m >>> 8) & 0xff;
  42446. res[k] = m & 0xff;
  42447. }
  42448. }
  42449. return res;
  42450. }
  42451. exports.split32 = split32;
  42452. function rotr32(w, b) {
  42453. return (w >>> b) | (w << (32 - b));
  42454. }
  42455. exports.rotr32 = rotr32;
  42456. function rotl32(w, b) {
  42457. return (w << b) | (w >>> (32 - b));
  42458. }
  42459. exports.rotl32 = rotl32;
  42460. function sum32(a, b) {
  42461. return (a + b) >>> 0;
  42462. }
  42463. exports.sum32 = sum32;
  42464. function sum32_3(a, b, c) {
  42465. return (a + b + c) >>> 0;
  42466. }
  42467. exports.sum32_3 = sum32_3;
  42468. function sum32_4(a, b, c, d) {
  42469. return (a + b + c + d) >>> 0;
  42470. }
  42471. exports.sum32_4 = sum32_4;
  42472. function sum32_5(a, b, c, d, e) {
  42473. return (a + b + c + d + e) >>> 0;
  42474. }
  42475. exports.sum32_5 = sum32_5;
  42476. function sum64(buf, pos, ah, al) {
  42477. var bh = buf[pos];
  42478. var bl = buf[pos + 1];
  42479. var lo = (al + bl) >>> 0;
  42480. var hi = (lo < al ? 1 : 0) + ah + bh;
  42481. buf[pos] = hi >>> 0;
  42482. buf[pos + 1] = lo;
  42483. }
  42484. exports.sum64 = sum64;
  42485. function sum64_hi(ah, al, bh, bl) {
  42486. var lo = (al + bl) >>> 0;
  42487. var hi = (lo < al ? 1 : 0) + ah + bh;
  42488. return hi >>> 0;
  42489. }
  42490. exports.sum64_hi = sum64_hi;
  42491. function sum64_lo(ah, al, bh, bl) {
  42492. var lo = al + bl;
  42493. return lo >>> 0;
  42494. }
  42495. exports.sum64_lo = sum64_lo;
  42496. function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
  42497. var carry = 0;
  42498. var lo = al;
  42499. lo = (lo + bl) >>> 0;
  42500. carry += lo < al ? 1 : 0;
  42501. lo = (lo + cl) >>> 0;
  42502. carry += lo < cl ? 1 : 0;
  42503. lo = (lo + dl) >>> 0;
  42504. carry += lo < dl ? 1 : 0;
  42505. var hi = ah + bh + ch + dh + carry;
  42506. return hi >>> 0;
  42507. }
  42508. exports.sum64_4_hi = sum64_4_hi;
  42509. function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
  42510. var lo = al + bl + cl + dl;
  42511. return lo >>> 0;
  42512. }
  42513. exports.sum64_4_lo = sum64_4_lo;
  42514. function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
  42515. var carry = 0;
  42516. var lo = al;
  42517. lo = (lo + bl) >>> 0;
  42518. carry += lo < al ? 1 : 0;
  42519. lo = (lo + cl) >>> 0;
  42520. carry += lo < cl ? 1 : 0;
  42521. lo = (lo + dl) >>> 0;
  42522. carry += lo < dl ? 1 : 0;
  42523. lo = (lo + el) >>> 0;
  42524. carry += lo < el ? 1 : 0;
  42525. var hi = ah + bh + ch + dh + eh + carry;
  42526. return hi >>> 0;
  42527. }
  42528. exports.sum64_5_hi = sum64_5_hi;
  42529. function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
  42530. var lo = al + bl + cl + dl + el;
  42531. return lo >>> 0;
  42532. }
  42533. exports.sum64_5_lo = sum64_5_lo;
  42534. function rotr64_hi(ah, al, num) {
  42535. var r = (al << (32 - num)) | (ah >>> num);
  42536. return r >>> 0;
  42537. }
  42538. exports.rotr64_hi = rotr64_hi;
  42539. function rotr64_lo(ah, al, num) {
  42540. var r = (ah << (32 - num)) | (al >>> num);
  42541. return r >>> 0;
  42542. }
  42543. exports.rotr64_lo = rotr64_lo;
  42544. function shr64_hi(ah, al, num) {
  42545. return ah >>> num;
  42546. }
  42547. exports.shr64_hi = shr64_hi;
  42548. function shr64_lo(ah, al, num) {
  42549. var r = (ah << (32 - num)) | (al >>> num);
  42550. return r >>> 0;
  42551. }
  42552. exports.shr64_lo = shr64_lo;
  42553. /***/ }),
  42554. /***/ 2156:
  42555. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42556. "use strict";
  42557. var hash = __webpack_require__(33715);
  42558. var utils = __webpack_require__(34504);
  42559. var assert = __webpack_require__(79746);
  42560. function HmacDRBG(options) {
  42561. if (!(this instanceof HmacDRBG))
  42562. return new HmacDRBG(options);
  42563. this.hash = options.hash;
  42564. this.predResist = !!options.predResist;
  42565. this.outLen = this.hash.outSize;
  42566. this.minEntropy = options.minEntropy || this.hash.hmacStrength;
  42567. this._reseed = null;
  42568. this.reseedInterval = null;
  42569. this.K = null;
  42570. this.V = null;
  42571. var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
  42572. var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
  42573. var pers = utils.toArray(options.pers, options.persEnc || 'hex');
  42574. assert(entropy.length >= (this.minEntropy / 8),
  42575. 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
  42576. this._init(entropy, nonce, pers);
  42577. }
  42578. module.exports = HmacDRBG;
  42579. HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
  42580. var seed = entropy.concat(nonce).concat(pers);
  42581. this.K = new Array(this.outLen / 8);
  42582. this.V = new Array(this.outLen / 8);
  42583. for (var i = 0; i < this.V.length; i++) {
  42584. this.K[i] = 0x00;
  42585. this.V[i] = 0x01;
  42586. }
  42587. this._update(seed);
  42588. this._reseed = 1;
  42589. this.reseedInterval = 0x1000000000000; // 2^48
  42590. };
  42591. HmacDRBG.prototype._hmac = function hmac() {
  42592. return new hash.hmac(this.hash, this.K);
  42593. };
  42594. HmacDRBG.prototype._update = function update(seed) {
  42595. var kmac = this._hmac()
  42596. .update(this.V)
  42597. .update([ 0x00 ]);
  42598. if (seed)
  42599. kmac = kmac.update(seed);
  42600. this.K = kmac.digest();
  42601. this.V = this._hmac().update(this.V).digest();
  42602. if (!seed)
  42603. return;
  42604. this.K = this._hmac()
  42605. .update(this.V)
  42606. .update([ 0x01 ])
  42607. .update(seed)
  42608. .digest();
  42609. this.V = this._hmac().update(this.V).digest();
  42610. };
  42611. HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
  42612. // Optional entropy enc
  42613. if (typeof entropyEnc !== 'string') {
  42614. addEnc = add;
  42615. add = entropyEnc;
  42616. entropyEnc = null;
  42617. }
  42618. entropy = utils.toArray(entropy, entropyEnc);
  42619. add = utils.toArray(add, addEnc);
  42620. assert(entropy.length >= (this.minEntropy / 8),
  42621. 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
  42622. this._update(entropy.concat(add || []));
  42623. this._reseed = 1;
  42624. };
  42625. HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
  42626. if (this._reseed > this.reseedInterval)
  42627. throw new Error('Reseed is required');
  42628. // Optional encoding
  42629. if (typeof enc !== 'string') {
  42630. addEnc = add;
  42631. add = enc;
  42632. enc = null;
  42633. }
  42634. // Optional additional data
  42635. if (add) {
  42636. add = utils.toArray(add, addEnc || 'hex');
  42637. this._update(add);
  42638. }
  42639. var temp = [];
  42640. while (temp.length < len) {
  42641. this.V = this._hmac().update(this.V).digest();
  42642. temp = temp.concat(this.V);
  42643. }
  42644. var res = temp.slice(0, len);
  42645. this._update(add);
  42646. this._reseed++;
  42647. return utils.encode(res, enc);
  42648. };
  42649. /***/ }),
  42650. /***/ 79267:
  42651. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42652. var http = __webpack_require__(8501)
  42653. var url = __webpack_require__(8575)
  42654. var https = module.exports
  42655. for (var key in http) {
  42656. if (http.hasOwnProperty(key)) https[key] = http[key]
  42657. }
  42658. https.request = function (params, cb) {
  42659. params = validateParams(params)
  42660. return http.request.call(this, params, cb)
  42661. }
  42662. https.get = function (params, cb) {
  42663. params = validateParams(params)
  42664. return http.get.call(this, params, cb)
  42665. }
  42666. function validateParams (params) {
  42667. if (typeof params === 'string') {
  42668. params = url.parse(params)
  42669. }
  42670. if (!params.protocol) {
  42671. params.protocol = 'https:'
  42672. }
  42673. if (params.protocol !== 'https:') {
  42674. throw new Error('Protocol "' + params.protocol + '" not supported. Expected "https:"')
  42675. }
  42676. return params
  42677. }
  42678. /***/ }),
  42679. /***/ 80645:
  42680. /***/ ((__unused_webpack_module, exports) => {
  42681. /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
  42682. exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  42683. var e, m
  42684. var eLen = (nBytes * 8) - mLen - 1
  42685. var eMax = (1 << eLen) - 1
  42686. var eBias = eMax >> 1
  42687. var nBits = -7
  42688. var i = isLE ? (nBytes - 1) : 0
  42689. var d = isLE ? -1 : 1
  42690. var s = buffer[offset + i]
  42691. i += d
  42692. e = s & ((1 << (-nBits)) - 1)
  42693. s >>= (-nBits)
  42694. nBits += eLen
  42695. for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
  42696. m = e & ((1 << (-nBits)) - 1)
  42697. e >>= (-nBits)
  42698. nBits += mLen
  42699. for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
  42700. if (e === 0) {
  42701. e = 1 - eBias
  42702. } else if (e === eMax) {
  42703. return m ? NaN : ((s ? -1 : 1) * Infinity)
  42704. } else {
  42705. m = m + Math.pow(2, mLen)
  42706. e = e - eBias
  42707. }
  42708. return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
  42709. }
  42710. exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  42711. var e, m, c
  42712. var eLen = (nBytes * 8) - mLen - 1
  42713. var eMax = (1 << eLen) - 1
  42714. var eBias = eMax >> 1
  42715. var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
  42716. var i = isLE ? 0 : (nBytes - 1)
  42717. var d = isLE ? 1 : -1
  42718. var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
  42719. value = Math.abs(value)
  42720. if (isNaN(value) || value === Infinity) {
  42721. m = isNaN(value) ? 1 : 0
  42722. e = eMax
  42723. } else {
  42724. e = Math.floor(Math.log(value) / Math.LN2)
  42725. if (value * (c = Math.pow(2, -e)) < 1) {
  42726. e--
  42727. c *= 2
  42728. }
  42729. if (e + eBias >= 1) {
  42730. value += rt / c
  42731. } else {
  42732. value += rt * Math.pow(2, 1 - eBias)
  42733. }
  42734. if (value * c >= 2) {
  42735. e++
  42736. c /= 2
  42737. }
  42738. if (e + eBias >= eMax) {
  42739. m = 0
  42740. e = eMax
  42741. } else if (e + eBias >= 1) {
  42742. m = ((value * c) - 1) * Math.pow(2, mLen)
  42743. e = e + eBias
  42744. } else {
  42745. m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
  42746. e = 0
  42747. }
  42748. }
  42749. for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
  42750. e = (e << mLen) | m
  42751. eLen += mLen
  42752. for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
  42753. buffer[offset + i - d] |= s * 128
  42754. }
  42755. /***/ }),
  42756. /***/ 35717:
  42757. /***/ ((module) => {
  42758. if (typeof Object.create === 'function') {
  42759. // implementation from standard node.js 'util' module
  42760. module.exports = function inherits(ctor, superCtor) {
  42761. if (superCtor) {
  42762. ctor.super_ = superCtor
  42763. ctor.prototype = Object.create(superCtor.prototype, {
  42764. constructor: {
  42765. value: ctor,
  42766. enumerable: false,
  42767. writable: true,
  42768. configurable: true
  42769. }
  42770. })
  42771. }
  42772. };
  42773. } else {
  42774. // old school shim for old browsers
  42775. module.exports = function inherits(ctor, superCtor) {
  42776. if (superCtor) {
  42777. ctor.super_ = superCtor
  42778. var TempCtor = function () {}
  42779. TempCtor.prototype = superCtor.prototype
  42780. ctor.prototype = new TempCtor()
  42781. ctor.prototype.constructor = ctor
  42782. }
  42783. }
  42784. }
  42785. /***/ }),
  42786. /***/ 82584:
  42787. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42788. "use strict";
  42789. var hasToStringTag = __webpack_require__(96410)();
  42790. var callBound = __webpack_require__(21924);
  42791. var $toString = callBound('Object.prototype.toString');
  42792. var isStandardArguments = function isArguments(value) {
  42793. if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {
  42794. return false;
  42795. }
  42796. return $toString(value) === '[object Arguments]';
  42797. };
  42798. var isLegacyArguments = function isArguments(value) {
  42799. if (isStandardArguments(value)) {
  42800. return true;
  42801. }
  42802. return value !== null &&
  42803. typeof value === 'object' &&
  42804. typeof value.length === 'number' &&
  42805. value.length >= 0 &&
  42806. $toString(value) !== '[object Array]' &&
  42807. $toString(value.callee) === '[object Function]';
  42808. };
  42809. var supportsStandardArguments = (function () {
  42810. return isStandardArguments(arguments);
  42811. }());
  42812. isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests
  42813. module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;
  42814. /***/ }),
  42815. /***/ 48662:
  42816. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42817. "use strict";
  42818. var toStr = Object.prototype.toString;
  42819. var fnToStr = Function.prototype.toString;
  42820. var isFnRegex = /^\s*(?:function)?\*/;
  42821. var hasToStringTag = __webpack_require__(96410)();
  42822. var getProto = Object.getPrototypeOf;
  42823. var getGeneratorFunc = function () { // eslint-disable-line consistent-return
  42824. if (!hasToStringTag) {
  42825. return false;
  42826. }
  42827. try {
  42828. return Function('return function*() {}')();
  42829. } catch (e) {
  42830. }
  42831. };
  42832. var GeneratorFunction;
  42833. module.exports = function isGeneratorFunction(fn) {
  42834. if (typeof fn !== 'function') {
  42835. return false;
  42836. }
  42837. if (isFnRegex.test(fnToStr.call(fn))) {
  42838. return true;
  42839. }
  42840. if (!hasToStringTag) {
  42841. var str = toStr.call(fn);
  42842. return str === '[object GeneratorFunction]';
  42843. }
  42844. if (!getProto) {
  42845. return false;
  42846. }
  42847. if (typeof GeneratorFunction === 'undefined') {
  42848. var generatorFunc = getGeneratorFunc();
  42849. GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;
  42850. }
  42851. return getProto(fn) === GeneratorFunction;
  42852. };
  42853. /***/ }),
  42854. /***/ 98611:
  42855. /***/ ((module) => {
  42856. "use strict";
  42857. /* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */
  42858. module.exports = function isNaN(value) {
  42859. return value !== value;
  42860. };
  42861. /***/ }),
  42862. /***/ 20360:
  42863. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42864. "use strict";
  42865. var callBind = __webpack_require__(55559);
  42866. var define = __webpack_require__(4289);
  42867. var implementation = __webpack_require__(98611);
  42868. var getPolyfill = __webpack_require__(29415);
  42869. var shim = __webpack_require__(23194);
  42870. var polyfill = callBind(getPolyfill(), Number);
  42871. /* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */
  42872. define(polyfill, {
  42873. getPolyfill: getPolyfill,
  42874. implementation: implementation,
  42875. shim: shim
  42876. });
  42877. module.exports = polyfill;
  42878. /***/ }),
  42879. /***/ 29415:
  42880. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42881. "use strict";
  42882. var implementation = __webpack_require__(98611);
  42883. module.exports = function getPolyfill() {
  42884. if (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {
  42885. return Number.isNaN;
  42886. }
  42887. return implementation;
  42888. };
  42889. /***/ }),
  42890. /***/ 23194:
  42891. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42892. "use strict";
  42893. var define = __webpack_require__(4289);
  42894. var getPolyfill = __webpack_require__(29415);
  42895. /* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */
  42896. module.exports = function shimNumberIsNaN() {
  42897. var polyfill = getPolyfill();
  42898. define(Number, { isNaN: polyfill }, {
  42899. isNaN: function testIsNaN() {
  42900. return Number.isNaN !== polyfill;
  42901. }
  42902. });
  42903. return polyfill;
  42904. };
  42905. /***/ }),
  42906. /***/ 85692:
  42907. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42908. "use strict";
  42909. var forEach = __webpack_require__(49804);
  42910. var availableTypedArrays = __webpack_require__(63083);
  42911. var callBound = __webpack_require__(21924);
  42912. var $toString = callBound('Object.prototype.toString');
  42913. var hasToStringTag = __webpack_require__(96410)();
  42914. var g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;
  42915. var typedArrays = availableTypedArrays();
  42916. var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {
  42917. for (var i = 0; i < array.length; i += 1) {
  42918. if (array[i] === value) {
  42919. return i;
  42920. }
  42921. }
  42922. return -1;
  42923. };
  42924. var $slice = callBound('String.prototype.slice');
  42925. var toStrTags = {};
  42926. var gOPD = __webpack_require__(20882);
  42927. var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
  42928. if (hasToStringTag && gOPD && getPrototypeOf) {
  42929. forEach(typedArrays, function (typedArray) {
  42930. var arr = new g[typedArray]();
  42931. if (Symbol.toStringTag in arr) {
  42932. var proto = getPrototypeOf(arr);
  42933. var descriptor = gOPD(proto, Symbol.toStringTag);
  42934. if (!descriptor) {
  42935. var superProto = getPrototypeOf(proto);
  42936. descriptor = gOPD(superProto, Symbol.toStringTag);
  42937. }
  42938. toStrTags[typedArray] = descriptor.get;
  42939. }
  42940. });
  42941. }
  42942. var tryTypedArrays = function tryAllTypedArrays(value) {
  42943. var anyTrue = false;
  42944. forEach(toStrTags, function (getter, typedArray) {
  42945. if (!anyTrue) {
  42946. try {
  42947. anyTrue = getter.call(value) === typedArray;
  42948. } catch (e) { /**/ }
  42949. }
  42950. });
  42951. return anyTrue;
  42952. };
  42953. module.exports = function isTypedArray(value) {
  42954. if (!value || typeof value !== 'object') { return false; }
  42955. if (!hasToStringTag || !(Symbol.toStringTag in value)) {
  42956. var tag = $slice($toString(value), 8, -1);
  42957. return $indexOf(typedArrays, tag) > -1;
  42958. }
  42959. if (!gOPD) { return false; }
  42960. return tryTypedArrays(value);
  42961. };
  42962. /***/ }),
  42963. /***/ 18552:
  42964. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42965. var getNative = __webpack_require__(10852),
  42966. root = __webpack_require__(55639);
  42967. /* Built-in method references that are verified to be native. */
  42968. var DataView = getNative(root, 'DataView');
  42969. module.exports = DataView;
  42970. /***/ }),
  42971. /***/ 1989:
  42972. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  42973. var hashClear = __webpack_require__(51789),
  42974. hashDelete = __webpack_require__(80401),
  42975. hashGet = __webpack_require__(57667),
  42976. hashHas = __webpack_require__(21327),
  42977. hashSet = __webpack_require__(81866);
  42978. /**
  42979. * Creates a hash object.
  42980. *
  42981. * @private
  42982. * @constructor
  42983. * @param {Array} [entries] The key-value pairs to cache.
  42984. */
  42985. function Hash(entries) {
  42986. var index = -1,
  42987. length = entries == null ? 0 : entries.length;
  42988. this.clear();
  42989. while (++index < length) {
  42990. var entry = entries[index];
  42991. this.set(entry[0], entry[1]);
  42992. }
  42993. }
  42994. // Add methods to `Hash`.
  42995. Hash.prototype.clear = hashClear;
  42996. Hash.prototype['delete'] = hashDelete;
  42997. Hash.prototype.get = hashGet;
  42998. Hash.prototype.has = hashHas;
  42999. Hash.prototype.set = hashSet;
  43000. module.exports = Hash;
  43001. /***/ }),
  43002. /***/ 38407:
  43003. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43004. var listCacheClear = __webpack_require__(27040),
  43005. listCacheDelete = __webpack_require__(14125),
  43006. listCacheGet = __webpack_require__(82117),
  43007. listCacheHas = __webpack_require__(67518),
  43008. listCacheSet = __webpack_require__(54705);
  43009. /**
  43010. * Creates an list cache object.
  43011. *
  43012. * @private
  43013. * @constructor
  43014. * @param {Array} [entries] The key-value pairs to cache.
  43015. */
  43016. function ListCache(entries) {
  43017. var index = -1,
  43018. length = entries == null ? 0 : entries.length;
  43019. this.clear();
  43020. while (++index < length) {
  43021. var entry = entries[index];
  43022. this.set(entry[0], entry[1]);
  43023. }
  43024. }
  43025. // Add methods to `ListCache`.
  43026. ListCache.prototype.clear = listCacheClear;
  43027. ListCache.prototype['delete'] = listCacheDelete;
  43028. ListCache.prototype.get = listCacheGet;
  43029. ListCache.prototype.has = listCacheHas;
  43030. ListCache.prototype.set = listCacheSet;
  43031. module.exports = ListCache;
  43032. /***/ }),
  43033. /***/ 57071:
  43034. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43035. var getNative = __webpack_require__(10852),
  43036. root = __webpack_require__(55639);
  43037. /* Built-in method references that are verified to be native. */
  43038. var Map = getNative(root, 'Map');
  43039. module.exports = Map;
  43040. /***/ }),
  43041. /***/ 83369:
  43042. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43043. var mapCacheClear = __webpack_require__(24785),
  43044. mapCacheDelete = __webpack_require__(11285),
  43045. mapCacheGet = __webpack_require__(96000),
  43046. mapCacheHas = __webpack_require__(49916),
  43047. mapCacheSet = __webpack_require__(95265);
  43048. /**
  43049. * Creates a map cache object to store key-value pairs.
  43050. *
  43051. * @private
  43052. * @constructor
  43053. * @param {Array} [entries] The key-value pairs to cache.
  43054. */
  43055. function MapCache(entries) {
  43056. var index = -1,
  43057. length = entries == null ? 0 : entries.length;
  43058. this.clear();
  43059. while (++index < length) {
  43060. var entry = entries[index];
  43061. this.set(entry[0], entry[1]);
  43062. }
  43063. }
  43064. // Add methods to `MapCache`.
  43065. MapCache.prototype.clear = mapCacheClear;
  43066. MapCache.prototype['delete'] = mapCacheDelete;
  43067. MapCache.prototype.get = mapCacheGet;
  43068. MapCache.prototype.has = mapCacheHas;
  43069. MapCache.prototype.set = mapCacheSet;
  43070. module.exports = MapCache;
  43071. /***/ }),
  43072. /***/ 53818:
  43073. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43074. var getNative = __webpack_require__(10852),
  43075. root = __webpack_require__(55639);
  43076. /* Built-in method references that are verified to be native. */
  43077. var Promise = getNative(root, 'Promise');
  43078. module.exports = Promise;
  43079. /***/ }),
  43080. /***/ 58525:
  43081. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43082. var getNative = __webpack_require__(10852),
  43083. root = __webpack_require__(55639);
  43084. /* Built-in method references that are verified to be native. */
  43085. var Set = getNative(root, 'Set');
  43086. module.exports = Set;
  43087. /***/ }),
  43088. /***/ 88668:
  43089. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43090. var MapCache = __webpack_require__(83369),
  43091. setCacheAdd = __webpack_require__(90619),
  43092. setCacheHas = __webpack_require__(72385);
  43093. /**
  43094. *
  43095. * Creates an array cache object to store unique values.
  43096. *
  43097. * @private
  43098. * @constructor
  43099. * @param {Array} [values] The values to cache.
  43100. */
  43101. function SetCache(values) {
  43102. var index = -1,
  43103. length = values == null ? 0 : values.length;
  43104. this.__data__ = new MapCache;
  43105. while (++index < length) {
  43106. this.add(values[index]);
  43107. }
  43108. }
  43109. // Add methods to `SetCache`.
  43110. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
  43111. SetCache.prototype.has = setCacheHas;
  43112. module.exports = SetCache;
  43113. /***/ }),
  43114. /***/ 46384:
  43115. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43116. var ListCache = __webpack_require__(38407),
  43117. stackClear = __webpack_require__(37465),
  43118. stackDelete = __webpack_require__(63779),
  43119. stackGet = __webpack_require__(67599),
  43120. stackHas = __webpack_require__(44758),
  43121. stackSet = __webpack_require__(34309);
  43122. /**
  43123. * Creates a stack cache object to store key-value pairs.
  43124. *
  43125. * @private
  43126. * @constructor
  43127. * @param {Array} [entries] The key-value pairs to cache.
  43128. */
  43129. function Stack(entries) {
  43130. var data = this.__data__ = new ListCache(entries);
  43131. this.size = data.size;
  43132. }
  43133. // Add methods to `Stack`.
  43134. Stack.prototype.clear = stackClear;
  43135. Stack.prototype['delete'] = stackDelete;
  43136. Stack.prototype.get = stackGet;
  43137. Stack.prototype.has = stackHas;
  43138. Stack.prototype.set = stackSet;
  43139. module.exports = Stack;
  43140. /***/ }),
  43141. /***/ 62705:
  43142. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43143. var root = __webpack_require__(55639);
  43144. /** Built-in value references. */
  43145. var Symbol = root.Symbol;
  43146. module.exports = Symbol;
  43147. /***/ }),
  43148. /***/ 11149:
  43149. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43150. var root = __webpack_require__(55639);
  43151. /** Built-in value references. */
  43152. var Uint8Array = root.Uint8Array;
  43153. module.exports = Uint8Array;
  43154. /***/ }),
  43155. /***/ 70577:
  43156. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43157. var getNative = __webpack_require__(10852),
  43158. root = __webpack_require__(55639);
  43159. /* Built-in method references that are verified to be native. */
  43160. var WeakMap = getNative(root, 'WeakMap');
  43161. module.exports = WeakMap;
  43162. /***/ }),
  43163. /***/ 44174:
  43164. /***/ ((module) => {
  43165. /**
  43166. * A specialized version of `baseAggregator` for arrays.
  43167. *
  43168. * @private
  43169. * @param {Array} [array] The array to iterate over.
  43170. * @param {Function} setter The function to set `accumulator` values.
  43171. * @param {Function} iteratee The iteratee to transform keys.
  43172. * @param {Object} accumulator The initial aggregated object.
  43173. * @returns {Function} Returns `accumulator`.
  43174. */
  43175. function arrayAggregator(array, setter, iteratee, accumulator) {
  43176. var index = -1,
  43177. length = array == null ? 0 : array.length;
  43178. while (++index < length) {
  43179. var value = array[index];
  43180. setter(accumulator, value, iteratee(value), array);
  43181. }
  43182. return accumulator;
  43183. }
  43184. module.exports = arrayAggregator;
  43185. /***/ }),
  43186. /***/ 34963:
  43187. /***/ ((module) => {
  43188. /**
  43189. * A specialized version of `_.filter` for arrays without support for
  43190. * iteratee shorthands.
  43191. *
  43192. * @private
  43193. * @param {Array} [array] The array to iterate over.
  43194. * @param {Function} predicate The function invoked per iteration.
  43195. * @returns {Array} Returns the new filtered array.
  43196. */
  43197. function arrayFilter(array, predicate) {
  43198. var index = -1,
  43199. length = array == null ? 0 : array.length,
  43200. resIndex = 0,
  43201. result = [];
  43202. while (++index < length) {
  43203. var value = array[index];
  43204. if (predicate(value, index, array)) {
  43205. result[resIndex++] = value;
  43206. }
  43207. }
  43208. return result;
  43209. }
  43210. module.exports = arrayFilter;
  43211. /***/ }),
  43212. /***/ 14636:
  43213. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43214. var baseTimes = __webpack_require__(22545),
  43215. isArguments = __webpack_require__(35694),
  43216. isArray = __webpack_require__(1469),
  43217. isBuffer = __webpack_require__(44144),
  43218. isIndex = __webpack_require__(65776),
  43219. isTypedArray = __webpack_require__(36719);
  43220. /** Used for built-in method references. */
  43221. var objectProto = Object.prototype;
  43222. /** Used to check objects for own properties. */
  43223. var hasOwnProperty = objectProto.hasOwnProperty;
  43224. /**
  43225. * Creates an array of the enumerable property names of the array-like `value`.
  43226. *
  43227. * @private
  43228. * @param {*} value The value to query.
  43229. * @param {boolean} inherited Specify returning inherited property names.
  43230. * @returns {Array} Returns the array of property names.
  43231. */
  43232. function arrayLikeKeys(value, inherited) {
  43233. var isArr = isArray(value),
  43234. isArg = !isArr && isArguments(value),
  43235. isBuff = !isArr && !isArg && isBuffer(value),
  43236. isType = !isArr && !isArg && !isBuff && isTypedArray(value),
  43237. skipIndexes = isArr || isArg || isBuff || isType,
  43238. result = skipIndexes ? baseTimes(value.length, String) : [],
  43239. length = result.length;
  43240. for (var key in value) {
  43241. if ((inherited || hasOwnProperty.call(value, key)) &&
  43242. !(skipIndexes && (
  43243. // Safari 9 has enumerable `arguments.length` in strict mode.
  43244. key == 'length' ||
  43245. // Node.js 0.10 has enumerable non-index properties on buffers.
  43246. (isBuff && (key == 'offset' || key == 'parent')) ||
  43247. // PhantomJS 2 has enumerable non-index properties on typed arrays.
  43248. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
  43249. // Skip index properties.
  43250. isIndex(key, length)
  43251. ))) {
  43252. result.push(key);
  43253. }
  43254. }
  43255. return result;
  43256. }
  43257. module.exports = arrayLikeKeys;
  43258. /***/ }),
  43259. /***/ 29932:
  43260. /***/ ((module) => {
  43261. /**
  43262. * A specialized version of `_.map` for arrays without support for iteratee
  43263. * shorthands.
  43264. *
  43265. * @private
  43266. * @param {Array} [array] The array to iterate over.
  43267. * @param {Function} iteratee The function invoked per iteration.
  43268. * @returns {Array} Returns the new mapped array.
  43269. */
  43270. function arrayMap(array, iteratee) {
  43271. var index = -1,
  43272. length = array == null ? 0 : array.length,
  43273. result = Array(length);
  43274. while (++index < length) {
  43275. result[index] = iteratee(array[index], index, array);
  43276. }
  43277. return result;
  43278. }
  43279. module.exports = arrayMap;
  43280. /***/ }),
  43281. /***/ 62488:
  43282. /***/ ((module) => {
  43283. /**
  43284. * Appends the elements of `values` to `array`.
  43285. *
  43286. * @private
  43287. * @param {Array} array The array to modify.
  43288. * @param {Array} values The values to append.
  43289. * @returns {Array} Returns `array`.
  43290. */
  43291. function arrayPush(array, values) {
  43292. var index = -1,
  43293. length = values.length,
  43294. offset = array.length;
  43295. while (++index < length) {
  43296. array[offset + index] = values[index];
  43297. }
  43298. return array;
  43299. }
  43300. module.exports = arrayPush;
  43301. /***/ }),
  43302. /***/ 82908:
  43303. /***/ ((module) => {
  43304. /**
  43305. * A specialized version of `_.some` for arrays without support for iteratee
  43306. * shorthands.
  43307. *
  43308. * @private
  43309. * @param {Array} [array] The array to iterate over.
  43310. * @param {Function} predicate The function invoked per iteration.
  43311. * @returns {boolean} Returns `true` if any element passes the predicate check,
  43312. * else `false`.
  43313. */
  43314. function arraySome(array, predicate) {
  43315. var index = -1,
  43316. length = array == null ? 0 : array.length;
  43317. while (++index < length) {
  43318. if (predicate(array[index], index, array)) {
  43319. return true;
  43320. }
  43321. }
  43322. return false;
  43323. }
  43324. module.exports = arraySome;
  43325. /***/ }),
  43326. /***/ 34865:
  43327. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43328. var baseAssignValue = __webpack_require__(89465),
  43329. eq = __webpack_require__(77813);
  43330. /** Used for built-in method references. */
  43331. var objectProto = Object.prototype;
  43332. /** Used to check objects for own properties. */
  43333. var hasOwnProperty = objectProto.hasOwnProperty;
  43334. /**
  43335. * Assigns `value` to `key` of `object` if the existing value is not equivalent
  43336. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  43337. * for equality comparisons.
  43338. *
  43339. * @private
  43340. * @param {Object} object The object to modify.
  43341. * @param {string} key The key of the property to assign.
  43342. * @param {*} value The value to assign.
  43343. */
  43344. function assignValue(object, key, value) {
  43345. var objValue = object[key];
  43346. if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
  43347. (value === undefined && !(key in object))) {
  43348. baseAssignValue(object, key, value);
  43349. }
  43350. }
  43351. module.exports = assignValue;
  43352. /***/ }),
  43353. /***/ 18470:
  43354. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43355. var eq = __webpack_require__(77813);
  43356. /**
  43357. * Gets the index at which the `key` is found in `array` of key-value pairs.
  43358. *
  43359. * @private
  43360. * @param {Array} array The array to inspect.
  43361. * @param {*} key The key to search for.
  43362. * @returns {number} Returns the index of the matched value, else `-1`.
  43363. */
  43364. function assocIndexOf(array, key) {
  43365. var length = array.length;
  43366. while (length--) {
  43367. if (eq(array[length][0], key)) {
  43368. return length;
  43369. }
  43370. }
  43371. return -1;
  43372. }
  43373. module.exports = assocIndexOf;
  43374. /***/ }),
  43375. /***/ 81119:
  43376. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43377. var baseEach = __webpack_require__(89881);
  43378. /**
  43379. * Aggregates elements of `collection` on `accumulator` with keys transformed
  43380. * by `iteratee` and values set by `setter`.
  43381. *
  43382. * @private
  43383. * @param {Array|Object} collection The collection to iterate over.
  43384. * @param {Function} setter The function to set `accumulator` values.
  43385. * @param {Function} iteratee The iteratee to transform keys.
  43386. * @param {Object} accumulator The initial aggregated object.
  43387. * @returns {Function} Returns `accumulator`.
  43388. */
  43389. function baseAggregator(collection, setter, iteratee, accumulator) {
  43390. baseEach(collection, function(value, key, collection) {
  43391. setter(accumulator, value, iteratee(value), collection);
  43392. });
  43393. return accumulator;
  43394. }
  43395. module.exports = baseAggregator;
  43396. /***/ }),
  43397. /***/ 89465:
  43398. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43399. var defineProperty = __webpack_require__(38777);
  43400. /**
  43401. * The base implementation of `assignValue` and `assignMergeValue` without
  43402. * value checks.
  43403. *
  43404. * @private
  43405. * @param {Object} object The object to modify.
  43406. * @param {string} key The key of the property to assign.
  43407. * @param {*} value The value to assign.
  43408. */
  43409. function baseAssignValue(object, key, value) {
  43410. if (key == '__proto__' && defineProperty) {
  43411. defineProperty(object, key, {
  43412. 'configurable': true,
  43413. 'enumerable': true,
  43414. 'value': value,
  43415. 'writable': true
  43416. });
  43417. } else {
  43418. object[key] = value;
  43419. }
  43420. }
  43421. module.exports = baseAssignValue;
  43422. /***/ }),
  43423. /***/ 89881:
  43424. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43425. var baseForOwn = __webpack_require__(47816),
  43426. createBaseEach = __webpack_require__(99291);
  43427. /**
  43428. * The base implementation of `_.forEach` without support for iteratee shorthands.
  43429. *
  43430. * @private
  43431. * @param {Array|Object} collection The collection to iterate over.
  43432. * @param {Function} iteratee The function invoked per iteration.
  43433. * @returns {Array|Object} Returns `collection`.
  43434. */
  43435. var baseEach = createBaseEach(baseForOwn);
  43436. module.exports = baseEach;
  43437. /***/ }),
  43438. /***/ 21078:
  43439. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43440. var arrayPush = __webpack_require__(62488),
  43441. isFlattenable = __webpack_require__(37285);
  43442. /**
  43443. * The base implementation of `_.flatten` with support for restricting flattening.
  43444. *
  43445. * @private
  43446. * @param {Array} array The array to flatten.
  43447. * @param {number} depth The maximum recursion depth.
  43448. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
  43449. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
  43450. * @param {Array} [result=[]] The initial result value.
  43451. * @returns {Array} Returns the new flattened array.
  43452. */
  43453. function baseFlatten(array, depth, predicate, isStrict, result) {
  43454. var index = -1,
  43455. length = array.length;
  43456. predicate || (predicate = isFlattenable);
  43457. result || (result = []);
  43458. while (++index < length) {
  43459. var value = array[index];
  43460. if (depth > 0 && predicate(value)) {
  43461. if (depth > 1) {
  43462. // Recursively flatten arrays (susceptible to call stack limits).
  43463. baseFlatten(value, depth - 1, predicate, isStrict, result);
  43464. } else {
  43465. arrayPush(result, value);
  43466. }
  43467. } else if (!isStrict) {
  43468. result[result.length] = value;
  43469. }
  43470. }
  43471. return result;
  43472. }
  43473. module.exports = baseFlatten;
  43474. /***/ }),
  43475. /***/ 28483:
  43476. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43477. var createBaseFor = __webpack_require__(25063);
  43478. /**
  43479. * The base implementation of `baseForOwn` which iterates over `object`
  43480. * properties returned by `keysFunc` and invokes `iteratee` for each property.
  43481. * Iteratee functions may exit iteration early by explicitly returning `false`.
  43482. *
  43483. * @private
  43484. * @param {Object} object The object to iterate over.
  43485. * @param {Function} iteratee The function invoked per iteration.
  43486. * @param {Function} keysFunc The function to get the keys of `object`.
  43487. * @returns {Object} Returns `object`.
  43488. */
  43489. var baseFor = createBaseFor();
  43490. module.exports = baseFor;
  43491. /***/ }),
  43492. /***/ 47816:
  43493. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43494. var baseFor = __webpack_require__(28483),
  43495. keys = __webpack_require__(3674);
  43496. /**
  43497. * The base implementation of `_.forOwn` without support for iteratee shorthands.
  43498. *
  43499. * @private
  43500. * @param {Object} object The object to iterate over.
  43501. * @param {Function} iteratee The function invoked per iteration.
  43502. * @returns {Object} Returns `object`.
  43503. */
  43504. function baseForOwn(object, iteratee) {
  43505. return object && baseFor(object, iteratee, keys);
  43506. }
  43507. module.exports = baseForOwn;
  43508. /***/ }),
  43509. /***/ 97786:
  43510. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43511. var castPath = __webpack_require__(71811),
  43512. toKey = __webpack_require__(40327);
  43513. /**
  43514. * The base implementation of `_.get` without support for default values.
  43515. *
  43516. * @private
  43517. * @param {Object} object The object to query.
  43518. * @param {Array|string} path The path of the property to get.
  43519. * @returns {*} Returns the resolved value.
  43520. */
  43521. function baseGet(object, path) {
  43522. path = castPath(path, object);
  43523. var index = 0,
  43524. length = path.length;
  43525. while (object != null && index < length) {
  43526. object = object[toKey(path[index++])];
  43527. }
  43528. return (index && index == length) ? object : undefined;
  43529. }
  43530. module.exports = baseGet;
  43531. /***/ }),
  43532. /***/ 68866:
  43533. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43534. var arrayPush = __webpack_require__(62488),
  43535. isArray = __webpack_require__(1469);
  43536. /**
  43537. * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
  43538. * `keysFunc` and `symbolsFunc` to get the enumerable property names and
  43539. * symbols of `object`.
  43540. *
  43541. * @private
  43542. * @param {Object} object The object to query.
  43543. * @param {Function} keysFunc The function to get the keys of `object`.
  43544. * @param {Function} symbolsFunc The function to get the symbols of `object`.
  43545. * @returns {Array} Returns the array of property names and symbols.
  43546. */
  43547. function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  43548. var result = keysFunc(object);
  43549. return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
  43550. }
  43551. module.exports = baseGetAllKeys;
  43552. /***/ }),
  43553. /***/ 44239:
  43554. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43555. var Symbol = __webpack_require__(62705),
  43556. getRawTag = __webpack_require__(89607),
  43557. objectToString = __webpack_require__(2333);
  43558. /** `Object#toString` result references. */
  43559. var nullTag = '[object Null]',
  43560. undefinedTag = '[object Undefined]';
  43561. /** Built-in value references. */
  43562. var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
  43563. /**
  43564. * The base implementation of `getTag` without fallbacks for buggy environments.
  43565. *
  43566. * @private
  43567. * @param {*} value The value to query.
  43568. * @returns {string} Returns the `toStringTag`.
  43569. */
  43570. function baseGetTag(value) {
  43571. if (value == null) {
  43572. return value === undefined ? undefinedTag : nullTag;
  43573. }
  43574. return (symToStringTag && symToStringTag in Object(value))
  43575. ? getRawTag(value)
  43576. : objectToString(value);
  43577. }
  43578. module.exports = baseGetTag;
  43579. /***/ }),
  43580. /***/ 13:
  43581. /***/ ((module) => {
  43582. /**
  43583. * The base implementation of `_.hasIn` without support for deep paths.
  43584. *
  43585. * @private
  43586. * @param {Object} [object] The object to query.
  43587. * @param {Array|string} key The key to check.
  43588. * @returns {boolean} Returns `true` if `key` exists, else `false`.
  43589. */
  43590. function baseHasIn(object, key) {
  43591. return object != null && key in Object(object);
  43592. }
  43593. module.exports = baseHasIn;
  43594. /***/ }),
  43595. /***/ 9454:
  43596. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43597. var baseGetTag = __webpack_require__(44239),
  43598. isObjectLike = __webpack_require__(37005);
  43599. /** `Object#toString` result references. */
  43600. var argsTag = '[object Arguments]';
  43601. /**
  43602. * The base implementation of `_.isArguments`.
  43603. *
  43604. * @private
  43605. * @param {*} value The value to check.
  43606. * @returns {boolean} Returns `true` if `value` is an `arguments` object,
  43607. */
  43608. function baseIsArguments(value) {
  43609. return isObjectLike(value) && baseGetTag(value) == argsTag;
  43610. }
  43611. module.exports = baseIsArguments;
  43612. /***/ }),
  43613. /***/ 90939:
  43614. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43615. var baseIsEqualDeep = __webpack_require__(2492),
  43616. isObjectLike = __webpack_require__(37005);
  43617. /**
  43618. * The base implementation of `_.isEqual` which supports partial comparisons
  43619. * and tracks traversed objects.
  43620. *
  43621. * @private
  43622. * @param {*} value The value to compare.
  43623. * @param {*} other The other value to compare.
  43624. * @param {boolean} bitmask The bitmask flags.
  43625. * 1 - Unordered comparison
  43626. * 2 - Partial comparison
  43627. * @param {Function} [customizer] The function to customize comparisons.
  43628. * @param {Object} [stack] Tracks traversed `value` and `other` objects.
  43629. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  43630. */
  43631. function baseIsEqual(value, other, bitmask, customizer, stack) {
  43632. if (value === other) {
  43633. return true;
  43634. }
  43635. if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
  43636. return value !== value && other !== other;
  43637. }
  43638. return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
  43639. }
  43640. module.exports = baseIsEqual;
  43641. /***/ }),
  43642. /***/ 2492:
  43643. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43644. var Stack = __webpack_require__(46384),
  43645. equalArrays = __webpack_require__(67114),
  43646. equalByTag = __webpack_require__(18351),
  43647. equalObjects = __webpack_require__(16096),
  43648. getTag = __webpack_require__(64160),
  43649. isArray = __webpack_require__(1469),
  43650. isBuffer = __webpack_require__(44144),
  43651. isTypedArray = __webpack_require__(36719);
  43652. /** Used to compose bitmasks for value comparisons. */
  43653. var COMPARE_PARTIAL_FLAG = 1;
  43654. /** `Object#toString` result references. */
  43655. var argsTag = '[object Arguments]',
  43656. arrayTag = '[object Array]',
  43657. objectTag = '[object Object]';
  43658. /** Used for built-in method references. */
  43659. var objectProto = Object.prototype;
  43660. /** Used to check objects for own properties. */
  43661. var hasOwnProperty = objectProto.hasOwnProperty;
  43662. /**
  43663. * A specialized version of `baseIsEqual` for arrays and objects which performs
  43664. * deep comparisons and tracks traversed objects enabling objects with circular
  43665. * references to be compared.
  43666. *
  43667. * @private
  43668. * @param {Object} object The object to compare.
  43669. * @param {Object} other The other object to compare.
  43670. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  43671. * @param {Function} customizer The function to customize comparisons.
  43672. * @param {Function} equalFunc The function to determine equivalents of values.
  43673. * @param {Object} [stack] Tracks traversed `object` and `other` objects.
  43674. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  43675. */
  43676. function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
  43677. var objIsArr = isArray(object),
  43678. othIsArr = isArray(other),
  43679. objTag = objIsArr ? arrayTag : getTag(object),
  43680. othTag = othIsArr ? arrayTag : getTag(other);
  43681. objTag = objTag == argsTag ? objectTag : objTag;
  43682. othTag = othTag == argsTag ? objectTag : othTag;
  43683. var objIsObj = objTag == objectTag,
  43684. othIsObj = othTag == objectTag,
  43685. isSameTag = objTag == othTag;
  43686. if (isSameTag && isBuffer(object)) {
  43687. if (!isBuffer(other)) {
  43688. return false;
  43689. }
  43690. objIsArr = true;
  43691. objIsObj = false;
  43692. }
  43693. if (isSameTag && !objIsObj) {
  43694. stack || (stack = new Stack);
  43695. return (objIsArr || isTypedArray(object))
  43696. ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
  43697. : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
  43698. }
  43699. if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
  43700. var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
  43701. othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
  43702. if (objIsWrapped || othIsWrapped) {
  43703. var objUnwrapped = objIsWrapped ? object.value() : object,
  43704. othUnwrapped = othIsWrapped ? other.value() : other;
  43705. stack || (stack = new Stack);
  43706. return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
  43707. }
  43708. }
  43709. if (!isSameTag) {
  43710. return false;
  43711. }
  43712. stack || (stack = new Stack);
  43713. return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
  43714. }
  43715. module.exports = baseIsEqualDeep;
  43716. /***/ }),
  43717. /***/ 2958:
  43718. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43719. var Stack = __webpack_require__(46384),
  43720. baseIsEqual = __webpack_require__(90939);
  43721. /** Used to compose bitmasks for value comparisons. */
  43722. var COMPARE_PARTIAL_FLAG = 1,
  43723. COMPARE_UNORDERED_FLAG = 2;
  43724. /**
  43725. * The base implementation of `_.isMatch` without support for iteratee shorthands.
  43726. *
  43727. * @private
  43728. * @param {Object} object The object to inspect.
  43729. * @param {Object} source The object of property values to match.
  43730. * @param {Array} matchData The property names, values, and compare flags to match.
  43731. * @param {Function} [customizer] The function to customize comparisons.
  43732. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  43733. */
  43734. function baseIsMatch(object, source, matchData, customizer) {
  43735. var index = matchData.length,
  43736. length = index,
  43737. noCustomizer = !customizer;
  43738. if (object == null) {
  43739. return !length;
  43740. }
  43741. object = Object(object);
  43742. while (index--) {
  43743. var data = matchData[index];
  43744. if ((noCustomizer && data[2])
  43745. ? data[1] !== object[data[0]]
  43746. : !(data[0] in object)
  43747. ) {
  43748. return false;
  43749. }
  43750. }
  43751. while (++index < length) {
  43752. data = matchData[index];
  43753. var key = data[0],
  43754. objValue = object[key],
  43755. srcValue = data[1];
  43756. if (noCustomizer && data[2]) {
  43757. if (objValue === undefined && !(key in object)) {
  43758. return false;
  43759. }
  43760. } else {
  43761. var stack = new Stack;
  43762. if (customizer) {
  43763. var result = customizer(objValue, srcValue, key, object, source, stack);
  43764. }
  43765. if (!(result === undefined
  43766. ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
  43767. : result
  43768. )) {
  43769. return false;
  43770. }
  43771. }
  43772. }
  43773. return true;
  43774. }
  43775. module.exports = baseIsMatch;
  43776. /***/ }),
  43777. /***/ 28458:
  43778. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43779. var isFunction = __webpack_require__(23560),
  43780. isMasked = __webpack_require__(15346),
  43781. isObject = __webpack_require__(13218),
  43782. toSource = __webpack_require__(80346);
  43783. /**
  43784. * Used to match `RegExp`
  43785. * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
  43786. */
  43787. var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
  43788. /** Used to detect host constructors (Safari). */
  43789. var reIsHostCtor = /^\[object .+?Constructor\]$/;
  43790. /** Used for built-in method references. */
  43791. var funcProto = Function.prototype,
  43792. objectProto = Object.prototype;
  43793. /** Used to resolve the decompiled source of functions. */
  43794. var funcToString = funcProto.toString;
  43795. /** Used to check objects for own properties. */
  43796. var hasOwnProperty = objectProto.hasOwnProperty;
  43797. /** Used to detect if a method is native. */
  43798. var reIsNative = RegExp('^' +
  43799. funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
  43800. .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
  43801. );
  43802. /**
  43803. * The base implementation of `_.isNative` without bad shim checks.
  43804. *
  43805. * @private
  43806. * @param {*} value The value to check.
  43807. * @returns {boolean} Returns `true` if `value` is a native function,
  43808. * else `false`.
  43809. */
  43810. function baseIsNative(value) {
  43811. if (!isObject(value) || isMasked(value)) {
  43812. return false;
  43813. }
  43814. var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
  43815. return pattern.test(toSource(value));
  43816. }
  43817. module.exports = baseIsNative;
  43818. /***/ }),
  43819. /***/ 38749:
  43820. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43821. var baseGetTag = __webpack_require__(44239),
  43822. isLength = __webpack_require__(41780),
  43823. isObjectLike = __webpack_require__(37005);
  43824. /** `Object#toString` result references. */
  43825. var argsTag = '[object Arguments]',
  43826. arrayTag = '[object Array]',
  43827. boolTag = '[object Boolean]',
  43828. dateTag = '[object Date]',
  43829. errorTag = '[object Error]',
  43830. funcTag = '[object Function]',
  43831. mapTag = '[object Map]',
  43832. numberTag = '[object Number]',
  43833. objectTag = '[object Object]',
  43834. regexpTag = '[object RegExp]',
  43835. setTag = '[object Set]',
  43836. stringTag = '[object String]',
  43837. weakMapTag = '[object WeakMap]';
  43838. var arrayBufferTag = '[object ArrayBuffer]',
  43839. dataViewTag = '[object DataView]',
  43840. float32Tag = '[object Float32Array]',
  43841. float64Tag = '[object Float64Array]',
  43842. int8Tag = '[object Int8Array]',
  43843. int16Tag = '[object Int16Array]',
  43844. int32Tag = '[object Int32Array]',
  43845. uint8Tag = '[object Uint8Array]',
  43846. uint8ClampedTag = '[object Uint8ClampedArray]',
  43847. uint16Tag = '[object Uint16Array]',
  43848. uint32Tag = '[object Uint32Array]';
  43849. /** Used to identify `toStringTag` values of typed arrays. */
  43850. var typedArrayTags = {};
  43851. typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  43852. typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  43853. typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  43854. typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  43855. typedArrayTags[uint32Tag] = true;
  43856. typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  43857. typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  43858. typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  43859. typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  43860. typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  43861. typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  43862. typedArrayTags[setTag] = typedArrayTags[stringTag] =
  43863. typedArrayTags[weakMapTag] = false;
  43864. /**
  43865. * The base implementation of `_.isTypedArray` without Node.js optimizations.
  43866. *
  43867. * @private
  43868. * @param {*} value The value to check.
  43869. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
  43870. */
  43871. function baseIsTypedArray(value) {
  43872. return isObjectLike(value) &&
  43873. isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
  43874. }
  43875. module.exports = baseIsTypedArray;
  43876. /***/ }),
  43877. /***/ 67206:
  43878. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43879. var baseMatches = __webpack_require__(91573),
  43880. baseMatchesProperty = __webpack_require__(16432),
  43881. identity = __webpack_require__(6557),
  43882. isArray = __webpack_require__(1469),
  43883. property = __webpack_require__(39601);
  43884. /**
  43885. * The base implementation of `_.iteratee`.
  43886. *
  43887. * @private
  43888. * @param {*} [value=_.identity] The value to convert to an iteratee.
  43889. * @returns {Function} Returns the iteratee.
  43890. */
  43891. function baseIteratee(value) {
  43892. // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
  43893. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
  43894. if (typeof value == 'function') {
  43895. return value;
  43896. }
  43897. if (value == null) {
  43898. return identity;
  43899. }
  43900. if (typeof value == 'object') {
  43901. return isArray(value)
  43902. ? baseMatchesProperty(value[0], value[1])
  43903. : baseMatches(value);
  43904. }
  43905. return property(value);
  43906. }
  43907. module.exports = baseIteratee;
  43908. /***/ }),
  43909. /***/ 280:
  43910. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43911. var isPrototype = __webpack_require__(25726),
  43912. nativeKeys = __webpack_require__(86916);
  43913. /** Used for built-in method references. */
  43914. var objectProto = Object.prototype;
  43915. /** Used to check objects for own properties. */
  43916. var hasOwnProperty = objectProto.hasOwnProperty;
  43917. /**
  43918. * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
  43919. *
  43920. * @private
  43921. * @param {Object} object The object to query.
  43922. * @returns {Array} Returns the array of property names.
  43923. */
  43924. function baseKeys(object) {
  43925. if (!isPrototype(object)) {
  43926. return nativeKeys(object);
  43927. }
  43928. var result = [];
  43929. for (var key in Object(object)) {
  43930. if (hasOwnProperty.call(object, key) && key != 'constructor') {
  43931. result.push(key);
  43932. }
  43933. }
  43934. return result;
  43935. }
  43936. module.exports = baseKeys;
  43937. /***/ }),
  43938. /***/ 10313:
  43939. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43940. var isObject = __webpack_require__(13218),
  43941. isPrototype = __webpack_require__(25726),
  43942. nativeKeysIn = __webpack_require__(33498);
  43943. /** Used for built-in method references. */
  43944. var objectProto = Object.prototype;
  43945. /** Used to check objects for own properties. */
  43946. var hasOwnProperty = objectProto.hasOwnProperty;
  43947. /**
  43948. * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
  43949. *
  43950. * @private
  43951. * @param {Object} object The object to query.
  43952. * @returns {Array} Returns the array of property names.
  43953. */
  43954. function baseKeysIn(object) {
  43955. if (!isObject(object)) {
  43956. return nativeKeysIn(object);
  43957. }
  43958. var isProto = isPrototype(object),
  43959. result = [];
  43960. for (var key in object) {
  43961. if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
  43962. result.push(key);
  43963. }
  43964. }
  43965. return result;
  43966. }
  43967. module.exports = baseKeysIn;
  43968. /***/ }),
  43969. /***/ 69199:
  43970. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43971. var baseEach = __webpack_require__(89881),
  43972. isArrayLike = __webpack_require__(98612);
  43973. /**
  43974. * The base implementation of `_.map` without support for iteratee shorthands.
  43975. *
  43976. * @private
  43977. * @param {Array|Object} collection The collection to iterate over.
  43978. * @param {Function} iteratee The function invoked per iteration.
  43979. * @returns {Array} Returns the new mapped array.
  43980. */
  43981. function baseMap(collection, iteratee) {
  43982. var index = -1,
  43983. result = isArrayLike(collection) ? Array(collection.length) : [];
  43984. baseEach(collection, function(value, key, collection) {
  43985. result[++index] = iteratee(value, key, collection);
  43986. });
  43987. return result;
  43988. }
  43989. module.exports = baseMap;
  43990. /***/ }),
  43991. /***/ 91573:
  43992. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  43993. var baseIsMatch = __webpack_require__(2958),
  43994. getMatchData = __webpack_require__(1499),
  43995. matchesStrictComparable = __webpack_require__(42634);
  43996. /**
  43997. * The base implementation of `_.matches` which doesn't clone `source`.
  43998. *
  43999. * @private
  44000. * @param {Object} source The object of property values to match.
  44001. * @returns {Function} Returns the new spec function.
  44002. */
  44003. function baseMatches(source) {
  44004. var matchData = getMatchData(source);
  44005. if (matchData.length == 1 && matchData[0][2]) {
  44006. return matchesStrictComparable(matchData[0][0], matchData[0][1]);
  44007. }
  44008. return function(object) {
  44009. return object === source || baseIsMatch(object, source, matchData);
  44010. };
  44011. }
  44012. module.exports = baseMatches;
  44013. /***/ }),
  44014. /***/ 16432:
  44015. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44016. var baseIsEqual = __webpack_require__(90939),
  44017. get = __webpack_require__(27361),
  44018. hasIn = __webpack_require__(79095),
  44019. isKey = __webpack_require__(15403),
  44020. isStrictComparable = __webpack_require__(89162),
  44021. matchesStrictComparable = __webpack_require__(42634),
  44022. toKey = __webpack_require__(40327);
  44023. /** Used to compose bitmasks for value comparisons. */
  44024. var COMPARE_PARTIAL_FLAG = 1,
  44025. COMPARE_UNORDERED_FLAG = 2;
  44026. /**
  44027. * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
  44028. *
  44029. * @private
  44030. * @param {string} path The path of the property to get.
  44031. * @param {*} srcValue The value to match.
  44032. * @returns {Function} Returns the new spec function.
  44033. */
  44034. function baseMatchesProperty(path, srcValue) {
  44035. if (isKey(path) && isStrictComparable(srcValue)) {
  44036. return matchesStrictComparable(toKey(path), srcValue);
  44037. }
  44038. return function(object) {
  44039. var objValue = get(object, path);
  44040. return (objValue === undefined && objValue === srcValue)
  44041. ? hasIn(object, path)
  44042. : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
  44043. };
  44044. }
  44045. module.exports = baseMatchesProperty;
  44046. /***/ }),
  44047. /***/ 63012:
  44048. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44049. var baseGet = __webpack_require__(97786),
  44050. baseSet = __webpack_require__(10611),
  44051. castPath = __webpack_require__(71811);
  44052. /**
  44053. * The base implementation of `_.pickBy` without support for iteratee shorthands.
  44054. *
  44055. * @private
  44056. * @param {Object} object The source object.
  44057. * @param {string[]} paths The property paths to pick.
  44058. * @param {Function} predicate The function invoked per property.
  44059. * @returns {Object} Returns the new object.
  44060. */
  44061. function basePickBy(object, paths, predicate) {
  44062. var index = -1,
  44063. length = paths.length,
  44064. result = {};
  44065. while (++index < length) {
  44066. var path = paths[index],
  44067. value = baseGet(object, path);
  44068. if (predicate(value, path)) {
  44069. baseSet(result, castPath(path, object), value);
  44070. }
  44071. }
  44072. return result;
  44073. }
  44074. module.exports = basePickBy;
  44075. /***/ }),
  44076. /***/ 40371:
  44077. /***/ ((module) => {
  44078. /**
  44079. * The base implementation of `_.property` without support for deep paths.
  44080. *
  44081. * @private
  44082. * @param {string} key The key of the property to get.
  44083. * @returns {Function} Returns the new accessor function.
  44084. */
  44085. function baseProperty(key) {
  44086. return function(object) {
  44087. return object == null ? undefined : object[key];
  44088. };
  44089. }
  44090. module.exports = baseProperty;
  44091. /***/ }),
  44092. /***/ 79152:
  44093. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44094. var baseGet = __webpack_require__(97786);
  44095. /**
  44096. * A specialized version of `baseProperty` which supports deep paths.
  44097. *
  44098. * @private
  44099. * @param {Array|string} path The path of the property to get.
  44100. * @returns {Function} Returns the new accessor function.
  44101. */
  44102. function basePropertyDeep(path) {
  44103. return function(object) {
  44104. return baseGet(object, path);
  44105. };
  44106. }
  44107. module.exports = basePropertyDeep;
  44108. /***/ }),
  44109. /***/ 10611:
  44110. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44111. var assignValue = __webpack_require__(34865),
  44112. castPath = __webpack_require__(71811),
  44113. isIndex = __webpack_require__(65776),
  44114. isObject = __webpack_require__(13218),
  44115. toKey = __webpack_require__(40327);
  44116. /**
  44117. * The base implementation of `_.set`.
  44118. *
  44119. * @private
  44120. * @param {Object} object The object to modify.
  44121. * @param {Array|string} path The path of the property to set.
  44122. * @param {*} value The value to set.
  44123. * @param {Function} [customizer] The function to customize path creation.
  44124. * @returns {Object} Returns `object`.
  44125. */
  44126. function baseSet(object, path, value, customizer) {
  44127. if (!isObject(object)) {
  44128. return object;
  44129. }
  44130. path = castPath(path, object);
  44131. var index = -1,
  44132. length = path.length,
  44133. lastIndex = length - 1,
  44134. nested = object;
  44135. while (nested != null && ++index < length) {
  44136. var key = toKey(path[index]),
  44137. newValue = value;
  44138. if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
  44139. return object;
  44140. }
  44141. if (index != lastIndex) {
  44142. var objValue = nested[key];
  44143. newValue = customizer ? customizer(objValue, key, nested) : undefined;
  44144. if (newValue === undefined) {
  44145. newValue = isObject(objValue)
  44146. ? objValue
  44147. : (isIndex(path[index + 1]) ? [] : {});
  44148. }
  44149. }
  44150. assignValue(nested, key, newValue);
  44151. nested = nested[key];
  44152. }
  44153. return object;
  44154. }
  44155. module.exports = baseSet;
  44156. /***/ }),
  44157. /***/ 22545:
  44158. /***/ ((module) => {
  44159. /**
  44160. * The base implementation of `_.times` without support for iteratee shorthands
  44161. * or max array length checks.
  44162. *
  44163. * @private
  44164. * @param {number} n The number of times to invoke `iteratee`.
  44165. * @param {Function} iteratee The function invoked per iteration.
  44166. * @returns {Array} Returns the array of results.
  44167. */
  44168. function baseTimes(n, iteratee) {
  44169. var index = -1,
  44170. result = Array(n);
  44171. while (++index < n) {
  44172. result[index] = iteratee(index);
  44173. }
  44174. return result;
  44175. }
  44176. module.exports = baseTimes;
  44177. /***/ }),
  44178. /***/ 80531:
  44179. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44180. var Symbol = __webpack_require__(62705),
  44181. arrayMap = __webpack_require__(29932),
  44182. isArray = __webpack_require__(1469),
  44183. isSymbol = __webpack_require__(33448);
  44184. /** Used as references for various `Number` constants. */
  44185. var INFINITY = 1 / 0;
  44186. /** Used to convert symbols to primitives and strings. */
  44187. var symbolProto = Symbol ? Symbol.prototype : undefined,
  44188. symbolToString = symbolProto ? symbolProto.toString : undefined;
  44189. /**
  44190. * The base implementation of `_.toString` which doesn't convert nullish
  44191. * values to empty strings.
  44192. *
  44193. * @private
  44194. * @param {*} value The value to process.
  44195. * @returns {string} Returns the string.
  44196. */
  44197. function baseToString(value) {
  44198. // Exit early for strings to avoid a performance hit in some environments.
  44199. if (typeof value == 'string') {
  44200. return value;
  44201. }
  44202. if (isArray(value)) {
  44203. // Recursively convert values (susceptible to call stack limits).
  44204. return arrayMap(value, baseToString) + '';
  44205. }
  44206. if (isSymbol(value)) {
  44207. return symbolToString ? symbolToString.call(value) : '';
  44208. }
  44209. var result = (value + '');
  44210. return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
  44211. }
  44212. module.exports = baseToString;
  44213. /***/ }),
  44214. /***/ 7518:
  44215. /***/ ((module) => {
  44216. /**
  44217. * The base implementation of `_.unary` without support for storing metadata.
  44218. *
  44219. * @private
  44220. * @param {Function} func The function to cap arguments for.
  44221. * @returns {Function} Returns the new capped function.
  44222. */
  44223. function baseUnary(func) {
  44224. return function(value) {
  44225. return func(value);
  44226. };
  44227. }
  44228. module.exports = baseUnary;
  44229. /***/ }),
  44230. /***/ 74757:
  44231. /***/ ((module) => {
  44232. /**
  44233. * Checks if a `cache` value for `key` exists.
  44234. *
  44235. * @private
  44236. * @param {Object} cache The cache to query.
  44237. * @param {string} key The key of the entry to check.
  44238. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  44239. */
  44240. function cacheHas(cache, key) {
  44241. return cache.has(key);
  44242. }
  44243. module.exports = cacheHas;
  44244. /***/ }),
  44245. /***/ 71811:
  44246. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44247. var isArray = __webpack_require__(1469),
  44248. isKey = __webpack_require__(15403),
  44249. stringToPath = __webpack_require__(55514),
  44250. toString = __webpack_require__(79833);
  44251. /**
  44252. * Casts `value` to a path array if it's not one.
  44253. *
  44254. * @private
  44255. * @param {*} value The value to inspect.
  44256. * @param {Object} [object] The object to query keys on.
  44257. * @returns {Array} Returns the cast property path array.
  44258. */
  44259. function castPath(value, object) {
  44260. if (isArray(value)) {
  44261. return value;
  44262. }
  44263. return isKey(value, object) ? [value] : stringToPath(toString(value));
  44264. }
  44265. module.exports = castPath;
  44266. /***/ }),
  44267. /***/ 14429:
  44268. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44269. var root = __webpack_require__(55639);
  44270. /** Used to detect overreaching core-js shims. */
  44271. var coreJsData = root['__core-js_shared__'];
  44272. module.exports = coreJsData;
  44273. /***/ }),
  44274. /***/ 55189:
  44275. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44276. var arrayAggregator = __webpack_require__(44174),
  44277. baseAggregator = __webpack_require__(81119),
  44278. baseIteratee = __webpack_require__(67206),
  44279. isArray = __webpack_require__(1469);
  44280. /**
  44281. * Creates a function like `_.groupBy`.
  44282. *
  44283. * @private
  44284. * @param {Function} setter The function to set accumulator values.
  44285. * @param {Function} [initializer] The accumulator object initializer.
  44286. * @returns {Function} Returns the new aggregator function.
  44287. */
  44288. function createAggregator(setter, initializer) {
  44289. return function(collection, iteratee) {
  44290. var func = isArray(collection) ? arrayAggregator : baseAggregator,
  44291. accumulator = initializer ? initializer() : {};
  44292. return func(collection, setter, baseIteratee(iteratee, 2), accumulator);
  44293. };
  44294. }
  44295. module.exports = createAggregator;
  44296. /***/ }),
  44297. /***/ 99291:
  44298. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44299. var isArrayLike = __webpack_require__(98612);
  44300. /**
  44301. * Creates a `baseEach` or `baseEachRight` function.
  44302. *
  44303. * @private
  44304. * @param {Function} eachFunc The function to iterate over a collection.
  44305. * @param {boolean} [fromRight] Specify iterating from right to left.
  44306. * @returns {Function} Returns the new base function.
  44307. */
  44308. function createBaseEach(eachFunc, fromRight) {
  44309. return function(collection, iteratee) {
  44310. if (collection == null) {
  44311. return collection;
  44312. }
  44313. if (!isArrayLike(collection)) {
  44314. return eachFunc(collection, iteratee);
  44315. }
  44316. var length = collection.length,
  44317. index = fromRight ? length : -1,
  44318. iterable = Object(collection);
  44319. while ((fromRight ? index-- : ++index < length)) {
  44320. if (iteratee(iterable[index], index, iterable) === false) {
  44321. break;
  44322. }
  44323. }
  44324. return collection;
  44325. };
  44326. }
  44327. module.exports = createBaseEach;
  44328. /***/ }),
  44329. /***/ 25063:
  44330. /***/ ((module) => {
  44331. /**
  44332. * Creates a base function for methods like `_.forIn` and `_.forOwn`.
  44333. *
  44334. * @private
  44335. * @param {boolean} [fromRight] Specify iterating from right to left.
  44336. * @returns {Function} Returns the new base function.
  44337. */
  44338. function createBaseFor(fromRight) {
  44339. return function(object, iteratee, keysFunc) {
  44340. var index = -1,
  44341. iterable = Object(object),
  44342. props = keysFunc(object),
  44343. length = props.length;
  44344. while (length--) {
  44345. var key = props[fromRight ? length : ++index];
  44346. if (iteratee(iterable[key], key, iterable) === false) {
  44347. break;
  44348. }
  44349. }
  44350. return object;
  44351. };
  44352. }
  44353. module.exports = createBaseFor;
  44354. /***/ }),
  44355. /***/ 38777:
  44356. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44357. var getNative = __webpack_require__(10852);
  44358. var defineProperty = (function() {
  44359. try {
  44360. var func = getNative(Object, 'defineProperty');
  44361. func({}, '', {});
  44362. return func;
  44363. } catch (e) {}
  44364. }());
  44365. module.exports = defineProperty;
  44366. /***/ }),
  44367. /***/ 67114:
  44368. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44369. var SetCache = __webpack_require__(88668),
  44370. arraySome = __webpack_require__(82908),
  44371. cacheHas = __webpack_require__(74757);
  44372. /** Used to compose bitmasks for value comparisons. */
  44373. var COMPARE_PARTIAL_FLAG = 1,
  44374. COMPARE_UNORDERED_FLAG = 2;
  44375. /**
  44376. * A specialized version of `baseIsEqualDeep` for arrays with support for
  44377. * partial deep comparisons.
  44378. *
  44379. * @private
  44380. * @param {Array} array The array to compare.
  44381. * @param {Array} other The other array to compare.
  44382. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  44383. * @param {Function} customizer The function to customize comparisons.
  44384. * @param {Function} equalFunc The function to determine equivalents of values.
  44385. * @param {Object} stack Tracks traversed `array` and `other` objects.
  44386. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
  44387. */
  44388. function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
  44389. var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
  44390. arrLength = array.length,
  44391. othLength = other.length;
  44392. if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
  44393. return false;
  44394. }
  44395. // Check that cyclic values are equal.
  44396. var arrStacked = stack.get(array);
  44397. var othStacked = stack.get(other);
  44398. if (arrStacked && othStacked) {
  44399. return arrStacked == other && othStacked == array;
  44400. }
  44401. var index = -1,
  44402. result = true,
  44403. seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
  44404. stack.set(array, other);
  44405. stack.set(other, array);
  44406. // Ignore non-index properties.
  44407. while (++index < arrLength) {
  44408. var arrValue = array[index],
  44409. othValue = other[index];
  44410. if (customizer) {
  44411. var compared = isPartial
  44412. ? customizer(othValue, arrValue, index, other, array, stack)
  44413. : customizer(arrValue, othValue, index, array, other, stack);
  44414. }
  44415. if (compared !== undefined) {
  44416. if (compared) {
  44417. continue;
  44418. }
  44419. result = false;
  44420. break;
  44421. }
  44422. // Recursively compare arrays (susceptible to call stack limits).
  44423. if (seen) {
  44424. if (!arraySome(other, function(othValue, othIndex) {
  44425. if (!cacheHas(seen, othIndex) &&
  44426. (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
  44427. return seen.push(othIndex);
  44428. }
  44429. })) {
  44430. result = false;
  44431. break;
  44432. }
  44433. } else if (!(
  44434. arrValue === othValue ||
  44435. equalFunc(arrValue, othValue, bitmask, customizer, stack)
  44436. )) {
  44437. result = false;
  44438. break;
  44439. }
  44440. }
  44441. stack['delete'](array);
  44442. stack['delete'](other);
  44443. return result;
  44444. }
  44445. module.exports = equalArrays;
  44446. /***/ }),
  44447. /***/ 18351:
  44448. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44449. var Symbol = __webpack_require__(62705),
  44450. Uint8Array = __webpack_require__(11149),
  44451. eq = __webpack_require__(77813),
  44452. equalArrays = __webpack_require__(67114),
  44453. mapToArray = __webpack_require__(68776),
  44454. setToArray = __webpack_require__(21814);
  44455. /** Used to compose bitmasks for value comparisons. */
  44456. var COMPARE_PARTIAL_FLAG = 1,
  44457. COMPARE_UNORDERED_FLAG = 2;
  44458. /** `Object#toString` result references. */
  44459. var boolTag = '[object Boolean]',
  44460. dateTag = '[object Date]',
  44461. errorTag = '[object Error]',
  44462. mapTag = '[object Map]',
  44463. numberTag = '[object Number]',
  44464. regexpTag = '[object RegExp]',
  44465. setTag = '[object Set]',
  44466. stringTag = '[object String]',
  44467. symbolTag = '[object Symbol]';
  44468. var arrayBufferTag = '[object ArrayBuffer]',
  44469. dataViewTag = '[object DataView]';
  44470. /** Used to convert symbols to primitives and strings. */
  44471. var symbolProto = Symbol ? Symbol.prototype : undefined,
  44472. symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
  44473. /**
  44474. * A specialized version of `baseIsEqualDeep` for comparing objects of
  44475. * the same `toStringTag`.
  44476. *
  44477. * **Note:** This function only supports comparing values with tags of
  44478. * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
  44479. *
  44480. * @private
  44481. * @param {Object} object The object to compare.
  44482. * @param {Object} other The other object to compare.
  44483. * @param {string} tag The `toStringTag` of the objects to compare.
  44484. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  44485. * @param {Function} customizer The function to customize comparisons.
  44486. * @param {Function} equalFunc The function to determine equivalents of values.
  44487. * @param {Object} stack Tracks traversed `object` and `other` objects.
  44488. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  44489. */
  44490. function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
  44491. switch (tag) {
  44492. case dataViewTag:
  44493. if ((object.byteLength != other.byteLength) ||
  44494. (object.byteOffset != other.byteOffset)) {
  44495. return false;
  44496. }
  44497. object = object.buffer;
  44498. other = other.buffer;
  44499. case arrayBufferTag:
  44500. if ((object.byteLength != other.byteLength) ||
  44501. !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
  44502. return false;
  44503. }
  44504. return true;
  44505. case boolTag:
  44506. case dateTag:
  44507. case numberTag:
  44508. // Coerce booleans to `1` or `0` and dates to milliseconds.
  44509. // Invalid dates are coerced to `NaN`.
  44510. return eq(+object, +other);
  44511. case errorTag:
  44512. return object.name == other.name && object.message == other.message;
  44513. case regexpTag:
  44514. case stringTag:
  44515. // Coerce regexes to strings and treat strings, primitives and objects,
  44516. // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
  44517. // for more details.
  44518. return object == (other + '');
  44519. case mapTag:
  44520. var convert = mapToArray;
  44521. case setTag:
  44522. var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
  44523. convert || (convert = setToArray);
  44524. if (object.size != other.size && !isPartial) {
  44525. return false;
  44526. }
  44527. // Assume cyclic values are equal.
  44528. var stacked = stack.get(object);
  44529. if (stacked) {
  44530. return stacked == other;
  44531. }
  44532. bitmask |= COMPARE_UNORDERED_FLAG;
  44533. // Recursively compare objects (susceptible to call stack limits).
  44534. stack.set(object, other);
  44535. var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
  44536. stack['delete'](object);
  44537. return result;
  44538. case symbolTag:
  44539. if (symbolValueOf) {
  44540. return symbolValueOf.call(object) == symbolValueOf.call(other);
  44541. }
  44542. }
  44543. return false;
  44544. }
  44545. module.exports = equalByTag;
  44546. /***/ }),
  44547. /***/ 16096:
  44548. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44549. var getAllKeys = __webpack_require__(58234);
  44550. /** Used to compose bitmasks for value comparisons. */
  44551. var COMPARE_PARTIAL_FLAG = 1;
  44552. /** Used for built-in method references. */
  44553. var objectProto = Object.prototype;
  44554. /** Used to check objects for own properties. */
  44555. var hasOwnProperty = objectProto.hasOwnProperty;
  44556. /**
  44557. * A specialized version of `baseIsEqualDeep` for objects with support for
  44558. * partial deep comparisons.
  44559. *
  44560. * @private
  44561. * @param {Object} object The object to compare.
  44562. * @param {Object} other The other object to compare.
  44563. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  44564. * @param {Function} customizer The function to customize comparisons.
  44565. * @param {Function} equalFunc The function to determine equivalents of values.
  44566. * @param {Object} stack Tracks traversed `object` and `other` objects.
  44567. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  44568. */
  44569. function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
  44570. var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
  44571. objProps = getAllKeys(object),
  44572. objLength = objProps.length,
  44573. othProps = getAllKeys(other),
  44574. othLength = othProps.length;
  44575. if (objLength != othLength && !isPartial) {
  44576. return false;
  44577. }
  44578. var index = objLength;
  44579. while (index--) {
  44580. var key = objProps[index];
  44581. if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
  44582. return false;
  44583. }
  44584. }
  44585. // Check that cyclic values are equal.
  44586. var objStacked = stack.get(object);
  44587. var othStacked = stack.get(other);
  44588. if (objStacked && othStacked) {
  44589. return objStacked == other && othStacked == object;
  44590. }
  44591. var result = true;
  44592. stack.set(object, other);
  44593. stack.set(other, object);
  44594. var skipCtor = isPartial;
  44595. while (++index < objLength) {
  44596. key = objProps[index];
  44597. var objValue = object[key],
  44598. othValue = other[key];
  44599. if (customizer) {
  44600. var compared = isPartial
  44601. ? customizer(othValue, objValue, key, other, object, stack)
  44602. : customizer(objValue, othValue, key, object, other, stack);
  44603. }
  44604. // Recursively compare objects (susceptible to call stack limits).
  44605. if (!(compared === undefined
  44606. ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
  44607. : compared
  44608. )) {
  44609. result = false;
  44610. break;
  44611. }
  44612. skipCtor || (skipCtor = key == 'constructor');
  44613. }
  44614. if (result && !skipCtor) {
  44615. var objCtor = object.constructor,
  44616. othCtor = other.constructor;
  44617. // Non `Object` object instances with different constructors are not equal.
  44618. if (objCtor != othCtor &&
  44619. ('constructor' in object && 'constructor' in other) &&
  44620. !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
  44621. typeof othCtor == 'function' && othCtor instanceof othCtor)) {
  44622. result = false;
  44623. }
  44624. }
  44625. stack['delete'](object);
  44626. stack['delete'](other);
  44627. return result;
  44628. }
  44629. module.exports = equalObjects;
  44630. /***/ }),
  44631. /***/ 31957:
  44632. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44633. /** Detect free variable `global` from Node.js. */
  44634. var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;
  44635. module.exports = freeGlobal;
  44636. /***/ }),
  44637. /***/ 58234:
  44638. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44639. var baseGetAllKeys = __webpack_require__(68866),
  44640. getSymbols = __webpack_require__(99551),
  44641. keys = __webpack_require__(3674);
  44642. /**
  44643. * Creates an array of own enumerable property names and symbols of `object`.
  44644. *
  44645. * @private
  44646. * @param {Object} object The object to query.
  44647. * @returns {Array} Returns the array of property names and symbols.
  44648. */
  44649. function getAllKeys(object) {
  44650. return baseGetAllKeys(object, keys, getSymbols);
  44651. }
  44652. module.exports = getAllKeys;
  44653. /***/ }),
  44654. /***/ 46904:
  44655. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44656. var baseGetAllKeys = __webpack_require__(68866),
  44657. getSymbolsIn = __webpack_require__(51442),
  44658. keysIn = __webpack_require__(81704);
  44659. /**
  44660. * Creates an array of own and inherited enumerable property names and
  44661. * symbols of `object`.
  44662. *
  44663. * @private
  44664. * @param {Object} object The object to query.
  44665. * @returns {Array} Returns the array of property names and symbols.
  44666. */
  44667. function getAllKeysIn(object) {
  44668. return baseGetAllKeys(object, keysIn, getSymbolsIn);
  44669. }
  44670. module.exports = getAllKeysIn;
  44671. /***/ }),
  44672. /***/ 45050:
  44673. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44674. var isKeyable = __webpack_require__(37019);
  44675. /**
  44676. * Gets the data for `map`.
  44677. *
  44678. * @private
  44679. * @param {Object} map The map to query.
  44680. * @param {string} key The reference key.
  44681. * @returns {*} Returns the map data.
  44682. */
  44683. function getMapData(map, key) {
  44684. var data = map.__data__;
  44685. return isKeyable(key)
  44686. ? data[typeof key == 'string' ? 'string' : 'hash']
  44687. : data.map;
  44688. }
  44689. module.exports = getMapData;
  44690. /***/ }),
  44691. /***/ 1499:
  44692. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44693. var isStrictComparable = __webpack_require__(89162),
  44694. keys = __webpack_require__(3674);
  44695. /**
  44696. * Gets the property names, values, and compare flags of `object`.
  44697. *
  44698. * @private
  44699. * @param {Object} object The object to query.
  44700. * @returns {Array} Returns the match data of `object`.
  44701. */
  44702. function getMatchData(object) {
  44703. var result = keys(object),
  44704. length = result.length;
  44705. while (length--) {
  44706. var key = result[length],
  44707. value = object[key];
  44708. result[length] = [key, value, isStrictComparable(value)];
  44709. }
  44710. return result;
  44711. }
  44712. module.exports = getMatchData;
  44713. /***/ }),
  44714. /***/ 10852:
  44715. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44716. var baseIsNative = __webpack_require__(28458),
  44717. getValue = __webpack_require__(47801);
  44718. /**
  44719. * Gets the native function at `key` of `object`.
  44720. *
  44721. * @private
  44722. * @param {Object} object The object to query.
  44723. * @param {string} key The key of the method to get.
  44724. * @returns {*} Returns the function if it's native, else `undefined`.
  44725. */
  44726. function getNative(object, key) {
  44727. var value = getValue(object, key);
  44728. return baseIsNative(value) ? value : undefined;
  44729. }
  44730. module.exports = getNative;
  44731. /***/ }),
  44732. /***/ 85924:
  44733. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44734. var overArg = __webpack_require__(5569);
  44735. /** Built-in value references. */
  44736. var getPrototype = overArg(Object.getPrototypeOf, Object);
  44737. module.exports = getPrototype;
  44738. /***/ }),
  44739. /***/ 89607:
  44740. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44741. var Symbol = __webpack_require__(62705);
  44742. /** Used for built-in method references. */
  44743. var objectProto = Object.prototype;
  44744. /** Used to check objects for own properties. */
  44745. var hasOwnProperty = objectProto.hasOwnProperty;
  44746. /**
  44747. * Used to resolve the
  44748. * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  44749. * of values.
  44750. */
  44751. var nativeObjectToString = objectProto.toString;
  44752. /** Built-in value references. */
  44753. var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
  44754. /**
  44755. * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
  44756. *
  44757. * @private
  44758. * @param {*} value The value to query.
  44759. * @returns {string} Returns the raw `toStringTag`.
  44760. */
  44761. function getRawTag(value) {
  44762. var isOwn = hasOwnProperty.call(value, symToStringTag),
  44763. tag = value[symToStringTag];
  44764. try {
  44765. value[symToStringTag] = undefined;
  44766. var unmasked = true;
  44767. } catch (e) {}
  44768. var result = nativeObjectToString.call(value);
  44769. if (unmasked) {
  44770. if (isOwn) {
  44771. value[symToStringTag] = tag;
  44772. } else {
  44773. delete value[symToStringTag];
  44774. }
  44775. }
  44776. return result;
  44777. }
  44778. module.exports = getRawTag;
  44779. /***/ }),
  44780. /***/ 99551:
  44781. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44782. var arrayFilter = __webpack_require__(34963),
  44783. stubArray = __webpack_require__(70479);
  44784. /** Used for built-in method references. */
  44785. var objectProto = Object.prototype;
  44786. /** Built-in value references. */
  44787. var propertyIsEnumerable = objectProto.propertyIsEnumerable;
  44788. /* Built-in method references for those with the same name as other `lodash` methods. */
  44789. var nativeGetSymbols = Object.getOwnPropertySymbols;
  44790. /**
  44791. * Creates an array of the own enumerable symbols of `object`.
  44792. *
  44793. * @private
  44794. * @param {Object} object The object to query.
  44795. * @returns {Array} Returns the array of symbols.
  44796. */
  44797. var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
  44798. if (object == null) {
  44799. return [];
  44800. }
  44801. object = Object(object);
  44802. return arrayFilter(nativeGetSymbols(object), function(symbol) {
  44803. return propertyIsEnumerable.call(object, symbol);
  44804. });
  44805. };
  44806. module.exports = getSymbols;
  44807. /***/ }),
  44808. /***/ 51442:
  44809. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44810. var arrayPush = __webpack_require__(62488),
  44811. getPrototype = __webpack_require__(85924),
  44812. getSymbols = __webpack_require__(99551),
  44813. stubArray = __webpack_require__(70479);
  44814. /* Built-in method references for those with the same name as other `lodash` methods. */
  44815. var nativeGetSymbols = Object.getOwnPropertySymbols;
  44816. /**
  44817. * Creates an array of the own and inherited enumerable symbols of `object`.
  44818. *
  44819. * @private
  44820. * @param {Object} object The object to query.
  44821. * @returns {Array} Returns the array of symbols.
  44822. */
  44823. var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
  44824. var result = [];
  44825. while (object) {
  44826. arrayPush(result, getSymbols(object));
  44827. object = getPrototype(object);
  44828. }
  44829. return result;
  44830. };
  44831. module.exports = getSymbolsIn;
  44832. /***/ }),
  44833. /***/ 64160:
  44834. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44835. var DataView = __webpack_require__(18552),
  44836. Map = __webpack_require__(57071),
  44837. Promise = __webpack_require__(53818),
  44838. Set = __webpack_require__(58525),
  44839. WeakMap = __webpack_require__(70577),
  44840. baseGetTag = __webpack_require__(44239),
  44841. toSource = __webpack_require__(80346);
  44842. /** `Object#toString` result references. */
  44843. var mapTag = '[object Map]',
  44844. objectTag = '[object Object]',
  44845. promiseTag = '[object Promise]',
  44846. setTag = '[object Set]',
  44847. weakMapTag = '[object WeakMap]';
  44848. var dataViewTag = '[object DataView]';
  44849. /** Used to detect maps, sets, and weakmaps. */
  44850. var dataViewCtorString = toSource(DataView),
  44851. mapCtorString = toSource(Map),
  44852. promiseCtorString = toSource(Promise),
  44853. setCtorString = toSource(Set),
  44854. weakMapCtorString = toSource(WeakMap);
  44855. /**
  44856. * Gets the `toStringTag` of `value`.
  44857. *
  44858. * @private
  44859. * @param {*} value The value to query.
  44860. * @returns {string} Returns the `toStringTag`.
  44861. */
  44862. var getTag = baseGetTag;
  44863. // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
  44864. if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
  44865. (Map && getTag(new Map) != mapTag) ||
  44866. (Promise && getTag(Promise.resolve()) != promiseTag) ||
  44867. (Set && getTag(new Set) != setTag) ||
  44868. (WeakMap && getTag(new WeakMap) != weakMapTag)) {
  44869. getTag = function(value) {
  44870. var result = baseGetTag(value),
  44871. Ctor = result == objectTag ? value.constructor : undefined,
  44872. ctorString = Ctor ? toSource(Ctor) : '';
  44873. if (ctorString) {
  44874. switch (ctorString) {
  44875. case dataViewCtorString: return dataViewTag;
  44876. case mapCtorString: return mapTag;
  44877. case promiseCtorString: return promiseTag;
  44878. case setCtorString: return setTag;
  44879. case weakMapCtorString: return weakMapTag;
  44880. }
  44881. }
  44882. return result;
  44883. };
  44884. }
  44885. module.exports = getTag;
  44886. /***/ }),
  44887. /***/ 47801:
  44888. /***/ ((module) => {
  44889. /**
  44890. * Gets the value at `key` of `object`.
  44891. *
  44892. * @private
  44893. * @param {Object} [object] The object to query.
  44894. * @param {string} key The key of the property to get.
  44895. * @returns {*} Returns the property value.
  44896. */
  44897. function getValue(object, key) {
  44898. return object == null ? undefined : object[key];
  44899. }
  44900. module.exports = getValue;
  44901. /***/ }),
  44902. /***/ 222:
  44903. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44904. var castPath = __webpack_require__(71811),
  44905. isArguments = __webpack_require__(35694),
  44906. isArray = __webpack_require__(1469),
  44907. isIndex = __webpack_require__(65776),
  44908. isLength = __webpack_require__(41780),
  44909. toKey = __webpack_require__(40327);
  44910. /**
  44911. * Checks if `path` exists on `object`.
  44912. *
  44913. * @private
  44914. * @param {Object} object The object to query.
  44915. * @param {Array|string} path The path to check.
  44916. * @param {Function} hasFunc The function to check properties.
  44917. * @returns {boolean} Returns `true` if `path` exists, else `false`.
  44918. */
  44919. function hasPath(object, path, hasFunc) {
  44920. path = castPath(path, object);
  44921. var index = -1,
  44922. length = path.length,
  44923. result = false;
  44924. while (++index < length) {
  44925. var key = toKey(path[index]);
  44926. if (!(result = object != null && hasFunc(object, key))) {
  44927. break;
  44928. }
  44929. object = object[key];
  44930. }
  44931. if (result || ++index != length) {
  44932. return result;
  44933. }
  44934. length = object == null ? 0 : object.length;
  44935. return !!length && isLength(length) && isIndex(key, length) &&
  44936. (isArray(object) || isArguments(object));
  44937. }
  44938. module.exports = hasPath;
  44939. /***/ }),
  44940. /***/ 51789:
  44941. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44942. var nativeCreate = __webpack_require__(94536);
  44943. /**
  44944. * Removes all key-value entries from the hash.
  44945. *
  44946. * @private
  44947. * @name clear
  44948. * @memberOf Hash
  44949. */
  44950. function hashClear() {
  44951. this.__data__ = nativeCreate ? nativeCreate(null) : {};
  44952. this.size = 0;
  44953. }
  44954. module.exports = hashClear;
  44955. /***/ }),
  44956. /***/ 80401:
  44957. /***/ ((module) => {
  44958. /**
  44959. * Removes `key` and its value from the hash.
  44960. *
  44961. * @private
  44962. * @name delete
  44963. * @memberOf Hash
  44964. * @param {Object} hash The hash to modify.
  44965. * @param {string} key The key of the value to remove.
  44966. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  44967. */
  44968. function hashDelete(key) {
  44969. var result = this.has(key) && delete this.__data__[key];
  44970. this.size -= result ? 1 : 0;
  44971. return result;
  44972. }
  44973. module.exports = hashDelete;
  44974. /***/ }),
  44975. /***/ 57667:
  44976. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  44977. var nativeCreate = __webpack_require__(94536);
  44978. /** Used to stand-in for `undefined` hash values. */
  44979. var HASH_UNDEFINED = '__lodash_hash_undefined__';
  44980. /** Used for built-in method references. */
  44981. var objectProto = Object.prototype;
  44982. /** Used to check objects for own properties. */
  44983. var hasOwnProperty = objectProto.hasOwnProperty;
  44984. /**
  44985. * Gets the hash value for `key`.
  44986. *
  44987. * @private
  44988. * @name get
  44989. * @memberOf Hash
  44990. * @param {string} key The key of the value to get.
  44991. * @returns {*} Returns the entry value.
  44992. */
  44993. function hashGet(key) {
  44994. var data = this.__data__;
  44995. if (nativeCreate) {
  44996. var result = data[key];
  44997. return result === HASH_UNDEFINED ? undefined : result;
  44998. }
  44999. return hasOwnProperty.call(data, key) ? data[key] : undefined;
  45000. }
  45001. module.exports = hashGet;
  45002. /***/ }),
  45003. /***/ 21327:
  45004. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45005. var nativeCreate = __webpack_require__(94536);
  45006. /** Used for built-in method references. */
  45007. var objectProto = Object.prototype;
  45008. /** Used to check objects for own properties. */
  45009. var hasOwnProperty = objectProto.hasOwnProperty;
  45010. /**
  45011. * Checks if a hash value for `key` exists.
  45012. *
  45013. * @private
  45014. * @name has
  45015. * @memberOf Hash
  45016. * @param {string} key The key of the entry to check.
  45017. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  45018. */
  45019. function hashHas(key) {
  45020. var data = this.__data__;
  45021. return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
  45022. }
  45023. module.exports = hashHas;
  45024. /***/ }),
  45025. /***/ 81866:
  45026. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45027. var nativeCreate = __webpack_require__(94536);
  45028. /** Used to stand-in for `undefined` hash values. */
  45029. var HASH_UNDEFINED = '__lodash_hash_undefined__';
  45030. /**
  45031. * Sets the hash `key` to `value`.
  45032. *
  45033. * @private
  45034. * @name set
  45035. * @memberOf Hash
  45036. * @param {string} key The key of the value to set.
  45037. * @param {*} value The value to set.
  45038. * @returns {Object} Returns the hash instance.
  45039. */
  45040. function hashSet(key, value) {
  45041. var data = this.__data__;
  45042. this.size += this.has(key) ? 0 : 1;
  45043. data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
  45044. return this;
  45045. }
  45046. module.exports = hashSet;
  45047. /***/ }),
  45048. /***/ 37285:
  45049. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45050. var Symbol = __webpack_require__(62705),
  45051. isArguments = __webpack_require__(35694),
  45052. isArray = __webpack_require__(1469);
  45053. /** Built-in value references. */
  45054. var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
  45055. /**
  45056. * Checks if `value` is a flattenable `arguments` object or array.
  45057. *
  45058. * @private
  45059. * @param {*} value The value to check.
  45060. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
  45061. */
  45062. function isFlattenable(value) {
  45063. return isArray(value) || isArguments(value) ||
  45064. !!(spreadableSymbol && value && value[spreadableSymbol]);
  45065. }
  45066. module.exports = isFlattenable;
  45067. /***/ }),
  45068. /***/ 65776:
  45069. /***/ ((module) => {
  45070. /** Used as references for various `Number` constants. */
  45071. var MAX_SAFE_INTEGER = 9007199254740991;
  45072. /** Used to detect unsigned integer values. */
  45073. var reIsUint = /^(?:0|[1-9]\d*)$/;
  45074. /**
  45075. * Checks if `value` is a valid array-like index.
  45076. *
  45077. * @private
  45078. * @param {*} value The value to check.
  45079. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
  45080. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
  45081. */
  45082. function isIndex(value, length) {
  45083. var type = typeof value;
  45084. length = length == null ? MAX_SAFE_INTEGER : length;
  45085. return !!length &&
  45086. (type == 'number' ||
  45087. (type != 'symbol' && reIsUint.test(value))) &&
  45088. (value > -1 && value % 1 == 0 && value < length);
  45089. }
  45090. module.exports = isIndex;
  45091. /***/ }),
  45092. /***/ 15403:
  45093. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45094. var isArray = __webpack_require__(1469),
  45095. isSymbol = __webpack_require__(33448);
  45096. /** Used to match property names within property paths. */
  45097. var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
  45098. reIsPlainProp = /^\w*$/;
  45099. /**
  45100. * Checks if `value` is a property name and not a property path.
  45101. *
  45102. * @private
  45103. * @param {*} value The value to check.
  45104. * @param {Object} [object] The object to query keys on.
  45105. * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
  45106. */
  45107. function isKey(value, object) {
  45108. if (isArray(value)) {
  45109. return false;
  45110. }
  45111. var type = typeof value;
  45112. if (type == 'number' || type == 'symbol' || type == 'boolean' ||
  45113. value == null || isSymbol(value)) {
  45114. return true;
  45115. }
  45116. return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
  45117. (object != null && value in Object(object));
  45118. }
  45119. module.exports = isKey;
  45120. /***/ }),
  45121. /***/ 37019:
  45122. /***/ ((module) => {
  45123. /**
  45124. * Checks if `value` is suitable for use as unique object key.
  45125. *
  45126. * @private
  45127. * @param {*} value The value to check.
  45128. * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
  45129. */
  45130. function isKeyable(value) {
  45131. var type = typeof value;
  45132. return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
  45133. ? (value !== '__proto__')
  45134. : (value === null);
  45135. }
  45136. module.exports = isKeyable;
  45137. /***/ }),
  45138. /***/ 15346:
  45139. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45140. var coreJsData = __webpack_require__(14429);
  45141. /** Used to detect methods masquerading as native. */
  45142. var maskSrcKey = (function() {
  45143. var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
  45144. return uid ? ('Symbol(src)_1.' + uid) : '';
  45145. }());
  45146. /**
  45147. * Checks if `func` has its source masked.
  45148. *
  45149. * @private
  45150. * @param {Function} func The function to check.
  45151. * @returns {boolean} Returns `true` if `func` is masked, else `false`.
  45152. */
  45153. function isMasked(func) {
  45154. return !!maskSrcKey && (maskSrcKey in func);
  45155. }
  45156. module.exports = isMasked;
  45157. /***/ }),
  45158. /***/ 25726:
  45159. /***/ ((module) => {
  45160. /** Used for built-in method references. */
  45161. var objectProto = Object.prototype;
  45162. /**
  45163. * Checks if `value` is likely a prototype object.
  45164. *
  45165. * @private
  45166. * @param {*} value The value to check.
  45167. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
  45168. */
  45169. function isPrototype(value) {
  45170. var Ctor = value && value.constructor,
  45171. proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
  45172. return value === proto;
  45173. }
  45174. module.exports = isPrototype;
  45175. /***/ }),
  45176. /***/ 89162:
  45177. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45178. var isObject = __webpack_require__(13218);
  45179. /**
  45180. * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
  45181. *
  45182. * @private
  45183. * @param {*} value The value to check.
  45184. * @returns {boolean} Returns `true` if `value` if suitable for strict
  45185. * equality comparisons, else `false`.
  45186. */
  45187. function isStrictComparable(value) {
  45188. return value === value && !isObject(value);
  45189. }
  45190. module.exports = isStrictComparable;
  45191. /***/ }),
  45192. /***/ 27040:
  45193. /***/ ((module) => {
  45194. /**
  45195. * Removes all key-value entries from the list cache.
  45196. *
  45197. * @private
  45198. * @name clear
  45199. * @memberOf ListCache
  45200. */
  45201. function listCacheClear() {
  45202. this.__data__ = [];
  45203. this.size = 0;
  45204. }
  45205. module.exports = listCacheClear;
  45206. /***/ }),
  45207. /***/ 14125:
  45208. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45209. var assocIndexOf = __webpack_require__(18470);
  45210. /** Used for built-in method references. */
  45211. var arrayProto = Array.prototype;
  45212. /** Built-in value references. */
  45213. var splice = arrayProto.splice;
  45214. /**
  45215. * Removes `key` and its value from the list cache.
  45216. *
  45217. * @private
  45218. * @name delete
  45219. * @memberOf ListCache
  45220. * @param {string} key The key of the value to remove.
  45221. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  45222. */
  45223. function listCacheDelete(key) {
  45224. var data = this.__data__,
  45225. index = assocIndexOf(data, key);
  45226. if (index < 0) {
  45227. return false;
  45228. }
  45229. var lastIndex = data.length - 1;
  45230. if (index == lastIndex) {
  45231. data.pop();
  45232. } else {
  45233. splice.call(data, index, 1);
  45234. }
  45235. --this.size;
  45236. return true;
  45237. }
  45238. module.exports = listCacheDelete;
  45239. /***/ }),
  45240. /***/ 82117:
  45241. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45242. var assocIndexOf = __webpack_require__(18470);
  45243. /**
  45244. * Gets the list cache value for `key`.
  45245. *
  45246. * @private
  45247. * @name get
  45248. * @memberOf ListCache
  45249. * @param {string} key The key of the value to get.
  45250. * @returns {*} Returns the entry value.
  45251. */
  45252. function listCacheGet(key) {
  45253. var data = this.__data__,
  45254. index = assocIndexOf(data, key);
  45255. return index < 0 ? undefined : data[index][1];
  45256. }
  45257. module.exports = listCacheGet;
  45258. /***/ }),
  45259. /***/ 67518:
  45260. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45261. var assocIndexOf = __webpack_require__(18470);
  45262. /**
  45263. * Checks if a list cache value for `key` exists.
  45264. *
  45265. * @private
  45266. * @name has
  45267. * @memberOf ListCache
  45268. * @param {string} key The key of the entry to check.
  45269. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  45270. */
  45271. function listCacheHas(key) {
  45272. return assocIndexOf(this.__data__, key) > -1;
  45273. }
  45274. module.exports = listCacheHas;
  45275. /***/ }),
  45276. /***/ 54705:
  45277. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45278. var assocIndexOf = __webpack_require__(18470);
  45279. /**
  45280. * Sets the list cache `key` to `value`.
  45281. *
  45282. * @private
  45283. * @name set
  45284. * @memberOf ListCache
  45285. * @param {string} key The key of the value to set.
  45286. * @param {*} value The value to set.
  45287. * @returns {Object} Returns the list cache instance.
  45288. */
  45289. function listCacheSet(key, value) {
  45290. var data = this.__data__,
  45291. index = assocIndexOf(data, key);
  45292. if (index < 0) {
  45293. ++this.size;
  45294. data.push([key, value]);
  45295. } else {
  45296. data[index][1] = value;
  45297. }
  45298. return this;
  45299. }
  45300. module.exports = listCacheSet;
  45301. /***/ }),
  45302. /***/ 24785:
  45303. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45304. var Hash = __webpack_require__(1989),
  45305. ListCache = __webpack_require__(38407),
  45306. Map = __webpack_require__(57071);
  45307. /**
  45308. * Removes all key-value entries from the map.
  45309. *
  45310. * @private
  45311. * @name clear
  45312. * @memberOf MapCache
  45313. */
  45314. function mapCacheClear() {
  45315. this.size = 0;
  45316. this.__data__ = {
  45317. 'hash': new Hash,
  45318. 'map': new (Map || ListCache),
  45319. 'string': new Hash
  45320. };
  45321. }
  45322. module.exports = mapCacheClear;
  45323. /***/ }),
  45324. /***/ 11285:
  45325. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45326. var getMapData = __webpack_require__(45050);
  45327. /**
  45328. * Removes `key` and its value from the map.
  45329. *
  45330. * @private
  45331. * @name delete
  45332. * @memberOf MapCache
  45333. * @param {string} key The key of the value to remove.
  45334. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  45335. */
  45336. function mapCacheDelete(key) {
  45337. var result = getMapData(this, key)['delete'](key);
  45338. this.size -= result ? 1 : 0;
  45339. return result;
  45340. }
  45341. module.exports = mapCacheDelete;
  45342. /***/ }),
  45343. /***/ 96000:
  45344. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45345. var getMapData = __webpack_require__(45050);
  45346. /**
  45347. * Gets the map value for `key`.
  45348. *
  45349. * @private
  45350. * @name get
  45351. * @memberOf MapCache
  45352. * @param {string} key The key of the value to get.
  45353. * @returns {*} Returns the entry value.
  45354. */
  45355. function mapCacheGet(key) {
  45356. return getMapData(this, key).get(key);
  45357. }
  45358. module.exports = mapCacheGet;
  45359. /***/ }),
  45360. /***/ 49916:
  45361. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45362. var getMapData = __webpack_require__(45050);
  45363. /**
  45364. * Checks if a map value for `key` exists.
  45365. *
  45366. * @private
  45367. * @name has
  45368. * @memberOf MapCache
  45369. * @param {string} key The key of the entry to check.
  45370. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  45371. */
  45372. function mapCacheHas(key) {
  45373. return getMapData(this, key).has(key);
  45374. }
  45375. module.exports = mapCacheHas;
  45376. /***/ }),
  45377. /***/ 95265:
  45378. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45379. var getMapData = __webpack_require__(45050);
  45380. /**
  45381. * Sets the map `key` to `value`.
  45382. *
  45383. * @private
  45384. * @name set
  45385. * @memberOf MapCache
  45386. * @param {string} key The key of the value to set.
  45387. * @param {*} value The value to set.
  45388. * @returns {Object} Returns the map cache instance.
  45389. */
  45390. function mapCacheSet(key, value) {
  45391. var data = getMapData(this, key),
  45392. size = data.size;
  45393. data.set(key, value);
  45394. this.size += data.size == size ? 0 : 1;
  45395. return this;
  45396. }
  45397. module.exports = mapCacheSet;
  45398. /***/ }),
  45399. /***/ 68776:
  45400. /***/ ((module) => {
  45401. /**
  45402. * Converts `map` to its key-value pairs.
  45403. *
  45404. * @private
  45405. * @param {Object} map The map to convert.
  45406. * @returns {Array} Returns the key-value pairs.
  45407. */
  45408. function mapToArray(map) {
  45409. var index = -1,
  45410. result = Array(map.size);
  45411. map.forEach(function(value, key) {
  45412. result[++index] = [key, value];
  45413. });
  45414. return result;
  45415. }
  45416. module.exports = mapToArray;
  45417. /***/ }),
  45418. /***/ 42634:
  45419. /***/ ((module) => {
  45420. /**
  45421. * A specialized version of `matchesProperty` for source values suitable
  45422. * for strict equality comparisons, i.e. `===`.
  45423. *
  45424. * @private
  45425. * @param {string} key The key of the property to get.
  45426. * @param {*} srcValue The value to match.
  45427. * @returns {Function} Returns the new spec function.
  45428. */
  45429. function matchesStrictComparable(key, srcValue) {
  45430. return function(object) {
  45431. if (object == null) {
  45432. return false;
  45433. }
  45434. return object[key] === srcValue &&
  45435. (srcValue !== undefined || (key in Object(object)));
  45436. };
  45437. }
  45438. module.exports = matchesStrictComparable;
  45439. /***/ }),
  45440. /***/ 24523:
  45441. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45442. var memoize = __webpack_require__(88306);
  45443. /** Used as the maximum memoize cache size. */
  45444. var MAX_MEMOIZE_SIZE = 500;
  45445. /**
  45446. * A specialized version of `_.memoize` which clears the memoized function's
  45447. * cache when it exceeds `MAX_MEMOIZE_SIZE`.
  45448. *
  45449. * @private
  45450. * @param {Function} func The function to have its output memoized.
  45451. * @returns {Function} Returns the new memoized function.
  45452. */
  45453. function memoizeCapped(func) {
  45454. var result = memoize(func, function(key) {
  45455. if (cache.size === MAX_MEMOIZE_SIZE) {
  45456. cache.clear();
  45457. }
  45458. return key;
  45459. });
  45460. var cache = result.cache;
  45461. return result;
  45462. }
  45463. module.exports = memoizeCapped;
  45464. /***/ }),
  45465. /***/ 94536:
  45466. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45467. var getNative = __webpack_require__(10852);
  45468. /* Built-in method references that are verified to be native. */
  45469. var nativeCreate = getNative(Object, 'create');
  45470. module.exports = nativeCreate;
  45471. /***/ }),
  45472. /***/ 86916:
  45473. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45474. var overArg = __webpack_require__(5569);
  45475. /* Built-in method references for those with the same name as other `lodash` methods. */
  45476. var nativeKeys = overArg(Object.keys, Object);
  45477. module.exports = nativeKeys;
  45478. /***/ }),
  45479. /***/ 33498:
  45480. /***/ ((module) => {
  45481. /**
  45482. * This function is like
  45483. * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  45484. * except that it includes inherited enumerable properties.
  45485. *
  45486. * @private
  45487. * @param {Object} object The object to query.
  45488. * @returns {Array} Returns the array of property names.
  45489. */
  45490. function nativeKeysIn(object) {
  45491. var result = [];
  45492. if (object != null) {
  45493. for (var key in Object(object)) {
  45494. result.push(key);
  45495. }
  45496. }
  45497. return result;
  45498. }
  45499. module.exports = nativeKeysIn;
  45500. /***/ }),
  45501. /***/ 31167:
  45502. /***/ ((module, exports, __webpack_require__) => {
  45503. /* module decorator */ module = __webpack_require__.nmd(module);
  45504. var freeGlobal = __webpack_require__(31957);
  45505. /** Detect free variable `exports`. */
  45506. var freeExports = true && exports && !exports.nodeType && exports;
  45507. /** Detect free variable `module`. */
  45508. var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
  45509. /** Detect the popular CommonJS extension `module.exports`. */
  45510. var moduleExports = freeModule && freeModule.exports === freeExports;
  45511. /** Detect free variable `process` from Node.js. */
  45512. var freeProcess = moduleExports && freeGlobal.process;
  45513. /** Used to access faster Node.js helpers. */
  45514. var nodeUtil = (function() {
  45515. try {
  45516. // Use `util.types` for Node.js 10+.
  45517. var types = freeModule && freeModule.require && freeModule.require('util').types;
  45518. if (types) {
  45519. return types;
  45520. }
  45521. // Legacy `process.binding('util')` for Node.js < 10.
  45522. return freeProcess && freeProcess.binding && freeProcess.binding('util');
  45523. } catch (e) {}
  45524. }());
  45525. module.exports = nodeUtil;
  45526. /***/ }),
  45527. /***/ 2333:
  45528. /***/ ((module) => {
  45529. /** Used for built-in method references. */
  45530. var objectProto = Object.prototype;
  45531. /**
  45532. * Used to resolve the
  45533. * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  45534. * of values.
  45535. */
  45536. var nativeObjectToString = objectProto.toString;
  45537. /**
  45538. * Converts `value` to a string using `Object.prototype.toString`.
  45539. *
  45540. * @private
  45541. * @param {*} value The value to convert.
  45542. * @returns {string} Returns the converted string.
  45543. */
  45544. function objectToString(value) {
  45545. return nativeObjectToString.call(value);
  45546. }
  45547. module.exports = objectToString;
  45548. /***/ }),
  45549. /***/ 5569:
  45550. /***/ ((module) => {
  45551. /**
  45552. * Creates a unary function that invokes `func` with its argument transformed.
  45553. *
  45554. * @private
  45555. * @param {Function} func The function to wrap.
  45556. * @param {Function} transform The argument transform.
  45557. * @returns {Function} Returns the new function.
  45558. */
  45559. function overArg(func, transform) {
  45560. return function(arg) {
  45561. return func(transform(arg));
  45562. };
  45563. }
  45564. module.exports = overArg;
  45565. /***/ }),
  45566. /***/ 55639:
  45567. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45568. var freeGlobal = __webpack_require__(31957);
  45569. /** Detect free variable `self`. */
  45570. var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
  45571. /** Used as a reference to the global object. */
  45572. var root = freeGlobal || freeSelf || Function('return this')();
  45573. module.exports = root;
  45574. /***/ }),
  45575. /***/ 90619:
  45576. /***/ ((module) => {
  45577. /** Used to stand-in for `undefined` hash values. */
  45578. var HASH_UNDEFINED = '__lodash_hash_undefined__';
  45579. /**
  45580. * Adds `value` to the array cache.
  45581. *
  45582. * @private
  45583. * @name add
  45584. * @memberOf SetCache
  45585. * @alias push
  45586. * @param {*} value The value to cache.
  45587. * @returns {Object} Returns the cache instance.
  45588. */
  45589. function setCacheAdd(value) {
  45590. this.__data__.set(value, HASH_UNDEFINED);
  45591. return this;
  45592. }
  45593. module.exports = setCacheAdd;
  45594. /***/ }),
  45595. /***/ 72385:
  45596. /***/ ((module) => {
  45597. /**
  45598. * Checks if `value` is in the array cache.
  45599. *
  45600. * @private
  45601. * @name has
  45602. * @memberOf SetCache
  45603. * @param {*} value The value to search for.
  45604. * @returns {number} Returns `true` if `value` is found, else `false`.
  45605. */
  45606. function setCacheHas(value) {
  45607. return this.__data__.has(value);
  45608. }
  45609. module.exports = setCacheHas;
  45610. /***/ }),
  45611. /***/ 21814:
  45612. /***/ ((module) => {
  45613. /**
  45614. * Converts `set` to an array of its values.
  45615. *
  45616. * @private
  45617. * @param {Object} set The set to convert.
  45618. * @returns {Array} Returns the values.
  45619. */
  45620. function setToArray(set) {
  45621. var index = -1,
  45622. result = Array(set.size);
  45623. set.forEach(function(value) {
  45624. result[++index] = value;
  45625. });
  45626. return result;
  45627. }
  45628. module.exports = setToArray;
  45629. /***/ }),
  45630. /***/ 37465:
  45631. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45632. var ListCache = __webpack_require__(38407);
  45633. /**
  45634. * Removes all key-value entries from the stack.
  45635. *
  45636. * @private
  45637. * @name clear
  45638. * @memberOf Stack
  45639. */
  45640. function stackClear() {
  45641. this.__data__ = new ListCache;
  45642. this.size = 0;
  45643. }
  45644. module.exports = stackClear;
  45645. /***/ }),
  45646. /***/ 63779:
  45647. /***/ ((module) => {
  45648. /**
  45649. * Removes `key` and its value from the stack.
  45650. *
  45651. * @private
  45652. * @name delete
  45653. * @memberOf Stack
  45654. * @param {string} key The key of the value to remove.
  45655. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  45656. */
  45657. function stackDelete(key) {
  45658. var data = this.__data__,
  45659. result = data['delete'](key);
  45660. this.size = data.size;
  45661. return result;
  45662. }
  45663. module.exports = stackDelete;
  45664. /***/ }),
  45665. /***/ 67599:
  45666. /***/ ((module) => {
  45667. /**
  45668. * Gets the stack value for `key`.
  45669. *
  45670. * @private
  45671. * @name get
  45672. * @memberOf Stack
  45673. * @param {string} key The key of the value to get.
  45674. * @returns {*} Returns the entry value.
  45675. */
  45676. function stackGet(key) {
  45677. return this.__data__.get(key);
  45678. }
  45679. module.exports = stackGet;
  45680. /***/ }),
  45681. /***/ 44758:
  45682. /***/ ((module) => {
  45683. /**
  45684. * Checks if a stack value for `key` exists.
  45685. *
  45686. * @private
  45687. * @name has
  45688. * @memberOf Stack
  45689. * @param {string} key The key of the entry to check.
  45690. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  45691. */
  45692. function stackHas(key) {
  45693. return this.__data__.has(key);
  45694. }
  45695. module.exports = stackHas;
  45696. /***/ }),
  45697. /***/ 34309:
  45698. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45699. var ListCache = __webpack_require__(38407),
  45700. Map = __webpack_require__(57071),
  45701. MapCache = __webpack_require__(83369);
  45702. /** Used as the size to enable large array optimizations. */
  45703. var LARGE_ARRAY_SIZE = 200;
  45704. /**
  45705. * Sets the stack `key` to `value`.
  45706. *
  45707. * @private
  45708. * @name set
  45709. * @memberOf Stack
  45710. * @param {string} key The key of the value to set.
  45711. * @param {*} value The value to set.
  45712. * @returns {Object} Returns the stack cache instance.
  45713. */
  45714. function stackSet(key, value) {
  45715. var data = this.__data__;
  45716. if (data instanceof ListCache) {
  45717. var pairs = data.__data__;
  45718. if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
  45719. pairs.push([key, value]);
  45720. this.size = ++data.size;
  45721. return this;
  45722. }
  45723. data = this.__data__ = new MapCache(pairs);
  45724. }
  45725. data.set(key, value);
  45726. this.size = data.size;
  45727. return this;
  45728. }
  45729. module.exports = stackSet;
  45730. /***/ }),
  45731. /***/ 55514:
  45732. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45733. var memoizeCapped = __webpack_require__(24523);
  45734. /** Used to match property names within property paths. */
  45735. var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
  45736. /** Used to match backslashes in property paths. */
  45737. var reEscapeChar = /\\(\\)?/g;
  45738. /**
  45739. * Converts `string` to a property path array.
  45740. *
  45741. * @private
  45742. * @param {string} string The string to convert.
  45743. * @returns {Array} Returns the property path array.
  45744. */
  45745. var stringToPath = memoizeCapped(function(string) {
  45746. var result = [];
  45747. if (string.charCodeAt(0) === 46 /* . */) {
  45748. result.push('');
  45749. }
  45750. string.replace(rePropName, function(match, number, quote, subString) {
  45751. result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
  45752. });
  45753. return result;
  45754. });
  45755. module.exports = stringToPath;
  45756. /***/ }),
  45757. /***/ 40327:
  45758. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45759. var isSymbol = __webpack_require__(33448);
  45760. /** Used as references for various `Number` constants. */
  45761. var INFINITY = 1 / 0;
  45762. /**
  45763. * Converts `value` to a string key if it's not a string or symbol.
  45764. *
  45765. * @private
  45766. * @param {*} value The value to inspect.
  45767. * @returns {string|symbol} Returns the key.
  45768. */
  45769. function toKey(value) {
  45770. if (typeof value == 'string' || isSymbol(value)) {
  45771. return value;
  45772. }
  45773. var result = (value + '');
  45774. return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
  45775. }
  45776. module.exports = toKey;
  45777. /***/ }),
  45778. /***/ 80346:
  45779. /***/ ((module) => {
  45780. /** Used for built-in method references. */
  45781. var funcProto = Function.prototype;
  45782. /** Used to resolve the decompiled source of functions. */
  45783. var funcToString = funcProto.toString;
  45784. /**
  45785. * Converts `func` to its source code.
  45786. *
  45787. * @private
  45788. * @param {Function} func The function to convert.
  45789. * @returns {string} Returns the source code.
  45790. */
  45791. function toSource(func) {
  45792. if (func != null) {
  45793. try {
  45794. return funcToString.call(func);
  45795. } catch (e) {}
  45796. try {
  45797. return (func + '');
  45798. } catch (e) {}
  45799. }
  45800. return '';
  45801. }
  45802. module.exports = toSource;
  45803. /***/ }),
  45804. /***/ 77813:
  45805. /***/ ((module) => {
  45806. /**
  45807. * Performs a
  45808. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  45809. * comparison between two values to determine if they are equivalent.
  45810. *
  45811. * @static
  45812. * @memberOf _
  45813. * @since 4.0.0
  45814. * @category Lang
  45815. * @param {*} value The value to compare.
  45816. * @param {*} other The other value to compare.
  45817. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  45818. * @example
  45819. *
  45820. * var object = { 'a': 1 };
  45821. * var other = { 'a': 1 };
  45822. *
  45823. * _.eq(object, object);
  45824. * // => true
  45825. *
  45826. * _.eq(object, other);
  45827. * // => false
  45828. *
  45829. * _.eq('a', 'a');
  45830. * // => true
  45831. *
  45832. * _.eq('a', Object('a'));
  45833. * // => false
  45834. *
  45835. * _.eq(NaN, NaN);
  45836. * // => true
  45837. */
  45838. function eq(value, other) {
  45839. return value === other || (value !== value && other !== other);
  45840. }
  45841. module.exports = eq;
  45842. /***/ }),
  45843. /***/ 94654:
  45844. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45845. var baseFlatten = __webpack_require__(21078),
  45846. map = __webpack_require__(35161);
  45847. /**
  45848. * Creates a flattened array of values by running each element in `collection`
  45849. * thru `iteratee` and flattening the mapped results. The iteratee is invoked
  45850. * with three arguments: (value, index|key, collection).
  45851. *
  45852. * @static
  45853. * @memberOf _
  45854. * @since 4.0.0
  45855. * @category Collection
  45856. * @param {Array|Object} collection The collection to iterate over.
  45857. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  45858. * @returns {Array} Returns the new flattened array.
  45859. * @example
  45860. *
  45861. * function duplicate(n) {
  45862. * return [n, n];
  45863. * }
  45864. *
  45865. * _.flatMap([1, 2], duplicate);
  45866. * // => [1, 1, 2, 2]
  45867. */
  45868. function flatMap(collection, iteratee) {
  45869. return baseFlatten(map(collection, iteratee), 1);
  45870. }
  45871. module.exports = flatMap;
  45872. /***/ }),
  45873. /***/ 85564:
  45874. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45875. var baseFlatten = __webpack_require__(21078);
  45876. /**
  45877. * Flattens `array` a single level deep.
  45878. *
  45879. * @static
  45880. * @memberOf _
  45881. * @since 0.1.0
  45882. * @category Array
  45883. * @param {Array} array The array to flatten.
  45884. * @returns {Array} Returns the new flattened array.
  45885. * @example
  45886. *
  45887. * _.flatten([1, [2, [3, [4]], 5]]);
  45888. * // => [1, 2, [3, [4]], 5]
  45889. */
  45890. function flatten(array) {
  45891. var length = array == null ? 0 : array.length;
  45892. return length ? baseFlatten(array, 1) : [];
  45893. }
  45894. module.exports = flatten;
  45895. /***/ }),
  45896. /***/ 27361:
  45897. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45898. var baseGet = __webpack_require__(97786);
  45899. /**
  45900. * Gets the value at `path` of `object`. If the resolved value is
  45901. * `undefined`, the `defaultValue` is returned in its place.
  45902. *
  45903. * @static
  45904. * @memberOf _
  45905. * @since 3.7.0
  45906. * @category Object
  45907. * @param {Object} object The object to query.
  45908. * @param {Array|string} path The path of the property to get.
  45909. * @param {*} [defaultValue] The value returned for `undefined` resolved values.
  45910. * @returns {*} Returns the resolved value.
  45911. * @example
  45912. *
  45913. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  45914. *
  45915. * _.get(object, 'a[0].b.c');
  45916. * // => 3
  45917. *
  45918. * _.get(object, ['a', '0', 'b', 'c']);
  45919. * // => 3
  45920. *
  45921. * _.get(object, 'a.b.c', 'default');
  45922. * // => 'default'
  45923. */
  45924. function get(object, path, defaultValue) {
  45925. var result = object == null ? undefined : baseGet(object, path);
  45926. return result === undefined ? defaultValue : result;
  45927. }
  45928. module.exports = get;
  45929. /***/ }),
  45930. /***/ 7739:
  45931. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45932. var baseAssignValue = __webpack_require__(89465),
  45933. createAggregator = __webpack_require__(55189);
  45934. /** Used for built-in method references. */
  45935. var objectProto = Object.prototype;
  45936. /** Used to check objects for own properties. */
  45937. var hasOwnProperty = objectProto.hasOwnProperty;
  45938. /**
  45939. * Creates an object composed of keys generated from the results of running
  45940. * each element of `collection` thru `iteratee`. The order of grouped values
  45941. * is determined by the order they occur in `collection`. The corresponding
  45942. * value of each key is an array of elements responsible for generating the
  45943. * key. The iteratee is invoked with one argument: (value).
  45944. *
  45945. * @static
  45946. * @memberOf _
  45947. * @since 0.1.0
  45948. * @category Collection
  45949. * @param {Array|Object} collection The collection to iterate over.
  45950. * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
  45951. * @returns {Object} Returns the composed aggregate object.
  45952. * @example
  45953. *
  45954. * _.groupBy([6.1, 4.2, 6.3], Math.floor);
  45955. * // => { '4': [4.2], '6': [6.1, 6.3] }
  45956. *
  45957. * // The `_.property` iteratee shorthand.
  45958. * _.groupBy(['one', 'two', 'three'], 'length');
  45959. * // => { '3': ['one', 'two'], '5': ['three'] }
  45960. */
  45961. var groupBy = createAggregator(function(result, value, key) {
  45962. if (hasOwnProperty.call(result, key)) {
  45963. result[key].push(value);
  45964. } else {
  45965. baseAssignValue(result, key, [value]);
  45966. }
  45967. });
  45968. module.exports = groupBy;
  45969. /***/ }),
  45970. /***/ 79095:
  45971. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  45972. var baseHasIn = __webpack_require__(13),
  45973. hasPath = __webpack_require__(222);
  45974. /**
  45975. * Checks if `path` is a direct or inherited property of `object`.
  45976. *
  45977. * @static
  45978. * @memberOf _
  45979. * @since 4.0.0
  45980. * @category Object
  45981. * @param {Object} object The object to query.
  45982. * @param {Array|string} path The path to check.
  45983. * @returns {boolean} Returns `true` if `path` exists, else `false`.
  45984. * @example
  45985. *
  45986. * var object = _.create({ 'a': _.create({ 'b': 2 }) });
  45987. *
  45988. * _.hasIn(object, 'a');
  45989. * // => true
  45990. *
  45991. * _.hasIn(object, 'a.b');
  45992. * // => true
  45993. *
  45994. * _.hasIn(object, ['a', 'b']);
  45995. * // => true
  45996. *
  45997. * _.hasIn(object, 'b');
  45998. * // => false
  45999. */
  46000. function hasIn(object, path) {
  46001. return object != null && hasPath(object, path, baseHasIn);
  46002. }
  46003. module.exports = hasIn;
  46004. /***/ }),
  46005. /***/ 6557:
  46006. /***/ ((module) => {
  46007. /**
  46008. * This method returns the first argument it receives.
  46009. *
  46010. * @static
  46011. * @since 0.1.0
  46012. * @memberOf _
  46013. * @category Util
  46014. * @param {*} value Any value.
  46015. * @returns {*} Returns `value`.
  46016. * @example
  46017. *
  46018. * var object = { 'a': 1 };
  46019. *
  46020. * console.log(_.identity(object) === object);
  46021. * // => true
  46022. */
  46023. function identity(value) {
  46024. return value;
  46025. }
  46026. module.exports = identity;
  46027. /***/ }),
  46028. /***/ 35694:
  46029. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  46030. var baseIsArguments = __webpack_require__(9454),
  46031. isObjectLike = __webpack_require__(37005);
  46032. /** Used for built-in method references. */
  46033. var objectProto = Object.prototype;
  46034. /** Used to check objects for own properties. */
  46035. var hasOwnProperty = objectProto.hasOwnProperty;
  46036. /** Built-in value references. */
  46037. var propertyIsEnumerable = objectProto.propertyIsEnumerable;
  46038. /**
  46039. * Checks if `value` is likely an `arguments` object.
  46040. *
  46041. * @static
  46042. * @memberOf _
  46043. * @since 0.1.0
  46044. * @category Lang
  46045. * @param {*} value The value to check.
  46046. * @returns {boolean} Returns `true` if `value` is an `arguments` object,
  46047. * else `false`.
  46048. * @example
  46049. *
  46050. * _.isArguments(function() { return arguments; }());
  46051. * // => true
  46052. *
  46053. * _.isArguments([1, 2, 3]);
  46054. * // => false
  46055. */
  46056. var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
  46057. return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
  46058. !propertyIsEnumerable.call(value, 'callee');
  46059. };
  46060. module.exports = isArguments;
  46061. /***/ }),
  46062. /***/ 1469:
  46063. /***/ ((module) => {
  46064. /**
  46065. * Checks if `value` is classified as an `Array` object.
  46066. *
  46067. * @static
  46068. * @memberOf _
  46069. * @since 0.1.0
  46070. * @category Lang
  46071. * @param {*} value The value to check.
  46072. * @returns {boolean} Returns `true` if `value` is an array, else `false`.
  46073. * @example
  46074. *
  46075. * _.isArray([1, 2, 3]);
  46076. * // => true
  46077. *
  46078. * _.isArray(document.body.children);
  46079. * // => false
  46080. *
  46081. * _.isArray('abc');
  46082. * // => false
  46083. *
  46084. * _.isArray(_.noop);
  46085. * // => false
  46086. */
  46087. var isArray = Array.isArray;
  46088. module.exports = isArray;
  46089. /***/ }),
  46090. /***/ 98612:
  46091. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  46092. var isFunction = __webpack_require__(23560),
  46093. isLength = __webpack_require__(41780);
  46094. /**
  46095. * Checks if `value` is array-like. A value is considered array-like if it's
  46096. * not a function and has a `value.length` that's an integer greater than or
  46097. * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
  46098. *
  46099. * @static
  46100. * @memberOf _
  46101. * @since 4.0.0
  46102. * @category Lang
  46103. * @param {*} value The value to check.
  46104. * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
  46105. * @example
  46106. *
  46107. * _.isArrayLike([1, 2, 3]);
  46108. * // => true
  46109. *
  46110. * _.isArrayLike(document.body.children);
  46111. * // => true
  46112. *
  46113. * _.isArrayLike('abc');
  46114. * // => true
  46115. *
  46116. * _.isArrayLike(_.noop);
  46117. * // => false
  46118. */
  46119. function isArrayLike(value) {
  46120. return value != null && isLength(value.length) && !isFunction(value);
  46121. }
  46122. module.exports = isArrayLike;
  46123. /***/ }),
  46124. /***/ 44144:
  46125. /***/ ((module, exports, __webpack_require__) => {
  46126. /* module decorator */ module = __webpack_require__.nmd(module);
  46127. var root = __webpack_require__(55639),
  46128. stubFalse = __webpack_require__(95062);
  46129. /** Detect free variable `exports`. */
  46130. var freeExports = true && exports && !exports.nodeType && exports;
  46131. /** Detect free variable `module`. */
  46132. var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
  46133. /** Detect the popular CommonJS extension `module.exports`. */
  46134. var moduleExports = freeModule && freeModule.exports === freeExports;
  46135. /** Built-in value references. */
  46136. var Buffer = moduleExports ? root.Buffer : undefined;
  46137. /* Built-in method references for those with the same name as other `lodash` methods. */
  46138. var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
  46139. /**
  46140. * Checks if `value` is a buffer.
  46141. *
  46142. * @static
  46143. * @memberOf _
  46144. * @since 4.3.0
  46145. * @category Lang
  46146. * @param {*} value The value to check.
  46147. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
  46148. * @example
  46149. *
  46150. * _.isBuffer(new Buffer(2));
  46151. * // => true
  46152. *
  46153. * _.isBuffer(new Uint8Array(2));
  46154. * // => false
  46155. */
  46156. var isBuffer = nativeIsBuffer || stubFalse;
  46157. module.exports = isBuffer;
  46158. /***/ }),
  46159. /***/ 18446:
  46160. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  46161. var baseIsEqual = __webpack_require__(90939);
  46162. /**
  46163. * Performs a deep comparison between two values to determine if they are
  46164. * equivalent.
  46165. *
  46166. * **Note:** This method supports comparing arrays, array buffers, booleans,
  46167. * date objects, error objects, maps, numbers, `Object` objects, regexes,
  46168. * sets, strings, symbols, and typed arrays. `Object` objects are compared
  46169. * by their own, not inherited, enumerable properties. Functions and DOM
  46170. * nodes are compared by strict equality, i.e. `===`.
  46171. *
  46172. * @static
  46173. * @memberOf _
  46174. * @since 0.1.0
  46175. * @category Lang
  46176. * @param {*} value The value to compare.
  46177. * @param {*} other The other value to compare.
  46178. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  46179. * @example
  46180. *
  46181. * var object = { 'a': 1 };
  46182. * var other = { 'a': 1 };
  46183. *
  46184. * _.isEqual(object, other);
  46185. * // => true
  46186. *
  46187. * object === other;
  46188. * // => false
  46189. */
  46190. function isEqual(value, other) {
  46191. return baseIsEqual(value, other);
  46192. }
  46193. module.exports = isEqual;
  46194. /***/ }),
  46195. /***/ 23560:
  46196. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  46197. var baseGetTag = __webpack_require__(44239),
  46198. isObject = __webpack_require__(13218);
  46199. /** `Object#toString` result references. */
  46200. var asyncTag = '[object AsyncFunction]',
  46201. funcTag = '[object Function]',
  46202. genTag = '[object GeneratorFunction]',
  46203. proxyTag = '[object Proxy]';
  46204. /**
  46205. * Checks if `value` is classified as a `Function` object.
  46206. *
  46207. * @static
  46208. * @memberOf _
  46209. * @since 0.1.0
  46210. * @category Lang
  46211. * @param {*} value The value to check.
  46212. * @returns {boolean} Returns `true` if `value` is a function, else `false`.
  46213. * @example
  46214. *
  46215. * _.isFunction(_);
  46216. * // => true
  46217. *
  46218. * _.isFunction(/abc/);
  46219. * // => false
  46220. */
  46221. function isFunction(value) {
  46222. if (!isObject(value)) {
  46223. return false;
  46224. }
  46225. // The use of `Object#toString` avoids issues with the `typeof` operator
  46226. // in Safari 9 which returns 'object' for typed arrays and other constructors.
  46227. var tag = baseGetTag(value);
  46228. return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
  46229. }
  46230. module.exports = isFunction;
  46231. /***/ }),
  46232. /***/ 41780:
  46233. /***/ ((module) => {
  46234. /** Used as references for various `Number` constants. */
  46235. var MAX_SAFE_INTEGER = 9007199254740991;
  46236. /**
  46237. * Checks if `value` is a valid array-like length.
  46238. *
  46239. * **Note:** This method is loosely based on
  46240. * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
  46241. *
  46242. * @static
  46243. * @memberOf _
  46244. * @since 4.0.0
  46245. * @category Lang
  46246. * @param {*} value The value to check.
  46247. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
  46248. * @example
  46249. *
  46250. * _.isLength(3);
  46251. * // => true
  46252. *
  46253. * _.isLength(Number.MIN_VALUE);
  46254. * // => false
  46255. *
  46256. * _.isLength(Infinity);
  46257. * // => false
  46258. *
  46259. * _.isLength('3');
  46260. * // => false
  46261. */
  46262. function isLength(value) {
  46263. return typeof value == 'number' &&
  46264. value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
  46265. }
  46266. module.exports = isLength;
  46267. /***/ }),
  46268. /***/ 13218:
  46269. /***/ ((module) => {
  46270. /**
  46271. * Checks if `value` is the
  46272. * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
  46273. * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
  46274. *
  46275. * @static
  46276. * @memberOf _
  46277. * @since 0.1.0
  46278. * @category Lang
  46279. * @param {*} value The value to check.
  46280. * @returns {boolean} Returns `true` if `value` is an object, else `false`.
  46281. * @example
  46282. *
  46283. * _.isObject({});
  46284. * // => true
  46285. *
  46286. * _.isObject([1, 2, 3]);
  46287. * // => true
  46288. *
  46289. * _.isObject(_.noop);
  46290. * // => true
  46291. *
  46292. * _.isObject(null);
  46293. * // => false
  46294. */
  46295. function isObject(value) {
  46296. var type = typeof value;
  46297. return value != null && (type == 'object' || type == 'function');
  46298. }
  46299. module.exports = isObject;
  46300. /***/ }),
  46301. /***/ 37005:
  46302. /***/ ((module) => {
  46303. /**
  46304. * Checks if `value` is object-like. A value is object-like if it's not `null`
  46305. * and has a `typeof` result of "object".
  46306. *
  46307. * @static
  46308. * @memberOf _
  46309. * @since 4.0.0
  46310. * @category Lang
  46311. * @param {*} value The value to check.
  46312. * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
  46313. * @example
  46314. *
  46315. * _.isObjectLike({});
  46316. * // => true
  46317. *
  46318. * _.isObjectLike([1, 2, 3]);
  46319. * // => true
  46320. *
  46321. * _.isObjectLike(_.noop);
  46322. * // => false
  46323. *
  46324. * _.isObjectLike(null);
  46325. * // => false
  46326. */
  46327. function isObjectLike(value) {
  46328. return value != null && typeof value == 'object';
  46329. }
  46330. module.exports = isObjectLike;
  46331. /***/ }),
  46332. /***/ 33448:
  46333. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  46334. var baseGetTag = __webpack_require__(44239),
  46335. isObjectLike = __webpack_require__(37005);
  46336. /** `Object#toString` result references. */
  46337. var symbolTag = '[object Symbol]';
  46338. /**
  46339. * Checks if `value` is classified as a `Symbol` primitive or object.
  46340. *
  46341. * @static
  46342. * @memberOf _
  46343. * @since 4.0.0
  46344. * @category Lang
  46345. * @param {*} value The value to check.
  46346. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
  46347. * @example
  46348. *
  46349. * _.isSymbol(Symbol.iterator);
  46350. * // => true
  46351. *
  46352. * _.isSymbol('abc');
  46353. * // => false
  46354. */
  46355. function isSymbol(value) {
  46356. return typeof value == 'symbol' ||
  46357. (isObjectLike(value) && baseGetTag(value) == symbolTag);
  46358. }
  46359. module.exports = isSymbol;
  46360. /***/ }),
  46361. /***/ 36719:
  46362. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  46363. var baseIsTypedArray = __webpack_require__(38749),
  46364. baseUnary = __webpack_require__(7518),
  46365. nodeUtil = __webpack_require__(31167);
  46366. /* Node.js helper references. */
  46367. var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
  46368. /**
  46369. * Checks if `value` is classified as a typed array.
  46370. *
  46371. * @static
  46372. * @memberOf _
  46373. * @since 3.0.0
  46374. * @category Lang
  46375. * @param {*} value The value to check.
  46376. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
  46377. * @example
  46378. *
  46379. * _.isTypedArray(new Uint8Array);
  46380. * // => true
  46381. *
  46382. * _.isTypedArray([]);
  46383. * // => false
  46384. */
  46385. var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
  46386. module.exports = isTypedArray;
  46387. /***/ }),
  46388. /***/ 3674:
  46389. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  46390. var arrayLikeKeys = __webpack_require__(14636),
  46391. baseKeys = __webpack_require__(280),
  46392. isArrayLike = __webpack_require__(98612);
  46393. /**
  46394. * Creates an array of the own enumerable property names of `object`.
  46395. *
  46396. * **Note:** Non-object values are coerced to objects. See the
  46397. * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  46398. * for more details.
  46399. *
  46400. * @static
  46401. * @since 0.1.0
  46402. * @memberOf _
  46403. * @category Object
  46404. * @param {Object} object The object to query.
  46405. * @returns {Array} Returns the array of property names.
  46406. * @example
  46407. *
  46408. * function Foo() {
  46409. * this.a = 1;
  46410. * this.b = 2;
  46411. * }
  46412. *
  46413. * Foo.prototype.c = 3;
  46414. *
  46415. * _.keys(new Foo);
  46416. * // => ['a', 'b'] (iteration order is not guaranteed)
  46417. *
  46418. * _.keys('hi');
  46419. * // => ['0', '1']
  46420. */
  46421. function keys(object) {
  46422. return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
  46423. }
  46424. module.exports = keys;
  46425. /***/ }),
  46426. /***/ 81704:
  46427. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  46428. var arrayLikeKeys = __webpack_require__(14636),
  46429. baseKeysIn = __webpack_require__(10313),
  46430. isArrayLike = __webpack_require__(98612);
  46431. /**
  46432. * Creates an array of the own and inherited enumerable property names of `object`.
  46433. *
  46434. * **Note:** Non-object values are coerced to objects.
  46435. *
  46436. * @static
  46437. * @memberOf _
  46438. * @since 3.0.0
  46439. * @category Object
  46440. * @param {Object} object The object to query.
  46441. * @returns {Array} Returns the array of property names.
  46442. * @example
  46443. *
  46444. * function Foo() {
  46445. * this.a = 1;
  46446. * this.b = 2;
  46447. * }
  46448. *
  46449. * Foo.prototype.c = 3;
  46450. *
  46451. * _.keysIn(new Foo);
  46452. * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
  46453. */
  46454. function keysIn(object) {
  46455. return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
  46456. }
  46457. module.exports = keysIn;
  46458. /***/ }),
  46459. /***/ 96486:
  46460. /***/ (function(module, exports, __webpack_require__) {
  46461. /* module decorator */ module = __webpack_require__.nmd(module);
  46462. var __WEBPACK_AMD_DEFINE_RESULT__;/**
  46463. * @license
  46464. * Lodash <https://lodash.com/>
  46465. * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
  46466. * Released under MIT license <https://lodash.com/license>
  46467. * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
  46468. * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
  46469. */
  46470. ;(function() {
  46471. /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  46472. var undefined;
  46473. /** Used as the semantic version number. */
  46474. var VERSION = '4.17.21';
  46475. /** Used as the size to enable large array optimizations. */
  46476. var LARGE_ARRAY_SIZE = 200;
  46477. /** Error message constants. */
  46478. var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
  46479. FUNC_ERROR_TEXT = 'Expected a function',
  46480. INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';
  46481. /** Used to stand-in for `undefined` hash values. */
  46482. var HASH_UNDEFINED = '__lodash_hash_undefined__';
  46483. /** Used as the maximum memoize cache size. */
  46484. var MAX_MEMOIZE_SIZE = 500;
  46485. /** Used as the internal argument placeholder. */
  46486. var PLACEHOLDER = '__lodash_placeholder__';
  46487. /** Used to compose bitmasks for cloning. */
  46488. var CLONE_DEEP_FLAG = 1,
  46489. CLONE_FLAT_FLAG = 2,
  46490. CLONE_SYMBOLS_FLAG = 4;
  46491. /** Used to compose bitmasks for value comparisons. */
  46492. var COMPARE_PARTIAL_FLAG = 1,
  46493. COMPARE_UNORDERED_FLAG = 2;
  46494. /** Used to compose bitmasks for function metadata. */
  46495. var WRAP_BIND_FLAG = 1,
  46496. WRAP_BIND_KEY_FLAG = 2,
  46497. WRAP_CURRY_BOUND_FLAG = 4,
  46498. WRAP_CURRY_FLAG = 8,
  46499. WRAP_CURRY_RIGHT_FLAG = 16,
  46500. WRAP_PARTIAL_FLAG = 32,
  46501. WRAP_PARTIAL_RIGHT_FLAG = 64,
  46502. WRAP_ARY_FLAG = 128,
  46503. WRAP_REARG_FLAG = 256,
  46504. WRAP_FLIP_FLAG = 512;
  46505. /** Used as default options for `_.truncate`. */
  46506. var DEFAULT_TRUNC_LENGTH = 30,
  46507. DEFAULT_TRUNC_OMISSION = '...';
  46508. /** Used to detect hot functions by number of calls within a span of milliseconds. */
  46509. var HOT_COUNT = 800,
  46510. HOT_SPAN = 16;
  46511. /** Used to indicate the type of lazy iteratees. */
  46512. var LAZY_FILTER_FLAG = 1,
  46513. LAZY_MAP_FLAG = 2,
  46514. LAZY_WHILE_FLAG = 3;
  46515. /** Used as references for various `Number` constants. */
  46516. var INFINITY = 1 / 0,
  46517. MAX_SAFE_INTEGER = 9007199254740991,
  46518. MAX_INTEGER = 1.7976931348623157e+308,
  46519. NAN = 0 / 0;
  46520. /** Used as references for the maximum length and index of an array. */
  46521. var MAX_ARRAY_LENGTH = 4294967295,
  46522. MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
  46523. HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
  46524. /** Used to associate wrap methods with their bit flags. */
  46525. var wrapFlags = [
  46526. ['ary', WRAP_ARY_FLAG],
  46527. ['bind', WRAP_BIND_FLAG],
  46528. ['bindKey', WRAP_BIND_KEY_FLAG],
  46529. ['curry', WRAP_CURRY_FLAG],
  46530. ['curryRight', WRAP_CURRY_RIGHT_FLAG],
  46531. ['flip', WRAP_FLIP_FLAG],
  46532. ['partial', WRAP_PARTIAL_FLAG],
  46533. ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
  46534. ['rearg', WRAP_REARG_FLAG]
  46535. ];
  46536. /** `Object#toString` result references. */
  46537. var argsTag = '[object Arguments]',
  46538. arrayTag = '[object Array]',
  46539. asyncTag = '[object AsyncFunction]',
  46540. boolTag = '[object Boolean]',
  46541. dateTag = '[object Date]',
  46542. domExcTag = '[object DOMException]',
  46543. errorTag = '[object Error]',
  46544. funcTag = '[object Function]',
  46545. genTag = '[object GeneratorFunction]',
  46546. mapTag = '[object Map]',
  46547. numberTag = '[object Number]',
  46548. nullTag = '[object Null]',
  46549. objectTag = '[object Object]',
  46550. promiseTag = '[object Promise]',
  46551. proxyTag = '[object Proxy]',
  46552. regexpTag = '[object RegExp]',
  46553. setTag = '[object Set]',
  46554. stringTag = '[object String]',
  46555. symbolTag = '[object Symbol]',
  46556. undefinedTag = '[object Undefined]',
  46557. weakMapTag = '[object WeakMap]',
  46558. weakSetTag = '[object WeakSet]';
  46559. var arrayBufferTag = '[object ArrayBuffer]',
  46560. dataViewTag = '[object DataView]',
  46561. float32Tag = '[object Float32Array]',
  46562. float64Tag = '[object Float64Array]',
  46563. int8Tag = '[object Int8Array]',
  46564. int16Tag = '[object Int16Array]',
  46565. int32Tag = '[object Int32Array]',
  46566. uint8Tag = '[object Uint8Array]',
  46567. uint8ClampedTag = '[object Uint8ClampedArray]',
  46568. uint16Tag = '[object Uint16Array]',
  46569. uint32Tag = '[object Uint32Array]';
  46570. /** Used to match empty string literals in compiled template source. */
  46571. var reEmptyStringLeading = /\b__p \+= '';/g,
  46572. reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
  46573. reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
  46574. /** Used to match HTML entities and HTML characters. */
  46575. var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
  46576. reUnescapedHtml = /[&<>"']/g,
  46577. reHasEscapedHtml = RegExp(reEscapedHtml.source),
  46578. reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
  46579. /** Used to match template delimiters. */
  46580. var reEscape = /<%-([\s\S]+?)%>/g,
  46581. reEvaluate = /<%([\s\S]+?)%>/g,
  46582. reInterpolate = /<%=([\s\S]+?)%>/g;
  46583. /** Used to match property names within property paths. */
  46584. var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
  46585. reIsPlainProp = /^\w*$/,
  46586. rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
  46587. /**
  46588. * Used to match `RegExp`
  46589. * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
  46590. */
  46591. var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
  46592. reHasRegExpChar = RegExp(reRegExpChar.source);
  46593. /** Used to match leading whitespace. */
  46594. var reTrimStart = /^\s+/;
  46595. /** Used to match a single whitespace character. */
  46596. var reWhitespace = /\s/;
  46597. /** Used to match wrap detail comments. */
  46598. var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
  46599. reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
  46600. reSplitDetails = /,? & /;
  46601. /** Used to match words composed of alphanumeric characters. */
  46602. var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
  46603. /**
  46604. * Used to validate the `validate` option in `_.template` variable.
  46605. *
  46606. * Forbids characters which could potentially change the meaning of the function argument definition:
  46607. * - "()," (modification of function parameters)
  46608. * - "=" (default value)
  46609. * - "[]{}" (destructuring of function parameters)
  46610. * - "/" (beginning of a comment)
  46611. * - whitespace
  46612. */
  46613. var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
  46614. /** Used to match backslashes in property paths. */
  46615. var reEscapeChar = /\\(\\)?/g;
  46616. /**
  46617. * Used to match
  46618. * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
  46619. */
  46620. var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
  46621. /** Used to match `RegExp` flags from their coerced string values. */
  46622. var reFlags = /\w*$/;
  46623. /** Used to detect bad signed hexadecimal string values. */
  46624. var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
  46625. /** Used to detect binary string values. */
  46626. var reIsBinary = /^0b[01]+$/i;
  46627. /** Used to detect host constructors (Safari). */
  46628. var reIsHostCtor = /^\[object .+?Constructor\]$/;
  46629. /** Used to detect octal string values. */
  46630. var reIsOctal = /^0o[0-7]+$/i;
  46631. /** Used to detect unsigned integer values. */
  46632. var reIsUint = /^(?:0|[1-9]\d*)$/;
  46633. /** Used to match Latin Unicode letters (excluding mathematical operators). */
  46634. var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
  46635. /** Used to ensure capturing order of template delimiters. */
  46636. var reNoMatch = /($^)/;
  46637. /** Used to match unescaped characters in compiled string literals. */
  46638. var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
  46639. /** Used to compose unicode character classes. */
  46640. var rsAstralRange = '\\ud800-\\udfff',
  46641. rsComboMarksRange = '\\u0300-\\u036f',
  46642. reComboHalfMarksRange = '\\ufe20-\\ufe2f',
  46643. rsComboSymbolsRange = '\\u20d0-\\u20ff',
  46644. rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
  46645. rsDingbatRange = '\\u2700-\\u27bf',
  46646. rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
  46647. rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
  46648. rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
  46649. rsPunctuationRange = '\\u2000-\\u206f',
  46650. rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
  46651. rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
  46652. rsVarRange = '\\ufe0e\\ufe0f',
  46653. rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
  46654. /** Used to compose unicode capture groups. */
  46655. var rsApos = "['\u2019]",
  46656. rsAstral = '[' + rsAstralRange + ']',
  46657. rsBreak = '[' + rsBreakRange + ']',
  46658. rsCombo = '[' + rsComboRange + ']',
  46659. rsDigits = '\\d+',
  46660. rsDingbat = '[' + rsDingbatRange + ']',
  46661. rsLower = '[' + rsLowerRange + ']',
  46662. rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
  46663. rsFitz = '\\ud83c[\\udffb-\\udfff]',
  46664. rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
  46665. rsNonAstral = '[^' + rsAstralRange + ']',
  46666. rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
  46667. rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
  46668. rsUpper = '[' + rsUpperRange + ']',
  46669. rsZWJ = '\\u200d';
  46670. /** Used to compose unicode regexes. */
  46671. var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
  46672. rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
  46673. rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
  46674. rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
  46675. reOptMod = rsModifier + '?',
  46676. rsOptVar = '[' + rsVarRange + ']?',
  46677. rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
  46678. rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
  46679. rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
  46680. rsSeq = rsOptVar + reOptMod + rsOptJoin,
  46681. rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
  46682. rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
  46683. /** Used to match apostrophes. */
  46684. var reApos = RegExp(rsApos, 'g');
  46685. /**
  46686. * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
  46687. * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
  46688. */
  46689. var reComboMark = RegExp(rsCombo, 'g');
  46690. /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
  46691. var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
  46692. /** Used to match complex or compound words. */
  46693. var reUnicodeWord = RegExp([
  46694. rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
  46695. rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
  46696. rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
  46697. rsUpper + '+' + rsOptContrUpper,
  46698. rsOrdUpper,
  46699. rsOrdLower,
  46700. rsDigits,
  46701. rsEmoji
  46702. ].join('|'), 'g');
  46703. /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
  46704. var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
  46705. /** Used to detect strings that need a more robust regexp to match words. */
  46706. var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
  46707. /** Used to assign default `context` object properties. */
  46708. var contextProps = [
  46709. 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
  46710. 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
  46711. 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
  46712. 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
  46713. '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
  46714. ];
  46715. /** Used to make template sourceURLs easier to identify. */
  46716. var templateCounter = -1;
  46717. /** Used to identify `toStringTag` values of typed arrays. */
  46718. var typedArrayTags = {};
  46719. typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  46720. typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  46721. typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  46722. typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  46723. typedArrayTags[uint32Tag] = true;
  46724. typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  46725. typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  46726. typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  46727. typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  46728. typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  46729. typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  46730. typedArrayTags[setTag] = typedArrayTags[stringTag] =
  46731. typedArrayTags[weakMapTag] = false;
  46732. /** Used to identify `toStringTag` values supported by `_.clone`. */
  46733. var cloneableTags = {};
  46734. cloneableTags[argsTag] = cloneableTags[arrayTag] =
  46735. cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
  46736. cloneableTags[boolTag] = cloneableTags[dateTag] =
  46737. cloneableTags[float32Tag] = cloneableTags[float64Tag] =
  46738. cloneableTags[int8Tag] = cloneableTags[int16Tag] =
  46739. cloneableTags[int32Tag] = cloneableTags[mapTag] =
  46740. cloneableTags[numberTag] = cloneableTags[objectTag] =
  46741. cloneableTags[regexpTag] = cloneableTags[setTag] =
  46742. cloneableTags[stringTag] = cloneableTags[symbolTag] =
  46743. cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  46744. cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  46745. cloneableTags[errorTag] = cloneableTags[funcTag] =
  46746. cloneableTags[weakMapTag] = false;
  46747. /** Used to map Latin Unicode letters to basic Latin letters. */
  46748. var deburredLetters = {
  46749. // Latin-1 Supplement block.
  46750. '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
  46751. '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
  46752. '\xc7': 'C', '\xe7': 'c',
  46753. '\xd0': 'D', '\xf0': 'd',
  46754. '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
  46755. '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
  46756. '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
  46757. '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
  46758. '\xd1': 'N', '\xf1': 'n',
  46759. '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
  46760. '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
  46761. '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
  46762. '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
  46763. '\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
  46764. '\xc6': 'Ae', '\xe6': 'ae',
  46765. '\xde': 'Th', '\xfe': 'th',
  46766. '\xdf': 'ss',
  46767. // Latin Extended-A block.
  46768. '\u0100': 'A', '\u0102': 'A', '\u0104': 'A',
  46769. '\u0101': 'a', '\u0103': 'a', '\u0105': 'a',
  46770. '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
  46771. '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
  46772. '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
  46773. '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
  46774. '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
  46775. '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
  46776. '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
  46777. '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
  46778. '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
  46779. '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
  46780. '\u0134': 'J', '\u0135': 'j',
  46781. '\u0136': 'K', '\u0137': 'k', '\u0138': 'k',
  46782. '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
  46783. '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
  46784. '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
  46785. '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
  46786. '\u014c': 'O', '\u014e': 'O', '\u0150': 'O',
  46787. '\u014d': 'o', '\u014f': 'o', '\u0151': 'o',
  46788. '\u0154': 'R', '\u0156': 'R', '\u0158': 'R',
  46789. '\u0155': 'r', '\u0157': 'r', '\u0159': 'r',
  46790. '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
  46791. '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's',
  46792. '\u0162': 'T', '\u0164': 'T', '\u0166': 'T',
  46793. '\u0163': 't', '\u0165': 't', '\u0167': 't',
  46794. '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
  46795. '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
  46796. '\u0174': 'W', '\u0175': 'w',
  46797. '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y',
  46798. '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z',
  46799. '\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
  46800. '\u0132': 'IJ', '\u0133': 'ij',
  46801. '\u0152': 'Oe', '\u0153': 'oe',
  46802. '\u0149': "'n", '\u017f': 's'
  46803. };
  46804. /** Used to map characters to HTML entities. */
  46805. var htmlEscapes = {
  46806. '&': '&amp;',
  46807. '<': '&lt;',
  46808. '>': '&gt;',
  46809. '"': '&quot;',
  46810. "'": '&#39;'
  46811. };
  46812. /** Used to map HTML entities to characters. */
  46813. var htmlUnescapes = {
  46814. '&amp;': '&',
  46815. '&lt;': '<',
  46816. '&gt;': '>',
  46817. '&quot;': '"',
  46818. '&#39;': "'"
  46819. };
  46820. /** Used to escape characters for inclusion in compiled string literals. */
  46821. var stringEscapes = {
  46822. '\\': '\\',
  46823. "'": "'",
  46824. '\n': 'n',
  46825. '\r': 'r',
  46826. '\u2028': 'u2028',
  46827. '\u2029': 'u2029'
  46828. };
  46829. /** Built-in method references without a dependency on `root`. */
  46830. var freeParseFloat = parseFloat,
  46831. freeParseInt = parseInt;
  46832. /** Detect free variable `global` from Node.js. */
  46833. var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;
  46834. /** Detect free variable `self`. */
  46835. var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
  46836. /** Used as a reference to the global object. */
  46837. var root = freeGlobal || freeSelf || Function('return this')();
  46838. /** Detect free variable `exports`. */
  46839. var freeExports = true && exports && !exports.nodeType && exports;
  46840. /** Detect free variable `module`. */
  46841. var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
  46842. /** Detect the popular CommonJS extension `module.exports`. */
  46843. var moduleExports = freeModule && freeModule.exports === freeExports;
  46844. /** Detect free variable `process` from Node.js. */
  46845. var freeProcess = moduleExports && freeGlobal.process;
  46846. /** Used to access faster Node.js helpers. */
  46847. var nodeUtil = (function() {
  46848. try {
  46849. // Use `util.types` for Node.js 10+.
  46850. var types = freeModule && freeModule.require && freeModule.require('util').types;
  46851. if (types) {
  46852. return types;
  46853. }
  46854. // Legacy `process.binding('util')` for Node.js < 10.
  46855. return freeProcess && freeProcess.binding && freeProcess.binding('util');
  46856. } catch (e) {}
  46857. }());
  46858. /* Node.js helper references. */
  46859. var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
  46860. nodeIsDate = nodeUtil && nodeUtil.isDate,
  46861. nodeIsMap = nodeUtil && nodeUtil.isMap,
  46862. nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
  46863. nodeIsSet = nodeUtil && nodeUtil.isSet,
  46864. nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
  46865. /*--------------------------------------------------------------------------*/
  46866. /**
  46867. * A faster alternative to `Function#apply`, this function invokes `func`
  46868. * with the `this` binding of `thisArg` and the arguments of `args`.
  46869. *
  46870. * @private
  46871. * @param {Function} func The function to invoke.
  46872. * @param {*} thisArg The `this` binding of `func`.
  46873. * @param {Array} args The arguments to invoke `func` with.
  46874. * @returns {*} Returns the result of `func`.
  46875. */
  46876. function apply(func, thisArg, args) {
  46877. switch (args.length) {
  46878. case 0: return func.call(thisArg);
  46879. case 1: return func.call(thisArg, args[0]);
  46880. case 2: return func.call(thisArg, args[0], args[1]);
  46881. case 3: return func.call(thisArg, args[0], args[1], args[2]);
  46882. }
  46883. return func.apply(thisArg, args);
  46884. }
  46885. /**
  46886. * A specialized version of `baseAggregator` for arrays.
  46887. *
  46888. * @private
  46889. * @param {Array} [array] The array to iterate over.
  46890. * @param {Function} setter The function to set `accumulator` values.
  46891. * @param {Function} iteratee The iteratee to transform keys.
  46892. * @param {Object} accumulator The initial aggregated object.
  46893. * @returns {Function} Returns `accumulator`.
  46894. */
  46895. function arrayAggregator(array, setter, iteratee, accumulator) {
  46896. var index = -1,
  46897. length = array == null ? 0 : array.length;
  46898. while (++index < length) {
  46899. var value = array[index];
  46900. setter(accumulator, value, iteratee(value), array);
  46901. }
  46902. return accumulator;
  46903. }
  46904. /**
  46905. * A specialized version of `_.forEach` for arrays without support for
  46906. * iteratee shorthands.
  46907. *
  46908. * @private
  46909. * @param {Array} [array] The array to iterate over.
  46910. * @param {Function} iteratee The function invoked per iteration.
  46911. * @returns {Array} Returns `array`.
  46912. */
  46913. function arrayEach(array, iteratee) {
  46914. var index = -1,
  46915. length = array == null ? 0 : array.length;
  46916. while (++index < length) {
  46917. if (iteratee(array[index], index, array) === false) {
  46918. break;
  46919. }
  46920. }
  46921. return array;
  46922. }
  46923. /**
  46924. * A specialized version of `_.forEachRight` for arrays without support for
  46925. * iteratee shorthands.
  46926. *
  46927. * @private
  46928. * @param {Array} [array] The array to iterate over.
  46929. * @param {Function} iteratee The function invoked per iteration.
  46930. * @returns {Array} Returns `array`.
  46931. */
  46932. function arrayEachRight(array, iteratee) {
  46933. var length = array == null ? 0 : array.length;
  46934. while (length--) {
  46935. if (iteratee(array[length], length, array) === false) {
  46936. break;
  46937. }
  46938. }
  46939. return array;
  46940. }
  46941. /**
  46942. * A specialized version of `_.every` for arrays without support for
  46943. * iteratee shorthands.
  46944. *
  46945. * @private
  46946. * @param {Array} [array] The array to iterate over.
  46947. * @param {Function} predicate The function invoked per iteration.
  46948. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  46949. * else `false`.
  46950. */
  46951. function arrayEvery(array, predicate) {
  46952. var index = -1,
  46953. length = array == null ? 0 : array.length;
  46954. while (++index < length) {
  46955. if (!predicate(array[index], index, array)) {
  46956. return false;
  46957. }
  46958. }
  46959. return true;
  46960. }
  46961. /**
  46962. * A specialized version of `_.filter` for arrays without support for
  46963. * iteratee shorthands.
  46964. *
  46965. * @private
  46966. * @param {Array} [array] The array to iterate over.
  46967. * @param {Function} predicate The function invoked per iteration.
  46968. * @returns {Array} Returns the new filtered array.
  46969. */
  46970. function arrayFilter(array, predicate) {
  46971. var index = -1,
  46972. length = array == null ? 0 : array.length,
  46973. resIndex = 0,
  46974. result = [];
  46975. while (++index < length) {
  46976. var value = array[index];
  46977. if (predicate(value, index, array)) {
  46978. result[resIndex++] = value;
  46979. }
  46980. }
  46981. return result;
  46982. }
  46983. /**
  46984. * A specialized version of `_.includes` for arrays without support for
  46985. * specifying an index to search from.
  46986. *
  46987. * @private
  46988. * @param {Array} [array] The array to inspect.
  46989. * @param {*} target The value to search for.
  46990. * @returns {boolean} Returns `true` if `target` is found, else `false`.
  46991. */
  46992. function arrayIncludes(array, value) {
  46993. var length = array == null ? 0 : array.length;
  46994. return !!length && baseIndexOf(array, value, 0) > -1;
  46995. }
  46996. /**
  46997. * This function is like `arrayIncludes` except that it accepts a comparator.
  46998. *
  46999. * @private
  47000. * @param {Array} [array] The array to inspect.
  47001. * @param {*} target The value to search for.
  47002. * @param {Function} comparator The comparator invoked per element.
  47003. * @returns {boolean} Returns `true` if `target` is found, else `false`.
  47004. */
  47005. function arrayIncludesWith(array, value, comparator) {
  47006. var index = -1,
  47007. length = array == null ? 0 : array.length;
  47008. while (++index < length) {
  47009. if (comparator(value, array[index])) {
  47010. return true;
  47011. }
  47012. }
  47013. return false;
  47014. }
  47015. /**
  47016. * A specialized version of `_.map` for arrays without support for iteratee
  47017. * shorthands.
  47018. *
  47019. * @private
  47020. * @param {Array} [array] The array to iterate over.
  47021. * @param {Function} iteratee The function invoked per iteration.
  47022. * @returns {Array} Returns the new mapped array.
  47023. */
  47024. function arrayMap(array, iteratee) {
  47025. var index = -1,
  47026. length = array == null ? 0 : array.length,
  47027. result = Array(length);
  47028. while (++index < length) {
  47029. result[index] = iteratee(array[index], index, array);
  47030. }
  47031. return result;
  47032. }
  47033. /**
  47034. * Appends the elements of `values` to `array`.
  47035. *
  47036. * @private
  47037. * @param {Array} array The array to modify.
  47038. * @param {Array} values The values to append.
  47039. * @returns {Array} Returns `array`.
  47040. */
  47041. function arrayPush(array, values) {
  47042. var index = -1,
  47043. length = values.length,
  47044. offset = array.length;
  47045. while (++index < length) {
  47046. array[offset + index] = values[index];
  47047. }
  47048. return array;
  47049. }
  47050. /**
  47051. * A specialized version of `_.reduce` for arrays without support for
  47052. * iteratee shorthands.
  47053. *
  47054. * @private
  47055. * @param {Array} [array] The array to iterate over.
  47056. * @param {Function} iteratee The function invoked per iteration.
  47057. * @param {*} [accumulator] The initial value.
  47058. * @param {boolean} [initAccum] Specify using the first element of `array` as
  47059. * the initial value.
  47060. * @returns {*} Returns the accumulated value.
  47061. */
  47062. function arrayReduce(array, iteratee, accumulator, initAccum) {
  47063. var index = -1,
  47064. length = array == null ? 0 : array.length;
  47065. if (initAccum && length) {
  47066. accumulator = array[++index];
  47067. }
  47068. while (++index < length) {
  47069. accumulator = iteratee(accumulator, array[index], index, array);
  47070. }
  47071. return accumulator;
  47072. }
  47073. /**
  47074. * A specialized version of `_.reduceRight` for arrays without support for
  47075. * iteratee shorthands.
  47076. *
  47077. * @private
  47078. * @param {Array} [array] The array to iterate over.
  47079. * @param {Function} iteratee The function invoked per iteration.
  47080. * @param {*} [accumulator] The initial value.
  47081. * @param {boolean} [initAccum] Specify using the last element of `array` as
  47082. * the initial value.
  47083. * @returns {*} Returns the accumulated value.
  47084. */
  47085. function arrayReduceRight(array, iteratee, accumulator, initAccum) {
  47086. var length = array == null ? 0 : array.length;
  47087. if (initAccum && length) {
  47088. accumulator = array[--length];
  47089. }
  47090. while (length--) {
  47091. accumulator = iteratee(accumulator, array[length], length, array);
  47092. }
  47093. return accumulator;
  47094. }
  47095. /**
  47096. * A specialized version of `_.some` for arrays without support for iteratee
  47097. * shorthands.
  47098. *
  47099. * @private
  47100. * @param {Array} [array] The array to iterate over.
  47101. * @param {Function} predicate The function invoked per iteration.
  47102. * @returns {boolean} Returns `true` if any element passes the predicate check,
  47103. * else `false`.
  47104. */
  47105. function arraySome(array, predicate) {
  47106. var index = -1,
  47107. length = array == null ? 0 : array.length;
  47108. while (++index < length) {
  47109. if (predicate(array[index], index, array)) {
  47110. return true;
  47111. }
  47112. }
  47113. return false;
  47114. }
  47115. /**
  47116. * Gets the size of an ASCII `string`.
  47117. *
  47118. * @private
  47119. * @param {string} string The string inspect.
  47120. * @returns {number} Returns the string size.
  47121. */
  47122. var asciiSize = baseProperty('length');
  47123. /**
  47124. * Converts an ASCII `string` to an array.
  47125. *
  47126. * @private
  47127. * @param {string} string The string to convert.
  47128. * @returns {Array} Returns the converted array.
  47129. */
  47130. function asciiToArray(string) {
  47131. return string.split('');
  47132. }
  47133. /**
  47134. * Splits an ASCII `string` into an array of its words.
  47135. *
  47136. * @private
  47137. * @param {string} The string to inspect.
  47138. * @returns {Array} Returns the words of `string`.
  47139. */
  47140. function asciiWords(string) {
  47141. return string.match(reAsciiWord) || [];
  47142. }
  47143. /**
  47144. * The base implementation of methods like `_.findKey` and `_.findLastKey`,
  47145. * without support for iteratee shorthands, which iterates over `collection`
  47146. * using `eachFunc`.
  47147. *
  47148. * @private
  47149. * @param {Array|Object} collection The collection to inspect.
  47150. * @param {Function} predicate The function invoked per iteration.
  47151. * @param {Function} eachFunc The function to iterate over `collection`.
  47152. * @returns {*} Returns the found element or its key, else `undefined`.
  47153. */
  47154. function baseFindKey(collection, predicate, eachFunc) {
  47155. var result;
  47156. eachFunc(collection, function(value, key, collection) {
  47157. if (predicate(value, key, collection)) {
  47158. result = key;
  47159. return false;
  47160. }
  47161. });
  47162. return result;
  47163. }
  47164. /**
  47165. * The base implementation of `_.findIndex` and `_.findLastIndex` without
  47166. * support for iteratee shorthands.
  47167. *
  47168. * @private
  47169. * @param {Array} array The array to inspect.
  47170. * @param {Function} predicate The function invoked per iteration.
  47171. * @param {number} fromIndex The index to search from.
  47172. * @param {boolean} [fromRight] Specify iterating from right to left.
  47173. * @returns {number} Returns the index of the matched value, else `-1`.
  47174. */
  47175. function baseFindIndex(array, predicate, fromIndex, fromRight) {
  47176. var length = array.length,
  47177. index = fromIndex + (fromRight ? 1 : -1);
  47178. while ((fromRight ? index-- : ++index < length)) {
  47179. if (predicate(array[index], index, array)) {
  47180. return index;
  47181. }
  47182. }
  47183. return -1;
  47184. }
  47185. /**
  47186. * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
  47187. *
  47188. * @private
  47189. * @param {Array} array The array to inspect.
  47190. * @param {*} value The value to search for.
  47191. * @param {number} fromIndex The index to search from.
  47192. * @returns {number} Returns the index of the matched value, else `-1`.
  47193. */
  47194. function baseIndexOf(array, value, fromIndex) {
  47195. return value === value
  47196. ? strictIndexOf(array, value, fromIndex)
  47197. : baseFindIndex(array, baseIsNaN, fromIndex);
  47198. }
  47199. /**
  47200. * This function is like `baseIndexOf` except that it accepts a comparator.
  47201. *
  47202. * @private
  47203. * @param {Array} array The array to inspect.
  47204. * @param {*} value The value to search for.
  47205. * @param {number} fromIndex The index to search from.
  47206. * @param {Function} comparator The comparator invoked per element.
  47207. * @returns {number} Returns the index of the matched value, else `-1`.
  47208. */
  47209. function baseIndexOfWith(array, value, fromIndex, comparator) {
  47210. var index = fromIndex - 1,
  47211. length = array.length;
  47212. while (++index < length) {
  47213. if (comparator(array[index], value)) {
  47214. return index;
  47215. }
  47216. }
  47217. return -1;
  47218. }
  47219. /**
  47220. * The base implementation of `_.isNaN` without support for number objects.
  47221. *
  47222. * @private
  47223. * @param {*} value The value to check.
  47224. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
  47225. */
  47226. function baseIsNaN(value) {
  47227. return value !== value;
  47228. }
  47229. /**
  47230. * The base implementation of `_.mean` and `_.meanBy` without support for
  47231. * iteratee shorthands.
  47232. *
  47233. * @private
  47234. * @param {Array} array The array to iterate over.
  47235. * @param {Function} iteratee The function invoked per iteration.
  47236. * @returns {number} Returns the mean.
  47237. */
  47238. function baseMean(array, iteratee) {
  47239. var length = array == null ? 0 : array.length;
  47240. return length ? (baseSum(array, iteratee) / length) : NAN;
  47241. }
  47242. /**
  47243. * The base implementation of `_.property` without support for deep paths.
  47244. *
  47245. * @private
  47246. * @param {string} key The key of the property to get.
  47247. * @returns {Function} Returns the new accessor function.
  47248. */
  47249. function baseProperty(key) {
  47250. return function(object) {
  47251. return object == null ? undefined : object[key];
  47252. };
  47253. }
  47254. /**
  47255. * The base implementation of `_.propertyOf` without support for deep paths.
  47256. *
  47257. * @private
  47258. * @param {Object} object The object to query.
  47259. * @returns {Function} Returns the new accessor function.
  47260. */
  47261. function basePropertyOf(object) {
  47262. return function(key) {
  47263. return object == null ? undefined : object[key];
  47264. };
  47265. }
  47266. /**
  47267. * The base implementation of `_.reduce` and `_.reduceRight`, without support
  47268. * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
  47269. *
  47270. * @private
  47271. * @param {Array|Object} collection The collection to iterate over.
  47272. * @param {Function} iteratee The function invoked per iteration.
  47273. * @param {*} accumulator The initial value.
  47274. * @param {boolean} initAccum Specify using the first or last element of
  47275. * `collection` as the initial value.
  47276. * @param {Function} eachFunc The function to iterate over `collection`.
  47277. * @returns {*} Returns the accumulated value.
  47278. */
  47279. function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
  47280. eachFunc(collection, function(value, index, collection) {
  47281. accumulator = initAccum
  47282. ? (initAccum = false, value)
  47283. : iteratee(accumulator, value, index, collection);
  47284. });
  47285. return accumulator;
  47286. }
  47287. /**
  47288. * The base implementation of `_.sortBy` which uses `comparer` to define the
  47289. * sort order of `array` and replaces criteria objects with their corresponding
  47290. * values.
  47291. *
  47292. * @private
  47293. * @param {Array} array The array to sort.
  47294. * @param {Function} comparer The function to define sort order.
  47295. * @returns {Array} Returns `array`.
  47296. */
  47297. function baseSortBy(array, comparer) {
  47298. var length = array.length;
  47299. array.sort(comparer);
  47300. while (length--) {
  47301. array[length] = array[length].value;
  47302. }
  47303. return array;
  47304. }
  47305. /**
  47306. * The base implementation of `_.sum` and `_.sumBy` without support for
  47307. * iteratee shorthands.
  47308. *
  47309. * @private
  47310. * @param {Array} array The array to iterate over.
  47311. * @param {Function} iteratee The function invoked per iteration.
  47312. * @returns {number} Returns the sum.
  47313. */
  47314. function baseSum(array, iteratee) {
  47315. var result,
  47316. index = -1,
  47317. length = array.length;
  47318. while (++index < length) {
  47319. var current = iteratee(array[index]);
  47320. if (current !== undefined) {
  47321. result = result === undefined ? current : (result + current);
  47322. }
  47323. }
  47324. return result;
  47325. }
  47326. /**
  47327. * The base implementation of `_.times` without support for iteratee shorthands
  47328. * or max array length checks.
  47329. *
  47330. * @private
  47331. * @param {number} n The number of times to invoke `iteratee`.
  47332. * @param {Function} iteratee The function invoked per iteration.
  47333. * @returns {Array} Returns the array of results.
  47334. */
  47335. function baseTimes(n, iteratee) {
  47336. var index = -1,
  47337. result = Array(n);
  47338. while (++index < n) {
  47339. result[index] = iteratee(index);
  47340. }
  47341. return result;
  47342. }
  47343. /**
  47344. * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
  47345. * of key-value pairs for `object` corresponding to the property names of `props`.
  47346. *
  47347. * @private
  47348. * @param {Object} object The object to query.
  47349. * @param {Array} props The property names to get values for.
  47350. * @returns {Object} Returns the key-value pairs.
  47351. */
  47352. function baseToPairs(object, props) {
  47353. return arrayMap(props, function(key) {
  47354. return [key, object[key]];
  47355. });
  47356. }
  47357. /**
  47358. * The base implementation of `_.trim`.
  47359. *
  47360. * @private
  47361. * @param {string} string The string to trim.
  47362. * @returns {string} Returns the trimmed string.
  47363. */
  47364. function baseTrim(string) {
  47365. return string
  47366. ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
  47367. : string;
  47368. }
  47369. /**
  47370. * The base implementation of `_.unary` without support for storing metadata.
  47371. *
  47372. * @private
  47373. * @param {Function} func The function to cap arguments for.
  47374. * @returns {Function} Returns the new capped function.
  47375. */
  47376. function baseUnary(func) {
  47377. return function(value) {
  47378. return func(value);
  47379. };
  47380. }
  47381. /**
  47382. * The base implementation of `_.values` and `_.valuesIn` which creates an
  47383. * array of `object` property values corresponding to the property names
  47384. * of `props`.
  47385. *
  47386. * @private
  47387. * @param {Object} object The object to query.
  47388. * @param {Array} props The property names to get values for.
  47389. * @returns {Object} Returns the array of property values.
  47390. */
  47391. function baseValues(object, props) {
  47392. return arrayMap(props, function(key) {
  47393. return object[key];
  47394. });
  47395. }
  47396. /**
  47397. * Checks if a `cache` value for `key` exists.
  47398. *
  47399. * @private
  47400. * @param {Object} cache The cache to query.
  47401. * @param {string} key The key of the entry to check.
  47402. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  47403. */
  47404. function cacheHas(cache, key) {
  47405. return cache.has(key);
  47406. }
  47407. /**
  47408. * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
  47409. * that is not found in the character symbols.
  47410. *
  47411. * @private
  47412. * @param {Array} strSymbols The string symbols to inspect.
  47413. * @param {Array} chrSymbols The character symbols to find.
  47414. * @returns {number} Returns the index of the first unmatched string symbol.
  47415. */
  47416. function charsStartIndex(strSymbols, chrSymbols) {
  47417. var index = -1,
  47418. length = strSymbols.length;
  47419. while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
  47420. return index;
  47421. }
  47422. /**
  47423. * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
  47424. * that is not found in the character symbols.
  47425. *
  47426. * @private
  47427. * @param {Array} strSymbols The string symbols to inspect.
  47428. * @param {Array} chrSymbols The character symbols to find.
  47429. * @returns {number} Returns the index of the last unmatched string symbol.
  47430. */
  47431. function charsEndIndex(strSymbols, chrSymbols) {
  47432. var index = strSymbols.length;
  47433. while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
  47434. return index;
  47435. }
  47436. /**
  47437. * Gets the number of `placeholder` occurrences in `array`.
  47438. *
  47439. * @private
  47440. * @param {Array} array The array to inspect.
  47441. * @param {*} placeholder The placeholder to search for.
  47442. * @returns {number} Returns the placeholder count.
  47443. */
  47444. function countHolders(array, placeholder) {
  47445. var length = array.length,
  47446. result = 0;
  47447. while (length--) {
  47448. if (array[length] === placeholder) {
  47449. ++result;
  47450. }
  47451. }
  47452. return result;
  47453. }
  47454. /**
  47455. * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
  47456. * letters to basic Latin letters.
  47457. *
  47458. * @private
  47459. * @param {string} letter The matched letter to deburr.
  47460. * @returns {string} Returns the deburred letter.
  47461. */
  47462. var deburrLetter = basePropertyOf(deburredLetters);
  47463. /**
  47464. * Used by `_.escape` to convert characters to HTML entities.
  47465. *
  47466. * @private
  47467. * @param {string} chr The matched character to escape.
  47468. * @returns {string} Returns the escaped character.
  47469. */
  47470. var escapeHtmlChar = basePropertyOf(htmlEscapes);
  47471. /**
  47472. * Used by `_.template` to escape characters for inclusion in compiled string literals.
  47473. *
  47474. * @private
  47475. * @param {string} chr The matched character to escape.
  47476. * @returns {string} Returns the escaped character.
  47477. */
  47478. function escapeStringChar(chr) {
  47479. return '\\' + stringEscapes[chr];
  47480. }
  47481. /**
  47482. * Gets the value at `key` of `object`.
  47483. *
  47484. * @private
  47485. * @param {Object} [object] The object to query.
  47486. * @param {string} key The key of the property to get.
  47487. * @returns {*} Returns the property value.
  47488. */
  47489. function getValue(object, key) {
  47490. return object == null ? undefined : object[key];
  47491. }
  47492. /**
  47493. * Checks if `string` contains Unicode symbols.
  47494. *
  47495. * @private
  47496. * @param {string} string The string to inspect.
  47497. * @returns {boolean} Returns `true` if a symbol is found, else `false`.
  47498. */
  47499. function hasUnicode(string) {
  47500. return reHasUnicode.test(string);
  47501. }
  47502. /**
  47503. * Checks if `string` contains a word composed of Unicode symbols.
  47504. *
  47505. * @private
  47506. * @param {string} string The string to inspect.
  47507. * @returns {boolean} Returns `true` if a word is found, else `false`.
  47508. */
  47509. function hasUnicodeWord(string) {
  47510. return reHasUnicodeWord.test(string);
  47511. }
  47512. /**
  47513. * Converts `iterator` to an array.
  47514. *
  47515. * @private
  47516. * @param {Object} iterator The iterator to convert.
  47517. * @returns {Array} Returns the converted array.
  47518. */
  47519. function iteratorToArray(iterator) {
  47520. var data,
  47521. result = [];
  47522. while (!(data = iterator.next()).done) {
  47523. result.push(data.value);
  47524. }
  47525. return result;
  47526. }
  47527. /**
  47528. * Converts `map` to its key-value pairs.
  47529. *
  47530. * @private
  47531. * @param {Object} map The map to convert.
  47532. * @returns {Array} Returns the key-value pairs.
  47533. */
  47534. function mapToArray(map) {
  47535. var index = -1,
  47536. result = Array(map.size);
  47537. map.forEach(function(value, key) {
  47538. result[++index] = [key, value];
  47539. });
  47540. return result;
  47541. }
  47542. /**
  47543. * Creates a unary function that invokes `func` with its argument transformed.
  47544. *
  47545. * @private
  47546. * @param {Function} func The function to wrap.
  47547. * @param {Function} transform The argument transform.
  47548. * @returns {Function} Returns the new function.
  47549. */
  47550. function overArg(func, transform) {
  47551. return function(arg) {
  47552. return func(transform(arg));
  47553. };
  47554. }
  47555. /**
  47556. * Replaces all `placeholder` elements in `array` with an internal placeholder
  47557. * and returns an array of their indexes.
  47558. *
  47559. * @private
  47560. * @param {Array} array The array to modify.
  47561. * @param {*} placeholder The placeholder to replace.
  47562. * @returns {Array} Returns the new array of placeholder indexes.
  47563. */
  47564. function replaceHolders(array, placeholder) {
  47565. var index = -1,
  47566. length = array.length,
  47567. resIndex = 0,
  47568. result = [];
  47569. while (++index < length) {
  47570. var value = array[index];
  47571. if (value === placeholder || value === PLACEHOLDER) {
  47572. array[index] = PLACEHOLDER;
  47573. result[resIndex++] = index;
  47574. }
  47575. }
  47576. return result;
  47577. }
  47578. /**
  47579. * Converts `set` to an array of its values.
  47580. *
  47581. * @private
  47582. * @param {Object} set The set to convert.
  47583. * @returns {Array} Returns the values.
  47584. */
  47585. function setToArray(set) {
  47586. var index = -1,
  47587. result = Array(set.size);
  47588. set.forEach(function(value) {
  47589. result[++index] = value;
  47590. });
  47591. return result;
  47592. }
  47593. /**
  47594. * Converts `set` to its value-value pairs.
  47595. *
  47596. * @private
  47597. * @param {Object} set The set to convert.
  47598. * @returns {Array} Returns the value-value pairs.
  47599. */
  47600. function setToPairs(set) {
  47601. var index = -1,
  47602. result = Array(set.size);
  47603. set.forEach(function(value) {
  47604. result[++index] = [value, value];
  47605. });
  47606. return result;
  47607. }
  47608. /**
  47609. * A specialized version of `_.indexOf` which performs strict equality
  47610. * comparisons of values, i.e. `===`.
  47611. *
  47612. * @private
  47613. * @param {Array} array The array to inspect.
  47614. * @param {*} value The value to search for.
  47615. * @param {number} fromIndex The index to search from.
  47616. * @returns {number} Returns the index of the matched value, else `-1`.
  47617. */
  47618. function strictIndexOf(array, value, fromIndex) {
  47619. var index = fromIndex - 1,
  47620. length = array.length;
  47621. while (++index < length) {
  47622. if (array[index] === value) {
  47623. return index;
  47624. }
  47625. }
  47626. return -1;
  47627. }
  47628. /**
  47629. * A specialized version of `_.lastIndexOf` which performs strict equality
  47630. * comparisons of values, i.e. `===`.
  47631. *
  47632. * @private
  47633. * @param {Array} array The array to inspect.
  47634. * @param {*} value The value to search for.
  47635. * @param {number} fromIndex The index to search from.
  47636. * @returns {number} Returns the index of the matched value, else `-1`.
  47637. */
  47638. function strictLastIndexOf(array, value, fromIndex) {
  47639. var index = fromIndex + 1;
  47640. while (index--) {
  47641. if (array[index] === value) {
  47642. return index;
  47643. }
  47644. }
  47645. return index;
  47646. }
  47647. /**
  47648. * Gets the number of symbols in `string`.
  47649. *
  47650. * @private
  47651. * @param {string} string The string to inspect.
  47652. * @returns {number} Returns the string size.
  47653. */
  47654. function stringSize(string) {
  47655. return hasUnicode(string)
  47656. ? unicodeSize(string)
  47657. : asciiSize(string);
  47658. }
  47659. /**
  47660. * Converts `string` to an array.
  47661. *
  47662. * @private
  47663. * @param {string} string The string to convert.
  47664. * @returns {Array} Returns the converted array.
  47665. */
  47666. function stringToArray(string) {
  47667. return hasUnicode(string)
  47668. ? unicodeToArray(string)
  47669. : asciiToArray(string);
  47670. }
  47671. /**
  47672. * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
  47673. * character of `string`.
  47674. *
  47675. * @private
  47676. * @param {string} string The string to inspect.
  47677. * @returns {number} Returns the index of the last non-whitespace character.
  47678. */
  47679. function trimmedEndIndex(string) {
  47680. var index = string.length;
  47681. while (index-- && reWhitespace.test(string.charAt(index))) {}
  47682. return index;
  47683. }
  47684. /**
  47685. * Used by `_.unescape` to convert HTML entities to characters.
  47686. *
  47687. * @private
  47688. * @param {string} chr The matched character to unescape.
  47689. * @returns {string} Returns the unescaped character.
  47690. */
  47691. var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
  47692. /**
  47693. * Gets the size of a Unicode `string`.
  47694. *
  47695. * @private
  47696. * @param {string} string The string inspect.
  47697. * @returns {number} Returns the string size.
  47698. */
  47699. function unicodeSize(string) {
  47700. var result = reUnicode.lastIndex = 0;
  47701. while (reUnicode.test(string)) {
  47702. ++result;
  47703. }
  47704. return result;
  47705. }
  47706. /**
  47707. * Converts a Unicode `string` to an array.
  47708. *
  47709. * @private
  47710. * @param {string} string The string to convert.
  47711. * @returns {Array} Returns the converted array.
  47712. */
  47713. function unicodeToArray(string) {
  47714. return string.match(reUnicode) || [];
  47715. }
  47716. /**
  47717. * Splits a Unicode `string` into an array of its words.
  47718. *
  47719. * @private
  47720. * @param {string} The string to inspect.
  47721. * @returns {Array} Returns the words of `string`.
  47722. */
  47723. function unicodeWords(string) {
  47724. return string.match(reUnicodeWord) || [];
  47725. }
  47726. /*--------------------------------------------------------------------------*/
  47727. /**
  47728. * Create a new pristine `lodash` function using the `context` object.
  47729. *
  47730. * @static
  47731. * @memberOf _
  47732. * @since 1.1.0
  47733. * @category Util
  47734. * @param {Object} [context=root] The context object.
  47735. * @returns {Function} Returns a new `lodash` function.
  47736. * @example
  47737. *
  47738. * _.mixin({ 'foo': _.constant('foo') });
  47739. *
  47740. * var lodash = _.runInContext();
  47741. * lodash.mixin({ 'bar': lodash.constant('bar') });
  47742. *
  47743. * _.isFunction(_.foo);
  47744. * // => true
  47745. * _.isFunction(_.bar);
  47746. * // => false
  47747. *
  47748. * lodash.isFunction(lodash.foo);
  47749. * // => false
  47750. * lodash.isFunction(lodash.bar);
  47751. * // => true
  47752. *
  47753. * // Create a suped-up `defer` in Node.js.
  47754. * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
  47755. */
  47756. var runInContext = (function runInContext(context) {
  47757. context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
  47758. /** Built-in constructor references. */
  47759. var Array = context.Array,
  47760. Date = context.Date,
  47761. Error = context.Error,
  47762. Function = context.Function,
  47763. Math = context.Math,
  47764. Object = context.Object,
  47765. RegExp = context.RegExp,
  47766. String = context.String,
  47767. TypeError = context.TypeError;
  47768. /** Used for built-in method references. */
  47769. var arrayProto = Array.prototype,
  47770. funcProto = Function.prototype,
  47771. objectProto = Object.prototype;
  47772. /** Used to detect overreaching core-js shims. */
  47773. var coreJsData = context['__core-js_shared__'];
  47774. /** Used to resolve the decompiled source of functions. */
  47775. var funcToString = funcProto.toString;
  47776. /** Used to check objects for own properties. */
  47777. var hasOwnProperty = objectProto.hasOwnProperty;
  47778. /** Used to generate unique IDs. */
  47779. var idCounter = 0;
  47780. /** Used to detect methods masquerading as native. */
  47781. var maskSrcKey = (function() {
  47782. var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
  47783. return uid ? ('Symbol(src)_1.' + uid) : '';
  47784. }());
  47785. /**
  47786. * Used to resolve the
  47787. * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  47788. * of values.
  47789. */
  47790. var nativeObjectToString = objectProto.toString;
  47791. /** Used to infer the `Object` constructor. */
  47792. var objectCtorString = funcToString.call(Object);
  47793. /** Used to restore the original `_` reference in `_.noConflict`. */
  47794. var oldDash = root._;
  47795. /** Used to detect if a method is native. */
  47796. var reIsNative = RegExp('^' +
  47797. funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
  47798. .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
  47799. );
  47800. /** Built-in value references. */
  47801. var Buffer = moduleExports ? context.Buffer : undefined,
  47802. Symbol = context.Symbol,
  47803. Uint8Array = context.Uint8Array,
  47804. allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
  47805. getPrototype = overArg(Object.getPrototypeOf, Object),
  47806. objectCreate = Object.create,
  47807. propertyIsEnumerable = objectProto.propertyIsEnumerable,
  47808. splice = arrayProto.splice,
  47809. spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
  47810. symIterator = Symbol ? Symbol.iterator : undefined,
  47811. symToStringTag = Symbol ? Symbol.toStringTag : undefined;
  47812. var defineProperty = (function() {
  47813. try {
  47814. var func = getNative(Object, 'defineProperty');
  47815. func({}, '', {});
  47816. return func;
  47817. } catch (e) {}
  47818. }());
  47819. /** Mocked built-ins. */
  47820. var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
  47821. ctxNow = Date && Date.now !== root.Date.now && Date.now,
  47822. ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
  47823. /* Built-in method references for those with the same name as other `lodash` methods. */
  47824. var nativeCeil = Math.ceil,
  47825. nativeFloor = Math.floor,
  47826. nativeGetSymbols = Object.getOwnPropertySymbols,
  47827. nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
  47828. nativeIsFinite = context.isFinite,
  47829. nativeJoin = arrayProto.join,
  47830. nativeKeys = overArg(Object.keys, Object),
  47831. nativeMax = Math.max,
  47832. nativeMin = Math.min,
  47833. nativeNow = Date.now,
  47834. nativeParseInt = context.parseInt,
  47835. nativeRandom = Math.random,
  47836. nativeReverse = arrayProto.reverse;
  47837. /* Built-in method references that are verified to be native. */
  47838. var DataView = getNative(context, 'DataView'),
  47839. Map = getNative(context, 'Map'),
  47840. Promise = getNative(context, 'Promise'),
  47841. Set = getNative(context, 'Set'),
  47842. WeakMap = getNative(context, 'WeakMap'),
  47843. nativeCreate = getNative(Object, 'create');
  47844. /** Used to store function metadata. */
  47845. var metaMap = WeakMap && new WeakMap;
  47846. /** Used to lookup unminified function names. */
  47847. var realNames = {};
  47848. /** Used to detect maps, sets, and weakmaps. */
  47849. var dataViewCtorString = toSource(DataView),
  47850. mapCtorString = toSource(Map),
  47851. promiseCtorString = toSource(Promise),
  47852. setCtorString = toSource(Set),
  47853. weakMapCtorString = toSource(WeakMap);
  47854. /** Used to convert symbols to primitives and strings. */
  47855. var symbolProto = Symbol ? Symbol.prototype : undefined,
  47856. symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
  47857. symbolToString = symbolProto ? symbolProto.toString : undefined;
  47858. /*------------------------------------------------------------------------*/
  47859. /**
  47860. * Creates a `lodash` object which wraps `value` to enable implicit method
  47861. * chain sequences. Methods that operate on and return arrays, collections,
  47862. * and functions can be chained together. Methods that retrieve a single value
  47863. * or may return a primitive value will automatically end the chain sequence
  47864. * and return the unwrapped value. Otherwise, the value must be unwrapped
  47865. * with `_#value`.
  47866. *
  47867. * Explicit chain sequences, which must be unwrapped with `_#value`, may be
  47868. * enabled using `_.chain`.
  47869. *
  47870. * The execution of chained methods is lazy, that is, it's deferred until
  47871. * `_#value` is implicitly or explicitly called.
  47872. *
  47873. * Lazy evaluation allows several methods to support shortcut fusion.
  47874. * Shortcut fusion is an optimization to merge iteratee calls; this avoids
  47875. * the creation of intermediate arrays and can greatly reduce the number of
  47876. * iteratee executions. Sections of a chain sequence qualify for shortcut
  47877. * fusion if the section is applied to an array and iteratees accept only
  47878. * one argument. The heuristic for whether a section qualifies for shortcut
  47879. * fusion is subject to change.
  47880. *
  47881. * Chaining is supported in custom builds as long as the `_#value` method is
  47882. * directly or indirectly included in the build.
  47883. *
  47884. * In addition to lodash methods, wrappers have `Array` and `String` methods.
  47885. *
  47886. * The wrapper `Array` methods are:
  47887. * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
  47888. *
  47889. * The wrapper `String` methods are:
  47890. * `replace` and `split`
  47891. *
  47892. * The wrapper methods that support shortcut fusion are:
  47893. * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
  47894. * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
  47895. * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
  47896. *
  47897. * The chainable wrapper methods are:
  47898. * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
  47899. * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
  47900. * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
  47901. * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
  47902. * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
  47903. * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
  47904. * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
  47905. * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
  47906. * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
  47907. * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
  47908. * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
  47909. * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
  47910. * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
  47911. * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
  47912. * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
  47913. * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
  47914. * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
  47915. * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
  47916. * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
  47917. * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
  47918. * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
  47919. * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
  47920. * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
  47921. * `zipObject`, `zipObjectDeep`, and `zipWith`
  47922. *
  47923. * The wrapper methods that are **not** chainable by default are:
  47924. * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
  47925. * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
  47926. * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
  47927. * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
  47928. * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
  47929. * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
  47930. * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
  47931. * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
  47932. * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
  47933. * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
  47934. * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
  47935. * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
  47936. * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
  47937. * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
  47938. * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
  47939. * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
  47940. * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
  47941. * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
  47942. * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
  47943. * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
  47944. * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
  47945. * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
  47946. * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
  47947. * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
  47948. * `upperFirst`, `value`, and `words`
  47949. *
  47950. * @name _
  47951. * @constructor
  47952. * @category Seq
  47953. * @param {*} value The value to wrap in a `lodash` instance.
  47954. * @returns {Object} Returns the new `lodash` wrapper instance.
  47955. * @example
  47956. *
  47957. * function square(n) {
  47958. * return n * n;
  47959. * }
  47960. *
  47961. * var wrapped = _([1, 2, 3]);
  47962. *
  47963. * // Returns an unwrapped value.
  47964. * wrapped.reduce(_.add);
  47965. * // => 6
  47966. *
  47967. * // Returns a wrapped value.
  47968. * var squares = wrapped.map(square);
  47969. *
  47970. * _.isArray(squares);
  47971. * // => false
  47972. *
  47973. * _.isArray(squares.value());
  47974. * // => true
  47975. */
  47976. function lodash(value) {
  47977. if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
  47978. if (value instanceof LodashWrapper) {
  47979. return value;
  47980. }
  47981. if (hasOwnProperty.call(value, '__wrapped__')) {
  47982. return wrapperClone(value);
  47983. }
  47984. }
  47985. return new LodashWrapper(value);
  47986. }
  47987. /**
  47988. * The base implementation of `_.create` without support for assigning
  47989. * properties to the created object.
  47990. *
  47991. * @private
  47992. * @param {Object} proto The object to inherit from.
  47993. * @returns {Object} Returns the new object.
  47994. */
  47995. var baseCreate = (function() {
  47996. function object() {}
  47997. return function(proto) {
  47998. if (!isObject(proto)) {
  47999. return {};
  48000. }
  48001. if (objectCreate) {
  48002. return objectCreate(proto);
  48003. }
  48004. object.prototype = proto;
  48005. var result = new object;
  48006. object.prototype = undefined;
  48007. return result;
  48008. };
  48009. }());
  48010. /**
  48011. * The function whose prototype chain sequence wrappers inherit from.
  48012. *
  48013. * @private
  48014. */
  48015. function baseLodash() {
  48016. // No operation performed.
  48017. }
  48018. /**
  48019. * The base constructor for creating `lodash` wrapper objects.
  48020. *
  48021. * @private
  48022. * @param {*} value The value to wrap.
  48023. * @param {boolean} [chainAll] Enable explicit method chain sequences.
  48024. */
  48025. function LodashWrapper(value, chainAll) {
  48026. this.__wrapped__ = value;
  48027. this.__actions__ = [];
  48028. this.__chain__ = !!chainAll;
  48029. this.__index__ = 0;
  48030. this.__values__ = undefined;
  48031. }
  48032. /**
  48033. * By default, the template delimiters used by lodash are like those in
  48034. * embedded Ruby (ERB) as well as ES2015 template strings. Change the
  48035. * following template settings to use alternative delimiters.
  48036. *
  48037. * @static
  48038. * @memberOf _
  48039. * @type {Object}
  48040. */
  48041. lodash.templateSettings = {
  48042. /**
  48043. * Used to detect `data` property values to be HTML-escaped.
  48044. *
  48045. * @memberOf _.templateSettings
  48046. * @type {RegExp}
  48047. */
  48048. 'escape': reEscape,
  48049. /**
  48050. * Used to detect code to be evaluated.
  48051. *
  48052. * @memberOf _.templateSettings
  48053. * @type {RegExp}
  48054. */
  48055. 'evaluate': reEvaluate,
  48056. /**
  48057. * Used to detect `data` property values to inject.
  48058. *
  48059. * @memberOf _.templateSettings
  48060. * @type {RegExp}
  48061. */
  48062. 'interpolate': reInterpolate,
  48063. /**
  48064. * Used to reference the data object in the template text.
  48065. *
  48066. * @memberOf _.templateSettings
  48067. * @type {string}
  48068. */
  48069. 'variable': '',
  48070. /**
  48071. * Used to import variables into the compiled template.
  48072. *
  48073. * @memberOf _.templateSettings
  48074. * @type {Object}
  48075. */
  48076. 'imports': {
  48077. /**
  48078. * A reference to the `lodash` function.
  48079. *
  48080. * @memberOf _.templateSettings.imports
  48081. * @type {Function}
  48082. */
  48083. '_': lodash
  48084. }
  48085. };
  48086. // Ensure wrappers are instances of `baseLodash`.
  48087. lodash.prototype = baseLodash.prototype;
  48088. lodash.prototype.constructor = lodash;
  48089. LodashWrapper.prototype = baseCreate(baseLodash.prototype);
  48090. LodashWrapper.prototype.constructor = LodashWrapper;
  48091. /*------------------------------------------------------------------------*/
  48092. /**
  48093. * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
  48094. *
  48095. * @private
  48096. * @constructor
  48097. * @param {*} value The value to wrap.
  48098. */
  48099. function LazyWrapper(value) {
  48100. this.__wrapped__ = value;
  48101. this.__actions__ = [];
  48102. this.__dir__ = 1;
  48103. this.__filtered__ = false;
  48104. this.__iteratees__ = [];
  48105. this.__takeCount__ = MAX_ARRAY_LENGTH;
  48106. this.__views__ = [];
  48107. }
  48108. /**
  48109. * Creates a clone of the lazy wrapper object.
  48110. *
  48111. * @private
  48112. * @name clone
  48113. * @memberOf LazyWrapper
  48114. * @returns {Object} Returns the cloned `LazyWrapper` object.
  48115. */
  48116. function lazyClone() {
  48117. var result = new LazyWrapper(this.__wrapped__);
  48118. result.__actions__ = copyArray(this.__actions__);
  48119. result.__dir__ = this.__dir__;
  48120. result.__filtered__ = this.__filtered__;
  48121. result.__iteratees__ = copyArray(this.__iteratees__);
  48122. result.__takeCount__ = this.__takeCount__;
  48123. result.__views__ = copyArray(this.__views__);
  48124. return result;
  48125. }
  48126. /**
  48127. * Reverses the direction of lazy iteration.
  48128. *
  48129. * @private
  48130. * @name reverse
  48131. * @memberOf LazyWrapper
  48132. * @returns {Object} Returns the new reversed `LazyWrapper` object.
  48133. */
  48134. function lazyReverse() {
  48135. if (this.__filtered__) {
  48136. var result = new LazyWrapper(this);
  48137. result.__dir__ = -1;
  48138. result.__filtered__ = true;
  48139. } else {
  48140. result = this.clone();
  48141. result.__dir__ *= -1;
  48142. }
  48143. return result;
  48144. }
  48145. /**
  48146. * Extracts the unwrapped value from its lazy wrapper.
  48147. *
  48148. * @private
  48149. * @name value
  48150. * @memberOf LazyWrapper
  48151. * @returns {*} Returns the unwrapped value.
  48152. */
  48153. function lazyValue() {
  48154. var array = this.__wrapped__.value(),
  48155. dir = this.__dir__,
  48156. isArr = isArray(array),
  48157. isRight = dir < 0,
  48158. arrLength = isArr ? array.length : 0,
  48159. view = getView(0, arrLength, this.__views__),
  48160. start = view.start,
  48161. end = view.end,
  48162. length = end - start,
  48163. index = isRight ? end : (start - 1),
  48164. iteratees = this.__iteratees__,
  48165. iterLength = iteratees.length,
  48166. resIndex = 0,
  48167. takeCount = nativeMin(length, this.__takeCount__);
  48168. if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
  48169. return baseWrapperValue(array, this.__actions__);
  48170. }
  48171. var result = [];
  48172. outer:
  48173. while (length-- && resIndex < takeCount) {
  48174. index += dir;
  48175. var iterIndex = -1,
  48176. value = array[index];
  48177. while (++iterIndex < iterLength) {
  48178. var data = iteratees[iterIndex],
  48179. iteratee = data.iteratee,
  48180. type = data.type,
  48181. computed = iteratee(value);
  48182. if (type == LAZY_MAP_FLAG) {
  48183. value = computed;
  48184. } else if (!computed) {
  48185. if (type == LAZY_FILTER_FLAG) {
  48186. continue outer;
  48187. } else {
  48188. break outer;
  48189. }
  48190. }
  48191. }
  48192. result[resIndex++] = value;
  48193. }
  48194. return result;
  48195. }
  48196. // Ensure `LazyWrapper` is an instance of `baseLodash`.
  48197. LazyWrapper.prototype = baseCreate(baseLodash.prototype);
  48198. LazyWrapper.prototype.constructor = LazyWrapper;
  48199. /*------------------------------------------------------------------------*/
  48200. /**
  48201. * Creates a hash object.
  48202. *
  48203. * @private
  48204. * @constructor
  48205. * @param {Array} [entries] The key-value pairs to cache.
  48206. */
  48207. function Hash(entries) {
  48208. var index = -1,
  48209. length = entries == null ? 0 : entries.length;
  48210. this.clear();
  48211. while (++index < length) {
  48212. var entry = entries[index];
  48213. this.set(entry[0], entry[1]);
  48214. }
  48215. }
  48216. /**
  48217. * Removes all key-value entries from the hash.
  48218. *
  48219. * @private
  48220. * @name clear
  48221. * @memberOf Hash
  48222. */
  48223. function hashClear() {
  48224. this.__data__ = nativeCreate ? nativeCreate(null) : {};
  48225. this.size = 0;
  48226. }
  48227. /**
  48228. * Removes `key` and its value from the hash.
  48229. *
  48230. * @private
  48231. * @name delete
  48232. * @memberOf Hash
  48233. * @param {Object} hash The hash to modify.
  48234. * @param {string} key The key of the value to remove.
  48235. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  48236. */
  48237. function hashDelete(key) {
  48238. var result = this.has(key) && delete this.__data__[key];
  48239. this.size -= result ? 1 : 0;
  48240. return result;
  48241. }
  48242. /**
  48243. * Gets the hash value for `key`.
  48244. *
  48245. * @private
  48246. * @name get
  48247. * @memberOf Hash
  48248. * @param {string} key The key of the value to get.
  48249. * @returns {*} Returns the entry value.
  48250. */
  48251. function hashGet(key) {
  48252. var data = this.__data__;
  48253. if (nativeCreate) {
  48254. var result = data[key];
  48255. return result === HASH_UNDEFINED ? undefined : result;
  48256. }
  48257. return hasOwnProperty.call(data, key) ? data[key] : undefined;
  48258. }
  48259. /**
  48260. * Checks if a hash value for `key` exists.
  48261. *
  48262. * @private
  48263. * @name has
  48264. * @memberOf Hash
  48265. * @param {string} key The key of the entry to check.
  48266. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  48267. */
  48268. function hashHas(key) {
  48269. var data = this.__data__;
  48270. return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
  48271. }
  48272. /**
  48273. * Sets the hash `key` to `value`.
  48274. *
  48275. * @private
  48276. * @name set
  48277. * @memberOf Hash
  48278. * @param {string} key The key of the value to set.
  48279. * @param {*} value The value to set.
  48280. * @returns {Object} Returns the hash instance.
  48281. */
  48282. function hashSet(key, value) {
  48283. var data = this.__data__;
  48284. this.size += this.has(key) ? 0 : 1;
  48285. data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
  48286. return this;
  48287. }
  48288. // Add methods to `Hash`.
  48289. Hash.prototype.clear = hashClear;
  48290. Hash.prototype['delete'] = hashDelete;
  48291. Hash.prototype.get = hashGet;
  48292. Hash.prototype.has = hashHas;
  48293. Hash.prototype.set = hashSet;
  48294. /*------------------------------------------------------------------------*/
  48295. /**
  48296. * Creates an list cache object.
  48297. *
  48298. * @private
  48299. * @constructor
  48300. * @param {Array} [entries] The key-value pairs to cache.
  48301. */
  48302. function ListCache(entries) {
  48303. var index = -1,
  48304. length = entries == null ? 0 : entries.length;
  48305. this.clear();
  48306. while (++index < length) {
  48307. var entry = entries[index];
  48308. this.set(entry[0], entry[1]);
  48309. }
  48310. }
  48311. /**
  48312. * Removes all key-value entries from the list cache.
  48313. *
  48314. * @private
  48315. * @name clear
  48316. * @memberOf ListCache
  48317. */
  48318. function listCacheClear() {
  48319. this.__data__ = [];
  48320. this.size = 0;
  48321. }
  48322. /**
  48323. * Removes `key` and its value from the list cache.
  48324. *
  48325. * @private
  48326. * @name delete
  48327. * @memberOf ListCache
  48328. * @param {string} key The key of the value to remove.
  48329. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  48330. */
  48331. function listCacheDelete(key) {
  48332. var data = this.__data__,
  48333. index = assocIndexOf(data, key);
  48334. if (index < 0) {
  48335. return false;
  48336. }
  48337. var lastIndex = data.length - 1;
  48338. if (index == lastIndex) {
  48339. data.pop();
  48340. } else {
  48341. splice.call(data, index, 1);
  48342. }
  48343. --this.size;
  48344. return true;
  48345. }
  48346. /**
  48347. * Gets the list cache value for `key`.
  48348. *
  48349. * @private
  48350. * @name get
  48351. * @memberOf ListCache
  48352. * @param {string} key The key of the value to get.
  48353. * @returns {*} Returns the entry value.
  48354. */
  48355. function listCacheGet(key) {
  48356. var data = this.__data__,
  48357. index = assocIndexOf(data, key);
  48358. return index < 0 ? undefined : data[index][1];
  48359. }
  48360. /**
  48361. * Checks if a list cache value for `key` exists.
  48362. *
  48363. * @private
  48364. * @name has
  48365. * @memberOf ListCache
  48366. * @param {string} key The key of the entry to check.
  48367. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  48368. */
  48369. function listCacheHas(key) {
  48370. return assocIndexOf(this.__data__, key) > -1;
  48371. }
  48372. /**
  48373. * Sets the list cache `key` to `value`.
  48374. *
  48375. * @private
  48376. * @name set
  48377. * @memberOf ListCache
  48378. * @param {string} key The key of the value to set.
  48379. * @param {*} value The value to set.
  48380. * @returns {Object} Returns the list cache instance.
  48381. */
  48382. function listCacheSet(key, value) {
  48383. var data = this.__data__,
  48384. index = assocIndexOf(data, key);
  48385. if (index < 0) {
  48386. ++this.size;
  48387. data.push([key, value]);
  48388. } else {
  48389. data[index][1] = value;
  48390. }
  48391. return this;
  48392. }
  48393. // Add methods to `ListCache`.
  48394. ListCache.prototype.clear = listCacheClear;
  48395. ListCache.prototype['delete'] = listCacheDelete;
  48396. ListCache.prototype.get = listCacheGet;
  48397. ListCache.prototype.has = listCacheHas;
  48398. ListCache.prototype.set = listCacheSet;
  48399. /*------------------------------------------------------------------------*/
  48400. /**
  48401. * Creates a map cache object to store key-value pairs.
  48402. *
  48403. * @private
  48404. * @constructor
  48405. * @param {Array} [entries] The key-value pairs to cache.
  48406. */
  48407. function MapCache(entries) {
  48408. var index = -1,
  48409. length = entries == null ? 0 : entries.length;
  48410. this.clear();
  48411. while (++index < length) {
  48412. var entry = entries[index];
  48413. this.set(entry[0], entry[1]);
  48414. }
  48415. }
  48416. /**
  48417. * Removes all key-value entries from the map.
  48418. *
  48419. * @private
  48420. * @name clear
  48421. * @memberOf MapCache
  48422. */
  48423. function mapCacheClear() {
  48424. this.size = 0;
  48425. this.__data__ = {
  48426. 'hash': new Hash,
  48427. 'map': new (Map || ListCache),
  48428. 'string': new Hash
  48429. };
  48430. }
  48431. /**
  48432. * Removes `key` and its value from the map.
  48433. *
  48434. * @private
  48435. * @name delete
  48436. * @memberOf MapCache
  48437. * @param {string} key The key of the value to remove.
  48438. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  48439. */
  48440. function mapCacheDelete(key) {
  48441. var result = getMapData(this, key)['delete'](key);
  48442. this.size -= result ? 1 : 0;
  48443. return result;
  48444. }
  48445. /**
  48446. * Gets the map value for `key`.
  48447. *
  48448. * @private
  48449. * @name get
  48450. * @memberOf MapCache
  48451. * @param {string} key The key of the value to get.
  48452. * @returns {*} Returns the entry value.
  48453. */
  48454. function mapCacheGet(key) {
  48455. return getMapData(this, key).get(key);
  48456. }
  48457. /**
  48458. * Checks if a map value for `key` exists.
  48459. *
  48460. * @private
  48461. * @name has
  48462. * @memberOf MapCache
  48463. * @param {string} key The key of the entry to check.
  48464. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  48465. */
  48466. function mapCacheHas(key) {
  48467. return getMapData(this, key).has(key);
  48468. }
  48469. /**
  48470. * Sets the map `key` to `value`.
  48471. *
  48472. * @private
  48473. * @name set
  48474. * @memberOf MapCache
  48475. * @param {string} key The key of the value to set.
  48476. * @param {*} value The value to set.
  48477. * @returns {Object} Returns the map cache instance.
  48478. */
  48479. function mapCacheSet(key, value) {
  48480. var data = getMapData(this, key),
  48481. size = data.size;
  48482. data.set(key, value);
  48483. this.size += data.size == size ? 0 : 1;
  48484. return this;
  48485. }
  48486. // Add methods to `MapCache`.
  48487. MapCache.prototype.clear = mapCacheClear;
  48488. MapCache.prototype['delete'] = mapCacheDelete;
  48489. MapCache.prototype.get = mapCacheGet;
  48490. MapCache.prototype.has = mapCacheHas;
  48491. MapCache.prototype.set = mapCacheSet;
  48492. /*------------------------------------------------------------------------*/
  48493. /**
  48494. *
  48495. * Creates an array cache object to store unique values.
  48496. *
  48497. * @private
  48498. * @constructor
  48499. * @param {Array} [values] The values to cache.
  48500. */
  48501. function SetCache(values) {
  48502. var index = -1,
  48503. length = values == null ? 0 : values.length;
  48504. this.__data__ = new MapCache;
  48505. while (++index < length) {
  48506. this.add(values[index]);
  48507. }
  48508. }
  48509. /**
  48510. * Adds `value` to the array cache.
  48511. *
  48512. * @private
  48513. * @name add
  48514. * @memberOf SetCache
  48515. * @alias push
  48516. * @param {*} value The value to cache.
  48517. * @returns {Object} Returns the cache instance.
  48518. */
  48519. function setCacheAdd(value) {
  48520. this.__data__.set(value, HASH_UNDEFINED);
  48521. return this;
  48522. }
  48523. /**
  48524. * Checks if `value` is in the array cache.
  48525. *
  48526. * @private
  48527. * @name has
  48528. * @memberOf SetCache
  48529. * @param {*} value The value to search for.
  48530. * @returns {number} Returns `true` if `value` is found, else `false`.
  48531. */
  48532. function setCacheHas(value) {
  48533. return this.__data__.has(value);
  48534. }
  48535. // Add methods to `SetCache`.
  48536. SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
  48537. SetCache.prototype.has = setCacheHas;
  48538. /*------------------------------------------------------------------------*/
  48539. /**
  48540. * Creates a stack cache object to store key-value pairs.
  48541. *
  48542. * @private
  48543. * @constructor
  48544. * @param {Array} [entries] The key-value pairs to cache.
  48545. */
  48546. function Stack(entries) {
  48547. var data = this.__data__ = new ListCache(entries);
  48548. this.size = data.size;
  48549. }
  48550. /**
  48551. * Removes all key-value entries from the stack.
  48552. *
  48553. * @private
  48554. * @name clear
  48555. * @memberOf Stack
  48556. */
  48557. function stackClear() {
  48558. this.__data__ = new ListCache;
  48559. this.size = 0;
  48560. }
  48561. /**
  48562. * Removes `key` and its value from the stack.
  48563. *
  48564. * @private
  48565. * @name delete
  48566. * @memberOf Stack
  48567. * @param {string} key The key of the value to remove.
  48568. * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  48569. */
  48570. function stackDelete(key) {
  48571. var data = this.__data__,
  48572. result = data['delete'](key);
  48573. this.size = data.size;
  48574. return result;
  48575. }
  48576. /**
  48577. * Gets the stack value for `key`.
  48578. *
  48579. * @private
  48580. * @name get
  48581. * @memberOf Stack
  48582. * @param {string} key The key of the value to get.
  48583. * @returns {*} Returns the entry value.
  48584. */
  48585. function stackGet(key) {
  48586. return this.__data__.get(key);
  48587. }
  48588. /**
  48589. * Checks if a stack value for `key` exists.
  48590. *
  48591. * @private
  48592. * @name has
  48593. * @memberOf Stack
  48594. * @param {string} key The key of the entry to check.
  48595. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  48596. */
  48597. function stackHas(key) {
  48598. return this.__data__.has(key);
  48599. }
  48600. /**
  48601. * Sets the stack `key` to `value`.
  48602. *
  48603. * @private
  48604. * @name set
  48605. * @memberOf Stack
  48606. * @param {string} key The key of the value to set.
  48607. * @param {*} value The value to set.
  48608. * @returns {Object} Returns the stack cache instance.
  48609. */
  48610. function stackSet(key, value) {
  48611. var data = this.__data__;
  48612. if (data instanceof ListCache) {
  48613. var pairs = data.__data__;
  48614. if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
  48615. pairs.push([key, value]);
  48616. this.size = ++data.size;
  48617. return this;
  48618. }
  48619. data = this.__data__ = new MapCache(pairs);
  48620. }
  48621. data.set(key, value);
  48622. this.size = data.size;
  48623. return this;
  48624. }
  48625. // Add methods to `Stack`.
  48626. Stack.prototype.clear = stackClear;
  48627. Stack.prototype['delete'] = stackDelete;
  48628. Stack.prototype.get = stackGet;
  48629. Stack.prototype.has = stackHas;
  48630. Stack.prototype.set = stackSet;
  48631. /*------------------------------------------------------------------------*/
  48632. /**
  48633. * Creates an array of the enumerable property names of the array-like `value`.
  48634. *
  48635. * @private
  48636. * @param {*} value The value to query.
  48637. * @param {boolean} inherited Specify returning inherited property names.
  48638. * @returns {Array} Returns the array of property names.
  48639. */
  48640. function arrayLikeKeys(value, inherited) {
  48641. var isArr = isArray(value),
  48642. isArg = !isArr && isArguments(value),
  48643. isBuff = !isArr && !isArg && isBuffer(value),
  48644. isType = !isArr && !isArg && !isBuff && isTypedArray(value),
  48645. skipIndexes = isArr || isArg || isBuff || isType,
  48646. result = skipIndexes ? baseTimes(value.length, String) : [],
  48647. length = result.length;
  48648. for (var key in value) {
  48649. if ((inherited || hasOwnProperty.call(value, key)) &&
  48650. !(skipIndexes && (
  48651. // Safari 9 has enumerable `arguments.length` in strict mode.
  48652. key == 'length' ||
  48653. // Node.js 0.10 has enumerable non-index properties on buffers.
  48654. (isBuff && (key == 'offset' || key == 'parent')) ||
  48655. // PhantomJS 2 has enumerable non-index properties on typed arrays.
  48656. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
  48657. // Skip index properties.
  48658. isIndex(key, length)
  48659. ))) {
  48660. result.push(key);
  48661. }
  48662. }
  48663. return result;
  48664. }
  48665. /**
  48666. * A specialized version of `_.sample` for arrays.
  48667. *
  48668. * @private
  48669. * @param {Array} array The array to sample.
  48670. * @returns {*} Returns the random element.
  48671. */
  48672. function arraySample(array) {
  48673. var length = array.length;
  48674. return length ? array[baseRandom(0, length - 1)] : undefined;
  48675. }
  48676. /**
  48677. * A specialized version of `_.sampleSize` for arrays.
  48678. *
  48679. * @private
  48680. * @param {Array} array The array to sample.
  48681. * @param {number} n The number of elements to sample.
  48682. * @returns {Array} Returns the random elements.
  48683. */
  48684. function arraySampleSize(array, n) {
  48685. return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
  48686. }
  48687. /**
  48688. * A specialized version of `_.shuffle` for arrays.
  48689. *
  48690. * @private
  48691. * @param {Array} array The array to shuffle.
  48692. * @returns {Array} Returns the new shuffled array.
  48693. */
  48694. function arrayShuffle(array) {
  48695. return shuffleSelf(copyArray(array));
  48696. }
  48697. /**
  48698. * This function is like `assignValue` except that it doesn't assign
  48699. * `undefined` values.
  48700. *
  48701. * @private
  48702. * @param {Object} object The object to modify.
  48703. * @param {string} key The key of the property to assign.
  48704. * @param {*} value The value to assign.
  48705. */
  48706. function assignMergeValue(object, key, value) {
  48707. if ((value !== undefined && !eq(object[key], value)) ||
  48708. (value === undefined && !(key in object))) {
  48709. baseAssignValue(object, key, value);
  48710. }
  48711. }
  48712. /**
  48713. * Assigns `value` to `key` of `object` if the existing value is not equivalent
  48714. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  48715. * for equality comparisons.
  48716. *
  48717. * @private
  48718. * @param {Object} object The object to modify.
  48719. * @param {string} key The key of the property to assign.
  48720. * @param {*} value The value to assign.
  48721. */
  48722. function assignValue(object, key, value) {
  48723. var objValue = object[key];
  48724. if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
  48725. (value === undefined && !(key in object))) {
  48726. baseAssignValue(object, key, value);
  48727. }
  48728. }
  48729. /**
  48730. * Gets the index at which the `key` is found in `array` of key-value pairs.
  48731. *
  48732. * @private
  48733. * @param {Array} array The array to inspect.
  48734. * @param {*} key The key to search for.
  48735. * @returns {number} Returns the index of the matched value, else `-1`.
  48736. */
  48737. function assocIndexOf(array, key) {
  48738. var length = array.length;
  48739. while (length--) {
  48740. if (eq(array[length][0], key)) {
  48741. return length;
  48742. }
  48743. }
  48744. return -1;
  48745. }
  48746. /**
  48747. * Aggregates elements of `collection` on `accumulator` with keys transformed
  48748. * by `iteratee` and values set by `setter`.
  48749. *
  48750. * @private
  48751. * @param {Array|Object} collection The collection to iterate over.
  48752. * @param {Function} setter The function to set `accumulator` values.
  48753. * @param {Function} iteratee The iteratee to transform keys.
  48754. * @param {Object} accumulator The initial aggregated object.
  48755. * @returns {Function} Returns `accumulator`.
  48756. */
  48757. function baseAggregator(collection, setter, iteratee, accumulator) {
  48758. baseEach(collection, function(value, key, collection) {
  48759. setter(accumulator, value, iteratee(value), collection);
  48760. });
  48761. return accumulator;
  48762. }
  48763. /**
  48764. * The base implementation of `_.assign` without support for multiple sources
  48765. * or `customizer` functions.
  48766. *
  48767. * @private
  48768. * @param {Object} object The destination object.
  48769. * @param {Object} source The source object.
  48770. * @returns {Object} Returns `object`.
  48771. */
  48772. function baseAssign(object, source) {
  48773. return object && copyObject(source, keys(source), object);
  48774. }
  48775. /**
  48776. * The base implementation of `_.assignIn` without support for multiple sources
  48777. * or `customizer` functions.
  48778. *
  48779. * @private
  48780. * @param {Object} object The destination object.
  48781. * @param {Object} source The source object.
  48782. * @returns {Object} Returns `object`.
  48783. */
  48784. function baseAssignIn(object, source) {
  48785. return object && copyObject(source, keysIn(source), object);
  48786. }
  48787. /**
  48788. * The base implementation of `assignValue` and `assignMergeValue` without
  48789. * value checks.
  48790. *
  48791. * @private
  48792. * @param {Object} object The object to modify.
  48793. * @param {string} key The key of the property to assign.
  48794. * @param {*} value The value to assign.
  48795. */
  48796. function baseAssignValue(object, key, value) {
  48797. if (key == '__proto__' && defineProperty) {
  48798. defineProperty(object, key, {
  48799. 'configurable': true,
  48800. 'enumerable': true,
  48801. 'value': value,
  48802. 'writable': true
  48803. });
  48804. } else {
  48805. object[key] = value;
  48806. }
  48807. }
  48808. /**
  48809. * The base implementation of `_.at` without support for individual paths.
  48810. *
  48811. * @private
  48812. * @param {Object} object The object to iterate over.
  48813. * @param {string[]} paths The property paths to pick.
  48814. * @returns {Array} Returns the picked elements.
  48815. */
  48816. function baseAt(object, paths) {
  48817. var index = -1,
  48818. length = paths.length,
  48819. result = Array(length),
  48820. skip = object == null;
  48821. while (++index < length) {
  48822. result[index] = skip ? undefined : get(object, paths[index]);
  48823. }
  48824. return result;
  48825. }
  48826. /**
  48827. * The base implementation of `_.clamp` which doesn't coerce arguments.
  48828. *
  48829. * @private
  48830. * @param {number} number The number to clamp.
  48831. * @param {number} [lower] The lower bound.
  48832. * @param {number} upper The upper bound.
  48833. * @returns {number} Returns the clamped number.
  48834. */
  48835. function baseClamp(number, lower, upper) {
  48836. if (number === number) {
  48837. if (upper !== undefined) {
  48838. number = number <= upper ? number : upper;
  48839. }
  48840. if (lower !== undefined) {
  48841. number = number >= lower ? number : lower;
  48842. }
  48843. }
  48844. return number;
  48845. }
  48846. /**
  48847. * The base implementation of `_.clone` and `_.cloneDeep` which tracks
  48848. * traversed objects.
  48849. *
  48850. * @private
  48851. * @param {*} value The value to clone.
  48852. * @param {boolean} bitmask The bitmask flags.
  48853. * 1 - Deep clone
  48854. * 2 - Flatten inherited properties
  48855. * 4 - Clone symbols
  48856. * @param {Function} [customizer] The function to customize cloning.
  48857. * @param {string} [key] The key of `value`.
  48858. * @param {Object} [object] The parent object of `value`.
  48859. * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
  48860. * @returns {*} Returns the cloned value.
  48861. */
  48862. function baseClone(value, bitmask, customizer, key, object, stack) {
  48863. var result,
  48864. isDeep = bitmask & CLONE_DEEP_FLAG,
  48865. isFlat = bitmask & CLONE_FLAT_FLAG,
  48866. isFull = bitmask & CLONE_SYMBOLS_FLAG;
  48867. if (customizer) {
  48868. result = object ? customizer(value, key, object, stack) : customizer(value);
  48869. }
  48870. if (result !== undefined) {
  48871. return result;
  48872. }
  48873. if (!isObject(value)) {
  48874. return value;
  48875. }
  48876. var isArr = isArray(value);
  48877. if (isArr) {
  48878. result = initCloneArray(value);
  48879. if (!isDeep) {
  48880. return copyArray(value, result);
  48881. }
  48882. } else {
  48883. var tag = getTag(value),
  48884. isFunc = tag == funcTag || tag == genTag;
  48885. if (isBuffer(value)) {
  48886. return cloneBuffer(value, isDeep);
  48887. }
  48888. if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
  48889. result = (isFlat || isFunc) ? {} : initCloneObject(value);
  48890. if (!isDeep) {
  48891. return isFlat
  48892. ? copySymbolsIn(value, baseAssignIn(result, value))
  48893. : copySymbols(value, baseAssign(result, value));
  48894. }
  48895. } else {
  48896. if (!cloneableTags[tag]) {
  48897. return object ? value : {};
  48898. }
  48899. result = initCloneByTag(value, tag, isDeep);
  48900. }
  48901. }
  48902. // Check for circular references and return its corresponding clone.
  48903. stack || (stack = new Stack);
  48904. var stacked = stack.get(value);
  48905. if (stacked) {
  48906. return stacked;
  48907. }
  48908. stack.set(value, result);
  48909. if (isSet(value)) {
  48910. value.forEach(function(subValue) {
  48911. result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
  48912. });
  48913. } else if (isMap(value)) {
  48914. value.forEach(function(subValue, key) {
  48915. result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
  48916. });
  48917. }
  48918. var keysFunc = isFull
  48919. ? (isFlat ? getAllKeysIn : getAllKeys)
  48920. : (isFlat ? keysIn : keys);
  48921. var props = isArr ? undefined : keysFunc(value);
  48922. arrayEach(props || value, function(subValue, key) {
  48923. if (props) {
  48924. key = subValue;
  48925. subValue = value[key];
  48926. }
  48927. // Recursively populate clone (susceptible to call stack limits).
  48928. assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
  48929. });
  48930. return result;
  48931. }
  48932. /**
  48933. * The base implementation of `_.conforms` which doesn't clone `source`.
  48934. *
  48935. * @private
  48936. * @param {Object} source The object of property predicates to conform to.
  48937. * @returns {Function} Returns the new spec function.
  48938. */
  48939. function baseConforms(source) {
  48940. var props = keys(source);
  48941. return function(object) {
  48942. return baseConformsTo(object, source, props);
  48943. };
  48944. }
  48945. /**
  48946. * The base implementation of `_.conformsTo` which accepts `props` to check.
  48947. *
  48948. * @private
  48949. * @param {Object} object The object to inspect.
  48950. * @param {Object} source The object of property predicates to conform to.
  48951. * @returns {boolean} Returns `true` if `object` conforms, else `false`.
  48952. */
  48953. function baseConformsTo(object, source, props) {
  48954. var length = props.length;
  48955. if (object == null) {
  48956. return !length;
  48957. }
  48958. object = Object(object);
  48959. while (length--) {
  48960. var key = props[length],
  48961. predicate = source[key],
  48962. value = object[key];
  48963. if ((value === undefined && !(key in object)) || !predicate(value)) {
  48964. return false;
  48965. }
  48966. }
  48967. return true;
  48968. }
  48969. /**
  48970. * The base implementation of `_.delay` and `_.defer` which accepts `args`
  48971. * to provide to `func`.
  48972. *
  48973. * @private
  48974. * @param {Function} func The function to delay.
  48975. * @param {number} wait The number of milliseconds to delay invocation.
  48976. * @param {Array} args The arguments to provide to `func`.
  48977. * @returns {number|Object} Returns the timer id or timeout object.
  48978. */
  48979. function baseDelay(func, wait, args) {
  48980. if (typeof func != 'function') {
  48981. throw new TypeError(FUNC_ERROR_TEXT);
  48982. }
  48983. return setTimeout(function() { func.apply(undefined, args); }, wait);
  48984. }
  48985. /**
  48986. * The base implementation of methods like `_.difference` without support
  48987. * for excluding multiple arrays or iteratee shorthands.
  48988. *
  48989. * @private
  48990. * @param {Array} array The array to inspect.
  48991. * @param {Array} values The values to exclude.
  48992. * @param {Function} [iteratee] The iteratee invoked per element.
  48993. * @param {Function} [comparator] The comparator invoked per element.
  48994. * @returns {Array} Returns the new array of filtered values.
  48995. */
  48996. function baseDifference(array, values, iteratee, comparator) {
  48997. var index = -1,
  48998. includes = arrayIncludes,
  48999. isCommon = true,
  49000. length = array.length,
  49001. result = [],
  49002. valuesLength = values.length;
  49003. if (!length) {
  49004. return result;
  49005. }
  49006. if (iteratee) {
  49007. values = arrayMap(values, baseUnary(iteratee));
  49008. }
  49009. if (comparator) {
  49010. includes = arrayIncludesWith;
  49011. isCommon = false;
  49012. }
  49013. else if (values.length >= LARGE_ARRAY_SIZE) {
  49014. includes = cacheHas;
  49015. isCommon = false;
  49016. values = new SetCache(values);
  49017. }
  49018. outer:
  49019. while (++index < length) {
  49020. var value = array[index],
  49021. computed = iteratee == null ? value : iteratee(value);
  49022. value = (comparator || value !== 0) ? value : 0;
  49023. if (isCommon && computed === computed) {
  49024. var valuesIndex = valuesLength;
  49025. while (valuesIndex--) {
  49026. if (values[valuesIndex] === computed) {
  49027. continue outer;
  49028. }
  49029. }
  49030. result.push(value);
  49031. }
  49032. else if (!includes(values, computed, comparator)) {
  49033. result.push(value);
  49034. }
  49035. }
  49036. return result;
  49037. }
  49038. /**
  49039. * The base implementation of `_.forEach` without support for iteratee shorthands.
  49040. *
  49041. * @private
  49042. * @param {Array|Object} collection The collection to iterate over.
  49043. * @param {Function} iteratee The function invoked per iteration.
  49044. * @returns {Array|Object} Returns `collection`.
  49045. */
  49046. var baseEach = createBaseEach(baseForOwn);
  49047. /**
  49048. * The base implementation of `_.forEachRight` without support for iteratee shorthands.
  49049. *
  49050. * @private
  49051. * @param {Array|Object} collection The collection to iterate over.
  49052. * @param {Function} iteratee The function invoked per iteration.
  49053. * @returns {Array|Object} Returns `collection`.
  49054. */
  49055. var baseEachRight = createBaseEach(baseForOwnRight, true);
  49056. /**
  49057. * The base implementation of `_.every` without support for iteratee shorthands.
  49058. *
  49059. * @private
  49060. * @param {Array|Object} collection The collection to iterate over.
  49061. * @param {Function} predicate The function invoked per iteration.
  49062. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  49063. * else `false`
  49064. */
  49065. function baseEvery(collection, predicate) {
  49066. var result = true;
  49067. baseEach(collection, function(value, index, collection) {
  49068. result = !!predicate(value, index, collection);
  49069. return result;
  49070. });
  49071. return result;
  49072. }
  49073. /**
  49074. * The base implementation of methods like `_.max` and `_.min` which accepts a
  49075. * `comparator` to determine the extremum value.
  49076. *
  49077. * @private
  49078. * @param {Array} array The array to iterate over.
  49079. * @param {Function} iteratee The iteratee invoked per iteration.
  49080. * @param {Function} comparator The comparator used to compare values.
  49081. * @returns {*} Returns the extremum value.
  49082. */
  49083. function baseExtremum(array, iteratee, comparator) {
  49084. var index = -1,
  49085. length = array.length;
  49086. while (++index < length) {
  49087. var value = array[index],
  49088. current = iteratee(value);
  49089. if (current != null && (computed === undefined
  49090. ? (current === current && !isSymbol(current))
  49091. : comparator(current, computed)
  49092. )) {
  49093. var computed = current,
  49094. result = value;
  49095. }
  49096. }
  49097. return result;
  49098. }
  49099. /**
  49100. * The base implementation of `_.fill` without an iteratee call guard.
  49101. *
  49102. * @private
  49103. * @param {Array} array The array to fill.
  49104. * @param {*} value The value to fill `array` with.
  49105. * @param {number} [start=0] The start position.
  49106. * @param {number} [end=array.length] The end position.
  49107. * @returns {Array} Returns `array`.
  49108. */
  49109. function baseFill(array, value, start, end) {
  49110. var length = array.length;
  49111. start = toInteger(start);
  49112. if (start < 0) {
  49113. start = -start > length ? 0 : (length + start);
  49114. }
  49115. end = (end === undefined || end > length) ? length : toInteger(end);
  49116. if (end < 0) {
  49117. end += length;
  49118. }
  49119. end = start > end ? 0 : toLength(end);
  49120. while (start < end) {
  49121. array[start++] = value;
  49122. }
  49123. return array;
  49124. }
  49125. /**
  49126. * The base implementation of `_.filter` without support for iteratee shorthands.
  49127. *
  49128. * @private
  49129. * @param {Array|Object} collection The collection to iterate over.
  49130. * @param {Function} predicate The function invoked per iteration.
  49131. * @returns {Array} Returns the new filtered array.
  49132. */
  49133. function baseFilter(collection, predicate) {
  49134. var result = [];
  49135. baseEach(collection, function(value, index, collection) {
  49136. if (predicate(value, index, collection)) {
  49137. result.push(value);
  49138. }
  49139. });
  49140. return result;
  49141. }
  49142. /**
  49143. * The base implementation of `_.flatten` with support for restricting flattening.
  49144. *
  49145. * @private
  49146. * @param {Array} array The array to flatten.
  49147. * @param {number} depth The maximum recursion depth.
  49148. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
  49149. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
  49150. * @param {Array} [result=[]] The initial result value.
  49151. * @returns {Array} Returns the new flattened array.
  49152. */
  49153. function baseFlatten(array, depth, predicate, isStrict, result) {
  49154. var index = -1,
  49155. length = array.length;
  49156. predicate || (predicate = isFlattenable);
  49157. result || (result = []);
  49158. while (++index < length) {
  49159. var value = array[index];
  49160. if (depth > 0 && predicate(value)) {
  49161. if (depth > 1) {
  49162. // Recursively flatten arrays (susceptible to call stack limits).
  49163. baseFlatten(value, depth - 1, predicate, isStrict, result);
  49164. } else {
  49165. arrayPush(result, value);
  49166. }
  49167. } else if (!isStrict) {
  49168. result[result.length] = value;
  49169. }
  49170. }
  49171. return result;
  49172. }
  49173. /**
  49174. * The base implementation of `baseForOwn` which iterates over `object`
  49175. * properties returned by `keysFunc` and invokes `iteratee` for each property.
  49176. * Iteratee functions may exit iteration early by explicitly returning `false`.
  49177. *
  49178. * @private
  49179. * @param {Object} object The object to iterate over.
  49180. * @param {Function} iteratee The function invoked per iteration.
  49181. * @param {Function} keysFunc The function to get the keys of `object`.
  49182. * @returns {Object} Returns `object`.
  49183. */
  49184. var baseFor = createBaseFor();
  49185. /**
  49186. * This function is like `baseFor` except that it iterates over properties
  49187. * in the opposite order.
  49188. *
  49189. * @private
  49190. * @param {Object} object The object to iterate over.
  49191. * @param {Function} iteratee The function invoked per iteration.
  49192. * @param {Function} keysFunc The function to get the keys of `object`.
  49193. * @returns {Object} Returns `object`.
  49194. */
  49195. var baseForRight = createBaseFor(true);
  49196. /**
  49197. * The base implementation of `_.forOwn` without support for iteratee shorthands.
  49198. *
  49199. * @private
  49200. * @param {Object} object The object to iterate over.
  49201. * @param {Function} iteratee The function invoked per iteration.
  49202. * @returns {Object} Returns `object`.
  49203. */
  49204. function baseForOwn(object, iteratee) {
  49205. return object && baseFor(object, iteratee, keys);
  49206. }
  49207. /**
  49208. * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
  49209. *
  49210. * @private
  49211. * @param {Object} object The object to iterate over.
  49212. * @param {Function} iteratee The function invoked per iteration.
  49213. * @returns {Object} Returns `object`.
  49214. */
  49215. function baseForOwnRight(object, iteratee) {
  49216. return object && baseForRight(object, iteratee, keys);
  49217. }
  49218. /**
  49219. * The base implementation of `_.functions` which creates an array of
  49220. * `object` function property names filtered from `props`.
  49221. *
  49222. * @private
  49223. * @param {Object} object The object to inspect.
  49224. * @param {Array} props The property names to filter.
  49225. * @returns {Array} Returns the function names.
  49226. */
  49227. function baseFunctions(object, props) {
  49228. return arrayFilter(props, function(key) {
  49229. return isFunction(object[key]);
  49230. });
  49231. }
  49232. /**
  49233. * The base implementation of `_.get` without support for default values.
  49234. *
  49235. * @private
  49236. * @param {Object} object The object to query.
  49237. * @param {Array|string} path The path of the property to get.
  49238. * @returns {*} Returns the resolved value.
  49239. */
  49240. function baseGet(object, path) {
  49241. path = castPath(path, object);
  49242. var index = 0,
  49243. length = path.length;
  49244. while (object != null && index < length) {
  49245. object = object[toKey(path[index++])];
  49246. }
  49247. return (index && index == length) ? object : undefined;
  49248. }
  49249. /**
  49250. * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
  49251. * `keysFunc` and `symbolsFunc` to get the enumerable property names and
  49252. * symbols of `object`.
  49253. *
  49254. * @private
  49255. * @param {Object} object The object to query.
  49256. * @param {Function} keysFunc The function to get the keys of `object`.
  49257. * @param {Function} symbolsFunc The function to get the symbols of `object`.
  49258. * @returns {Array} Returns the array of property names and symbols.
  49259. */
  49260. function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  49261. var result = keysFunc(object);
  49262. return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
  49263. }
  49264. /**
  49265. * The base implementation of `getTag` without fallbacks for buggy environments.
  49266. *
  49267. * @private
  49268. * @param {*} value The value to query.
  49269. * @returns {string} Returns the `toStringTag`.
  49270. */
  49271. function baseGetTag(value) {
  49272. if (value == null) {
  49273. return value === undefined ? undefinedTag : nullTag;
  49274. }
  49275. return (symToStringTag && symToStringTag in Object(value))
  49276. ? getRawTag(value)
  49277. : objectToString(value);
  49278. }
  49279. /**
  49280. * The base implementation of `_.gt` which doesn't coerce arguments.
  49281. *
  49282. * @private
  49283. * @param {*} value The value to compare.
  49284. * @param {*} other The other value to compare.
  49285. * @returns {boolean} Returns `true` if `value` is greater than `other`,
  49286. * else `false`.
  49287. */
  49288. function baseGt(value, other) {
  49289. return value > other;
  49290. }
  49291. /**
  49292. * The base implementation of `_.has` without support for deep paths.
  49293. *
  49294. * @private
  49295. * @param {Object} [object] The object to query.
  49296. * @param {Array|string} key The key to check.
  49297. * @returns {boolean} Returns `true` if `key` exists, else `false`.
  49298. */
  49299. function baseHas(object, key) {
  49300. return object != null && hasOwnProperty.call(object, key);
  49301. }
  49302. /**
  49303. * The base implementation of `_.hasIn` without support for deep paths.
  49304. *
  49305. * @private
  49306. * @param {Object} [object] The object to query.
  49307. * @param {Array|string} key The key to check.
  49308. * @returns {boolean} Returns `true` if `key` exists, else `false`.
  49309. */
  49310. function baseHasIn(object, key) {
  49311. return object != null && key in Object(object);
  49312. }
  49313. /**
  49314. * The base implementation of `_.inRange` which doesn't coerce arguments.
  49315. *
  49316. * @private
  49317. * @param {number} number The number to check.
  49318. * @param {number} start The start of the range.
  49319. * @param {number} end The end of the range.
  49320. * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
  49321. */
  49322. function baseInRange(number, start, end) {
  49323. return number >= nativeMin(start, end) && number < nativeMax(start, end);
  49324. }
  49325. /**
  49326. * The base implementation of methods like `_.intersection`, without support
  49327. * for iteratee shorthands, that accepts an array of arrays to inspect.
  49328. *
  49329. * @private
  49330. * @param {Array} arrays The arrays to inspect.
  49331. * @param {Function} [iteratee] The iteratee invoked per element.
  49332. * @param {Function} [comparator] The comparator invoked per element.
  49333. * @returns {Array} Returns the new array of shared values.
  49334. */
  49335. function baseIntersection(arrays, iteratee, comparator) {
  49336. var includes = comparator ? arrayIncludesWith : arrayIncludes,
  49337. length = arrays[0].length,
  49338. othLength = arrays.length,
  49339. othIndex = othLength,
  49340. caches = Array(othLength),
  49341. maxLength = Infinity,
  49342. result = [];
  49343. while (othIndex--) {
  49344. var array = arrays[othIndex];
  49345. if (othIndex && iteratee) {
  49346. array = arrayMap(array, baseUnary(iteratee));
  49347. }
  49348. maxLength = nativeMin(array.length, maxLength);
  49349. caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
  49350. ? new SetCache(othIndex && array)
  49351. : undefined;
  49352. }
  49353. array = arrays[0];
  49354. var index = -1,
  49355. seen = caches[0];
  49356. outer:
  49357. while (++index < length && result.length < maxLength) {
  49358. var value = array[index],
  49359. computed = iteratee ? iteratee(value) : value;
  49360. value = (comparator || value !== 0) ? value : 0;
  49361. if (!(seen
  49362. ? cacheHas(seen, computed)
  49363. : includes(result, computed, comparator)
  49364. )) {
  49365. othIndex = othLength;
  49366. while (--othIndex) {
  49367. var cache = caches[othIndex];
  49368. if (!(cache
  49369. ? cacheHas(cache, computed)
  49370. : includes(arrays[othIndex], computed, comparator))
  49371. ) {
  49372. continue outer;
  49373. }
  49374. }
  49375. if (seen) {
  49376. seen.push(computed);
  49377. }
  49378. result.push(value);
  49379. }
  49380. }
  49381. return result;
  49382. }
  49383. /**
  49384. * The base implementation of `_.invert` and `_.invertBy` which inverts
  49385. * `object` with values transformed by `iteratee` and set by `setter`.
  49386. *
  49387. * @private
  49388. * @param {Object} object The object to iterate over.
  49389. * @param {Function} setter The function to set `accumulator` values.
  49390. * @param {Function} iteratee The iteratee to transform values.
  49391. * @param {Object} accumulator The initial inverted object.
  49392. * @returns {Function} Returns `accumulator`.
  49393. */
  49394. function baseInverter(object, setter, iteratee, accumulator) {
  49395. baseForOwn(object, function(value, key, object) {
  49396. setter(accumulator, iteratee(value), key, object);
  49397. });
  49398. return accumulator;
  49399. }
  49400. /**
  49401. * The base implementation of `_.invoke` without support for individual
  49402. * method arguments.
  49403. *
  49404. * @private
  49405. * @param {Object} object The object to query.
  49406. * @param {Array|string} path The path of the method to invoke.
  49407. * @param {Array} args The arguments to invoke the method with.
  49408. * @returns {*} Returns the result of the invoked method.
  49409. */
  49410. function baseInvoke(object, path, args) {
  49411. path = castPath(path, object);
  49412. object = parent(object, path);
  49413. var func = object == null ? object : object[toKey(last(path))];
  49414. return func == null ? undefined : apply(func, object, args);
  49415. }
  49416. /**
  49417. * The base implementation of `_.isArguments`.
  49418. *
  49419. * @private
  49420. * @param {*} value The value to check.
  49421. * @returns {boolean} Returns `true` if `value` is an `arguments` object,
  49422. */
  49423. function baseIsArguments(value) {
  49424. return isObjectLike(value) && baseGetTag(value) == argsTag;
  49425. }
  49426. /**
  49427. * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
  49428. *
  49429. * @private
  49430. * @param {*} value The value to check.
  49431. * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
  49432. */
  49433. function baseIsArrayBuffer(value) {
  49434. return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
  49435. }
  49436. /**
  49437. * The base implementation of `_.isDate` without Node.js optimizations.
  49438. *
  49439. * @private
  49440. * @param {*} value The value to check.
  49441. * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
  49442. */
  49443. function baseIsDate(value) {
  49444. return isObjectLike(value) && baseGetTag(value) == dateTag;
  49445. }
  49446. /**
  49447. * The base implementation of `_.isEqual` which supports partial comparisons
  49448. * and tracks traversed objects.
  49449. *
  49450. * @private
  49451. * @param {*} value The value to compare.
  49452. * @param {*} other The other value to compare.
  49453. * @param {boolean} bitmask The bitmask flags.
  49454. * 1 - Unordered comparison
  49455. * 2 - Partial comparison
  49456. * @param {Function} [customizer] The function to customize comparisons.
  49457. * @param {Object} [stack] Tracks traversed `value` and `other` objects.
  49458. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  49459. */
  49460. function baseIsEqual(value, other, bitmask, customizer, stack) {
  49461. if (value === other) {
  49462. return true;
  49463. }
  49464. if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
  49465. return value !== value && other !== other;
  49466. }
  49467. return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
  49468. }
  49469. /**
  49470. * A specialized version of `baseIsEqual` for arrays and objects which performs
  49471. * deep comparisons and tracks traversed objects enabling objects with circular
  49472. * references to be compared.
  49473. *
  49474. * @private
  49475. * @param {Object} object The object to compare.
  49476. * @param {Object} other The other object to compare.
  49477. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  49478. * @param {Function} customizer The function to customize comparisons.
  49479. * @param {Function} equalFunc The function to determine equivalents of values.
  49480. * @param {Object} [stack] Tracks traversed `object` and `other` objects.
  49481. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  49482. */
  49483. function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
  49484. var objIsArr = isArray(object),
  49485. othIsArr = isArray(other),
  49486. objTag = objIsArr ? arrayTag : getTag(object),
  49487. othTag = othIsArr ? arrayTag : getTag(other);
  49488. objTag = objTag == argsTag ? objectTag : objTag;
  49489. othTag = othTag == argsTag ? objectTag : othTag;
  49490. var objIsObj = objTag == objectTag,
  49491. othIsObj = othTag == objectTag,
  49492. isSameTag = objTag == othTag;
  49493. if (isSameTag && isBuffer(object)) {
  49494. if (!isBuffer(other)) {
  49495. return false;
  49496. }
  49497. objIsArr = true;
  49498. objIsObj = false;
  49499. }
  49500. if (isSameTag && !objIsObj) {
  49501. stack || (stack = new Stack);
  49502. return (objIsArr || isTypedArray(object))
  49503. ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
  49504. : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
  49505. }
  49506. if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
  49507. var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
  49508. othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
  49509. if (objIsWrapped || othIsWrapped) {
  49510. var objUnwrapped = objIsWrapped ? object.value() : object,
  49511. othUnwrapped = othIsWrapped ? other.value() : other;
  49512. stack || (stack = new Stack);
  49513. return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
  49514. }
  49515. }
  49516. if (!isSameTag) {
  49517. return false;
  49518. }
  49519. stack || (stack = new Stack);
  49520. return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
  49521. }
  49522. /**
  49523. * The base implementation of `_.isMap` without Node.js optimizations.
  49524. *
  49525. * @private
  49526. * @param {*} value The value to check.
  49527. * @returns {boolean} Returns `true` if `value` is a map, else `false`.
  49528. */
  49529. function baseIsMap(value) {
  49530. return isObjectLike(value) && getTag(value) == mapTag;
  49531. }
  49532. /**
  49533. * The base implementation of `_.isMatch` without support for iteratee shorthands.
  49534. *
  49535. * @private
  49536. * @param {Object} object The object to inspect.
  49537. * @param {Object} source The object of property values to match.
  49538. * @param {Array} matchData The property names, values, and compare flags to match.
  49539. * @param {Function} [customizer] The function to customize comparisons.
  49540. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  49541. */
  49542. function baseIsMatch(object, source, matchData, customizer) {
  49543. var index = matchData.length,
  49544. length = index,
  49545. noCustomizer = !customizer;
  49546. if (object == null) {
  49547. return !length;
  49548. }
  49549. object = Object(object);
  49550. while (index--) {
  49551. var data = matchData[index];
  49552. if ((noCustomizer && data[2])
  49553. ? data[1] !== object[data[0]]
  49554. : !(data[0] in object)
  49555. ) {
  49556. return false;
  49557. }
  49558. }
  49559. while (++index < length) {
  49560. data = matchData[index];
  49561. var key = data[0],
  49562. objValue = object[key],
  49563. srcValue = data[1];
  49564. if (noCustomizer && data[2]) {
  49565. if (objValue === undefined && !(key in object)) {
  49566. return false;
  49567. }
  49568. } else {
  49569. var stack = new Stack;
  49570. if (customizer) {
  49571. var result = customizer(objValue, srcValue, key, object, source, stack);
  49572. }
  49573. if (!(result === undefined
  49574. ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
  49575. : result
  49576. )) {
  49577. return false;
  49578. }
  49579. }
  49580. }
  49581. return true;
  49582. }
  49583. /**
  49584. * The base implementation of `_.isNative` without bad shim checks.
  49585. *
  49586. * @private
  49587. * @param {*} value The value to check.
  49588. * @returns {boolean} Returns `true` if `value` is a native function,
  49589. * else `false`.
  49590. */
  49591. function baseIsNative(value) {
  49592. if (!isObject(value) || isMasked(value)) {
  49593. return false;
  49594. }
  49595. var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
  49596. return pattern.test(toSource(value));
  49597. }
  49598. /**
  49599. * The base implementation of `_.isRegExp` without Node.js optimizations.
  49600. *
  49601. * @private
  49602. * @param {*} value The value to check.
  49603. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
  49604. */
  49605. function baseIsRegExp(value) {
  49606. return isObjectLike(value) && baseGetTag(value) == regexpTag;
  49607. }
  49608. /**
  49609. * The base implementation of `_.isSet` without Node.js optimizations.
  49610. *
  49611. * @private
  49612. * @param {*} value The value to check.
  49613. * @returns {boolean} Returns `true` if `value` is a set, else `false`.
  49614. */
  49615. function baseIsSet(value) {
  49616. return isObjectLike(value) && getTag(value) == setTag;
  49617. }
  49618. /**
  49619. * The base implementation of `_.isTypedArray` without Node.js optimizations.
  49620. *
  49621. * @private
  49622. * @param {*} value The value to check.
  49623. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
  49624. */
  49625. function baseIsTypedArray(value) {
  49626. return isObjectLike(value) &&
  49627. isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
  49628. }
  49629. /**
  49630. * The base implementation of `_.iteratee`.
  49631. *
  49632. * @private
  49633. * @param {*} [value=_.identity] The value to convert to an iteratee.
  49634. * @returns {Function} Returns the iteratee.
  49635. */
  49636. function baseIteratee(value) {
  49637. // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
  49638. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
  49639. if (typeof value == 'function') {
  49640. return value;
  49641. }
  49642. if (value == null) {
  49643. return identity;
  49644. }
  49645. if (typeof value == 'object') {
  49646. return isArray(value)
  49647. ? baseMatchesProperty(value[0], value[1])
  49648. : baseMatches(value);
  49649. }
  49650. return property(value);
  49651. }
  49652. /**
  49653. * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
  49654. *
  49655. * @private
  49656. * @param {Object} object The object to query.
  49657. * @returns {Array} Returns the array of property names.
  49658. */
  49659. function baseKeys(object) {
  49660. if (!isPrototype(object)) {
  49661. return nativeKeys(object);
  49662. }
  49663. var result = [];
  49664. for (var key in Object(object)) {
  49665. if (hasOwnProperty.call(object, key) && key != 'constructor') {
  49666. result.push(key);
  49667. }
  49668. }
  49669. return result;
  49670. }
  49671. /**
  49672. * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
  49673. *
  49674. * @private
  49675. * @param {Object} object The object to query.
  49676. * @returns {Array} Returns the array of property names.
  49677. */
  49678. function baseKeysIn(object) {
  49679. if (!isObject(object)) {
  49680. return nativeKeysIn(object);
  49681. }
  49682. var isProto = isPrototype(object),
  49683. result = [];
  49684. for (var key in object) {
  49685. if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
  49686. result.push(key);
  49687. }
  49688. }
  49689. return result;
  49690. }
  49691. /**
  49692. * The base implementation of `_.lt` which doesn't coerce arguments.
  49693. *
  49694. * @private
  49695. * @param {*} value The value to compare.
  49696. * @param {*} other The other value to compare.
  49697. * @returns {boolean} Returns `true` if `value` is less than `other`,
  49698. * else `false`.
  49699. */
  49700. function baseLt(value, other) {
  49701. return value < other;
  49702. }
  49703. /**
  49704. * The base implementation of `_.map` without support for iteratee shorthands.
  49705. *
  49706. * @private
  49707. * @param {Array|Object} collection The collection to iterate over.
  49708. * @param {Function} iteratee The function invoked per iteration.
  49709. * @returns {Array} Returns the new mapped array.
  49710. */
  49711. function baseMap(collection, iteratee) {
  49712. var index = -1,
  49713. result = isArrayLike(collection) ? Array(collection.length) : [];
  49714. baseEach(collection, function(value, key, collection) {
  49715. result[++index] = iteratee(value, key, collection);
  49716. });
  49717. return result;
  49718. }
  49719. /**
  49720. * The base implementation of `_.matches` which doesn't clone `source`.
  49721. *
  49722. * @private
  49723. * @param {Object} source The object of property values to match.
  49724. * @returns {Function} Returns the new spec function.
  49725. */
  49726. function baseMatches(source) {
  49727. var matchData = getMatchData(source);
  49728. if (matchData.length == 1 && matchData[0][2]) {
  49729. return matchesStrictComparable(matchData[0][0], matchData[0][1]);
  49730. }
  49731. return function(object) {
  49732. return object === source || baseIsMatch(object, source, matchData);
  49733. };
  49734. }
  49735. /**
  49736. * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
  49737. *
  49738. * @private
  49739. * @param {string} path The path of the property to get.
  49740. * @param {*} srcValue The value to match.
  49741. * @returns {Function} Returns the new spec function.
  49742. */
  49743. function baseMatchesProperty(path, srcValue) {
  49744. if (isKey(path) && isStrictComparable(srcValue)) {
  49745. return matchesStrictComparable(toKey(path), srcValue);
  49746. }
  49747. return function(object) {
  49748. var objValue = get(object, path);
  49749. return (objValue === undefined && objValue === srcValue)
  49750. ? hasIn(object, path)
  49751. : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
  49752. };
  49753. }
  49754. /**
  49755. * The base implementation of `_.merge` without support for multiple sources.
  49756. *
  49757. * @private
  49758. * @param {Object} object The destination object.
  49759. * @param {Object} source The source object.
  49760. * @param {number} srcIndex The index of `source`.
  49761. * @param {Function} [customizer] The function to customize merged values.
  49762. * @param {Object} [stack] Tracks traversed source values and their merged
  49763. * counterparts.
  49764. */
  49765. function baseMerge(object, source, srcIndex, customizer, stack) {
  49766. if (object === source) {
  49767. return;
  49768. }
  49769. baseFor(source, function(srcValue, key) {
  49770. stack || (stack = new Stack);
  49771. if (isObject(srcValue)) {
  49772. baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
  49773. }
  49774. else {
  49775. var newValue = customizer
  49776. ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
  49777. : undefined;
  49778. if (newValue === undefined) {
  49779. newValue = srcValue;
  49780. }
  49781. assignMergeValue(object, key, newValue);
  49782. }
  49783. }, keysIn);
  49784. }
  49785. /**
  49786. * A specialized version of `baseMerge` for arrays and objects which performs
  49787. * deep merges and tracks traversed objects enabling objects with circular
  49788. * references to be merged.
  49789. *
  49790. * @private
  49791. * @param {Object} object The destination object.
  49792. * @param {Object} source The source object.
  49793. * @param {string} key The key of the value to merge.
  49794. * @param {number} srcIndex The index of `source`.
  49795. * @param {Function} mergeFunc The function to merge values.
  49796. * @param {Function} [customizer] The function to customize assigned values.
  49797. * @param {Object} [stack] Tracks traversed source values and their merged
  49798. * counterparts.
  49799. */
  49800. function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
  49801. var objValue = safeGet(object, key),
  49802. srcValue = safeGet(source, key),
  49803. stacked = stack.get(srcValue);
  49804. if (stacked) {
  49805. assignMergeValue(object, key, stacked);
  49806. return;
  49807. }
  49808. var newValue = customizer
  49809. ? customizer(objValue, srcValue, (key + ''), object, source, stack)
  49810. : undefined;
  49811. var isCommon = newValue === undefined;
  49812. if (isCommon) {
  49813. var isArr = isArray(srcValue),
  49814. isBuff = !isArr && isBuffer(srcValue),
  49815. isTyped = !isArr && !isBuff && isTypedArray(srcValue);
  49816. newValue = srcValue;
  49817. if (isArr || isBuff || isTyped) {
  49818. if (isArray(objValue)) {
  49819. newValue = objValue;
  49820. }
  49821. else if (isArrayLikeObject(objValue)) {
  49822. newValue = copyArray(objValue);
  49823. }
  49824. else if (isBuff) {
  49825. isCommon = false;
  49826. newValue = cloneBuffer(srcValue, true);
  49827. }
  49828. else if (isTyped) {
  49829. isCommon = false;
  49830. newValue = cloneTypedArray(srcValue, true);
  49831. }
  49832. else {
  49833. newValue = [];
  49834. }
  49835. }
  49836. else if (isPlainObject(srcValue) || isArguments(srcValue)) {
  49837. newValue = objValue;
  49838. if (isArguments(objValue)) {
  49839. newValue = toPlainObject(objValue);
  49840. }
  49841. else if (!isObject(objValue) || isFunction(objValue)) {
  49842. newValue = initCloneObject(srcValue);
  49843. }
  49844. }
  49845. else {
  49846. isCommon = false;
  49847. }
  49848. }
  49849. if (isCommon) {
  49850. // Recursively merge objects and arrays (susceptible to call stack limits).
  49851. stack.set(srcValue, newValue);
  49852. mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
  49853. stack['delete'](srcValue);
  49854. }
  49855. assignMergeValue(object, key, newValue);
  49856. }
  49857. /**
  49858. * The base implementation of `_.nth` which doesn't coerce arguments.
  49859. *
  49860. * @private
  49861. * @param {Array} array The array to query.
  49862. * @param {number} n The index of the element to return.
  49863. * @returns {*} Returns the nth element of `array`.
  49864. */
  49865. function baseNth(array, n) {
  49866. var length = array.length;
  49867. if (!length) {
  49868. return;
  49869. }
  49870. n += n < 0 ? length : 0;
  49871. return isIndex(n, length) ? array[n] : undefined;
  49872. }
  49873. /**
  49874. * The base implementation of `_.orderBy` without param guards.
  49875. *
  49876. * @private
  49877. * @param {Array|Object} collection The collection to iterate over.
  49878. * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
  49879. * @param {string[]} orders The sort orders of `iteratees`.
  49880. * @returns {Array} Returns the new sorted array.
  49881. */
  49882. function baseOrderBy(collection, iteratees, orders) {
  49883. if (iteratees.length) {
  49884. iteratees = arrayMap(iteratees, function(iteratee) {
  49885. if (isArray(iteratee)) {
  49886. return function(value) {
  49887. return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
  49888. }
  49889. }
  49890. return iteratee;
  49891. });
  49892. } else {
  49893. iteratees = [identity];
  49894. }
  49895. var index = -1;
  49896. iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
  49897. var result = baseMap(collection, function(value, key, collection) {
  49898. var criteria = arrayMap(iteratees, function(iteratee) {
  49899. return iteratee(value);
  49900. });
  49901. return { 'criteria': criteria, 'index': ++index, 'value': value };
  49902. });
  49903. return baseSortBy(result, function(object, other) {
  49904. return compareMultiple(object, other, orders);
  49905. });
  49906. }
  49907. /**
  49908. * The base implementation of `_.pick` without support for individual
  49909. * property identifiers.
  49910. *
  49911. * @private
  49912. * @param {Object} object The source object.
  49913. * @param {string[]} paths The property paths to pick.
  49914. * @returns {Object} Returns the new object.
  49915. */
  49916. function basePick(object, paths) {
  49917. return basePickBy(object, paths, function(value, path) {
  49918. return hasIn(object, path);
  49919. });
  49920. }
  49921. /**
  49922. * The base implementation of `_.pickBy` without support for iteratee shorthands.
  49923. *
  49924. * @private
  49925. * @param {Object} object The source object.
  49926. * @param {string[]} paths The property paths to pick.
  49927. * @param {Function} predicate The function invoked per property.
  49928. * @returns {Object} Returns the new object.
  49929. */
  49930. function basePickBy(object, paths, predicate) {
  49931. var index = -1,
  49932. length = paths.length,
  49933. result = {};
  49934. while (++index < length) {
  49935. var path = paths[index],
  49936. value = baseGet(object, path);
  49937. if (predicate(value, path)) {
  49938. baseSet(result, castPath(path, object), value);
  49939. }
  49940. }
  49941. return result;
  49942. }
  49943. /**
  49944. * A specialized version of `baseProperty` which supports deep paths.
  49945. *
  49946. * @private
  49947. * @param {Array|string} path The path of the property to get.
  49948. * @returns {Function} Returns the new accessor function.
  49949. */
  49950. function basePropertyDeep(path) {
  49951. return function(object) {
  49952. return baseGet(object, path);
  49953. };
  49954. }
  49955. /**
  49956. * The base implementation of `_.pullAllBy` without support for iteratee
  49957. * shorthands.
  49958. *
  49959. * @private
  49960. * @param {Array} array The array to modify.
  49961. * @param {Array} values The values to remove.
  49962. * @param {Function} [iteratee] The iteratee invoked per element.
  49963. * @param {Function} [comparator] The comparator invoked per element.
  49964. * @returns {Array} Returns `array`.
  49965. */
  49966. function basePullAll(array, values, iteratee, comparator) {
  49967. var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
  49968. index = -1,
  49969. length = values.length,
  49970. seen = array;
  49971. if (array === values) {
  49972. values = copyArray(values);
  49973. }
  49974. if (iteratee) {
  49975. seen = arrayMap(array, baseUnary(iteratee));
  49976. }
  49977. while (++index < length) {
  49978. var fromIndex = 0,
  49979. value = values[index],
  49980. computed = iteratee ? iteratee(value) : value;
  49981. while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
  49982. if (seen !== array) {
  49983. splice.call(seen, fromIndex, 1);
  49984. }
  49985. splice.call(array, fromIndex, 1);
  49986. }
  49987. }
  49988. return array;
  49989. }
  49990. /**
  49991. * The base implementation of `_.pullAt` without support for individual
  49992. * indexes or capturing the removed elements.
  49993. *
  49994. * @private
  49995. * @param {Array} array The array to modify.
  49996. * @param {number[]} indexes The indexes of elements to remove.
  49997. * @returns {Array} Returns `array`.
  49998. */
  49999. function basePullAt(array, indexes) {
  50000. var length = array ? indexes.length : 0,
  50001. lastIndex = length - 1;
  50002. while (length--) {
  50003. var index = indexes[length];
  50004. if (length == lastIndex || index !== previous) {
  50005. var previous = index;
  50006. if (isIndex(index)) {
  50007. splice.call(array, index, 1);
  50008. } else {
  50009. baseUnset(array, index);
  50010. }
  50011. }
  50012. }
  50013. return array;
  50014. }
  50015. /**
  50016. * The base implementation of `_.random` without support for returning
  50017. * floating-point numbers.
  50018. *
  50019. * @private
  50020. * @param {number} lower The lower bound.
  50021. * @param {number} upper The upper bound.
  50022. * @returns {number} Returns the random number.
  50023. */
  50024. function baseRandom(lower, upper) {
  50025. return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
  50026. }
  50027. /**
  50028. * The base implementation of `_.range` and `_.rangeRight` which doesn't
  50029. * coerce arguments.
  50030. *
  50031. * @private
  50032. * @param {number} start The start of the range.
  50033. * @param {number} end The end of the range.
  50034. * @param {number} step The value to increment or decrement by.
  50035. * @param {boolean} [fromRight] Specify iterating from right to left.
  50036. * @returns {Array} Returns the range of numbers.
  50037. */
  50038. function baseRange(start, end, step, fromRight) {
  50039. var index = -1,
  50040. length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
  50041. result = Array(length);
  50042. while (length--) {
  50043. result[fromRight ? length : ++index] = start;
  50044. start += step;
  50045. }
  50046. return result;
  50047. }
  50048. /**
  50049. * The base implementation of `_.repeat` which doesn't coerce arguments.
  50050. *
  50051. * @private
  50052. * @param {string} string The string to repeat.
  50053. * @param {number} n The number of times to repeat the string.
  50054. * @returns {string} Returns the repeated string.
  50055. */
  50056. function baseRepeat(string, n) {
  50057. var result = '';
  50058. if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
  50059. return result;
  50060. }
  50061. // Leverage the exponentiation by squaring algorithm for a faster repeat.
  50062. // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
  50063. do {
  50064. if (n % 2) {
  50065. result += string;
  50066. }
  50067. n = nativeFloor(n / 2);
  50068. if (n) {
  50069. string += string;
  50070. }
  50071. } while (n);
  50072. return result;
  50073. }
  50074. /**
  50075. * The base implementation of `_.rest` which doesn't validate or coerce arguments.
  50076. *
  50077. * @private
  50078. * @param {Function} func The function to apply a rest parameter to.
  50079. * @param {number} [start=func.length-1] The start position of the rest parameter.
  50080. * @returns {Function} Returns the new function.
  50081. */
  50082. function baseRest(func, start) {
  50083. return setToString(overRest(func, start, identity), func + '');
  50084. }
  50085. /**
  50086. * The base implementation of `_.sample`.
  50087. *
  50088. * @private
  50089. * @param {Array|Object} collection The collection to sample.
  50090. * @returns {*} Returns the random element.
  50091. */
  50092. function baseSample(collection) {
  50093. return arraySample(values(collection));
  50094. }
  50095. /**
  50096. * The base implementation of `_.sampleSize` without param guards.
  50097. *
  50098. * @private
  50099. * @param {Array|Object} collection The collection to sample.
  50100. * @param {number} n The number of elements to sample.
  50101. * @returns {Array} Returns the random elements.
  50102. */
  50103. function baseSampleSize(collection, n) {
  50104. var array = values(collection);
  50105. return shuffleSelf(array, baseClamp(n, 0, array.length));
  50106. }
  50107. /**
  50108. * The base implementation of `_.set`.
  50109. *
  50110. * @private
  50111. * @param {Object} object The object to modify.
  50112. * @param {Array|string} path The path of the property to set.
  50113. * @param {*} value The value to set.
  50114. * @param {Function} [customizer] The function to customize path creation.
  50115. * @returns {Object} Returns `object`.
  50116. */
  50117. function baseSet(object, path, value, customizer) {
  50118. if (!isObject(object)) {
  50119. return object;
  50120. }
  50121. path = castPath(path, object);
  50122. var index = -1,
  50123. length = path.length,
  50124. lastIndex = length - 1,
  50125. nested = object;
  50126. while (nested != null && ++index < length) {
  50127. var key = toKey(path[index]),
  50128. newValue = value;
  50129. if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
  50130. return object;
  50131. }
  50132. if (index != lastIndex) {
  50133. var objValue = nested[key];
  50134. newValue = customizer ? customizer(objValue, key, nested) : undefined;
  50135. if (newValue === undefined) {
  50136. newValue = isObject(objValue)
  50137. ? objValue
  50138. : (isIndex(path[index + 1]) ? [] : {});
  50139. }
  50140. }
  50141. assignValue(nested, key, newValue);
  50142. nested = nested[key];
  50143. }
  50144. return object;
  50145. }
  50146. /**
  50147. * The base implementation of `setData` without support for hot loop shorting.
  50148. *
  50149. * @private
  50150. * @param {Function} func The function to associate metadata with.
  50151. * @param {*} data The metadata.
  50152. * @returns {Function} Returns `func`.
  50153. */
  50154. var baseSetData = !metaMap ? identity : function(func, data) {
  50155. metaMap.set(func, data);
  50156. return func;
  50157. };
  50158. /**
  50159. * The base implementation of `setToString` without support for hot loop shorting.
  50160. *
  50161. * @private
  50162. * @param {Function} func The function to modify.
  50163. * @param {Function} string The `toString` result.
  50164. * @returns {Function} Returns `func`.
  50165. */
  50166. var baseSetToString = !defineProperty ? identity : function(func, string) {
  50167. return defineProperty(func, 'toString', {
  50168. 'configurable': true,
  50169. 'enumerable': false,
  50170. 'value': constant(string),
  50171. 'writable': true
  50172. });
  50173. };
  50174. /**
  50175. * The base implementation of `_.shuffle`.
  50176. *
  50177. * @private
  50178. * @param {Array|Object} collection The collection to shuffle.
  50179. * @returns {Array} Returns the new shuffled array.
  50180. */
  50181. function baseShuffle(collection) {
  50182. return shuffleSelf(values(collection));
  50183. }
  50184. /**
  50185. * The base implementation of `_.slice` without an iteratee call guard.
  50186. *
  50187. * @private
  50188. * @param {Array} array The array to slice.
  50189. * @param {number} [start=0] The start position.
  50190. * @param {number} [end=array.length] The end position.
  50191. * @returns {Array} Returns the slice of `array`.
  50192. */
  50193. function baseSlice(array, start, end) {
  50194. var index = -1,
  50195. length = array.length;
  50196. if (start < 0) {
  50197. start = -start > length ? 0 : (length + start);
  50198. }
  50199. end = end > length ? length : end;
  50200. if (end < 0) {
  50201. end += length;
  50202. }
  50203. length = start > end ? 0 : ((end - start) >>> 0);
  50204. start >>>= 0;
  50205. var result = Array(length);
  50206. while (++index < length) {
  50207. result[index] = array[index + start];
  50208. }
  50209. return result;
  50210. }
  50211. /**
  50212. * The base implementation of `_.some` without support for iteratee shorthands.
  50213. *
  50214. * @private
  50215. * @param {Array|Object} collection The collection to iterate over.
  50216. * @param {Function} predicate The function invoked per iteration.
  50217. * @returns {boolean} Returns `true` if any element passes the predicate check,
  50218. * else `false`.
  50219. */
  50220. function baseSome(collection, predicate) {
  50221. var result;
  50222. baseEach(collection, function(value, index, collection) {
  50223. result = predicate(value, index, collection);
  50224. return !result;
  50225. });
  50226. return !!result;
  50227. }
  50228. /**
  50229. * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
  50230. * performs a binary search of `array` to determine the index at which `value`
  50231. * should be inserted into `array` in order to maintain its sort order.
  50232. *
  50233. * @private
  50234. * @param {Array} array The sorted array to inspect.
  50235. * @param {*} value The value to evaluate.
  50236. * @param {boolean} [retHighest] Specify returning the highest qualified index.
  50237. * @returns {number} Returns the index at which `value` should be inserted
  50238. * into `array`.
  50239. */
  50240. function baseSortedIndex(array, value, retHighest) {
  50241. var low = 0,
  50242. high = array == null ? low : array.length;
  50243. if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
  50244. while (low < high) {
  50245. var mid = (low + high) >>> 1,
  50246. computed = array[mid];
  50247. if (computed !== null && !isSymbol(computed) &&
  50248. (retHighest ? (computed <= value) : (computed < value))) {
  50249. low = mid + 1;
  50250. } else {
  50251. high = mid;
  50252. }
  50253. }
  50254. return high;
  50255. }
  50256. return baseSortedIndexBy(array, value, identity, retHighest);
  50257. }
  50258. /**
  50259. * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
  50260. * which invokes `iteratee` for `value` and each element of `array` to compute
  50261. * their sort ranking. The iteratee is invoked with one argument; (value).
  50262. *
  50263. * @private
  50264. * @param {Array} array The sorted array to inspect.
  50265. * @param {*} value The value to evaluate.
  50266. * @param {Function} iteratee The iteratee invoked per element.
  50267. * @param {boolean} [retHighest] Specify returning the highest qualified index.
  50268. * @returns {number} Returns the index at which `value` should be inserted
  50269. * into `array`.
  50270. */
  50271. function baseSortedIndexBy(array, value, iteratee, retHighest) {
  50272. var low = 0,
  50273. high = array == null ? 0 : array.length;
  50274. if (high === 0) {
  50275. return 0;
  50276. }
  50277. value = iteratee(value);
  50278. var valIsNaN = value !== value,
  50279. valIsNull = value === null,
  50280. valIsSymbol = isSymbol(value),
  50281. valIsUndefined = value === undefined;
  50282. while (low < high) {
  50283. var mid = nativeFloor((low + high) / 2),
  50284. computed = iteratee(array[mid]),
  50285. othIsDefined = computed !== undefined,
  50286. othIsNull = computed === null,
  50287. othIsReflexive = computed === computed,
  50288. othIsSymbol = isSymbol(computed);
  50289. if (valIsNaN) {
  50290. var setLow = retHighest || othIsReflexive;
  50291. } else if (valIsUndefined) {
  50292. setLow = othIsReflexive && (retHighest || othIsDefined);
  50293. } else if (valIsNull) {
  50294. setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
  50295. } else if (valIsSymbol) {
  50296. setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
  50297. } else if (othIsNull || othIsSymbol) {
  50298. setLow = false;
  50299. } else {
  50300. setLow = retHighest ? (computed <= value) : (computed < value);
  50301. }
  50302. if (setLow) {
  50303. low = mid + 1;
  50304. } else {
  50305. high = mid;
  50306. }
  50307. }
  50308. return nativeMin(high, MAX_ARRAY_INDEX);
  50309. }
  50310. /**
  50311. * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
  50312. * support for iteratee shorthands.
  50313. *
  50314. * @private
  50315. * @param {Array} array The array to inspect.
  50316. * @param {Function} [iteratee] The iteratee invoked per element.
  50317. * @returns {Array} Returns the new duplicate free array.
  50318. */
  50319. function baseSortedUniq(array, iteratee) {
  50320. var index = -1,
  50321. length = array.length,
  50322. resIndex = 0,
  50323. result = [];
  50324. while (++index < length) {
  50325. var value = array[index],
  50326. computed = iteratee ? iteratee(value) : value;
  50327. if (!index || !eq(computed, seen)) {
  50328. var seen = computed;
  50329. result[resIndex++] = value === 0 ? 0 : value;
  50330. }
  50331. }
  50332. return result;
  50333. }
  50334. /**
  50335. * The base implementation of `_.toNumber` which doesn't ensure correct
  50336. * conversions of binary, hexadecimal, or octal string values.
  50337. *
  50338. * @private
  50339. * @param {*} value The value to process.
  50340. * @returns {number} Returns the number.
  50341. */
  50342. function baseToNumber(value) {
  50343. if (typeof value == 'number') {
  50344. return value;
  50345. }
  50346. if (isSymbol(value)) {
  50347. return NAN;
  50348. }
  50349. return +value;
  50350. }
  50351. /**
  50352. * The base implementation of `_.toString` which doesn't convert nullish
  50353. * values to empty strings.
  50354. *
  50355. * @private
  50356. * @param {*} value The value to process.
  50357. * @returns {string} Returns the string.
  50358. */
  50359. function baseToString(value) {
  50360. // Exit early for strings to avoid a performance hit in some environments.
  50361. if (typeof value == 'string') {
  50362. return value;
  50363. }
  50364. if (isArray(value)) {
  50365. // Recursively convert values (susceptible to call stack limits).
  50366. return arrayMap(value, baseToString) + '';
  50367. }
  50368. if (isSymbol(value)) {
  50369. return symbolToString ? symbolToString.call(value) : '';
  50370. }
  50371. var result = (value + '');
  50372. return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
  50373. }
  50374. /**
  50375. * The base implementation of `_.uniqBy` without support for iteratee shorthands.
  50376. *
  50377. * @private
  50378. * @param {Array} array The array to inspect.
  50379. * @param {Function} [iteratee] The iteratee invoked per element.
  50380. * @param {Function} [comparator] The comparator invoked per element.
  50381. * @returns {Array} Returns the new duplicate free array.
  50382. */
  50383. function baseUniq(array, iteratee, comparator) {
  50384. var index = -1,
  50385. includes = arrayIncludes,
  50386. length = array.length,
  50387. isCommon = true,
  50388. result = [],
  50389. seen = result;
  50390. if (comparator) {
  50391. isCommon = false;
  50392. includes = arrayIncludesWith;
  50393. }
  50394. else if (length >= LARGE_ARRAY_SIZE) {
  50395. var set = iteratee ? null : createSet(array);
  50396. if (set) {
  50397. return setToArray(set);
  50398. }
  50399. isCommon = false;
  50400. includes = cacheHas;
  50401. seen = new SetCache;
  50402. }
  50403. else {
  50404. seen = iteratee ? [] : result;
  50405. }
  50406. outer:
  50407. while (++index < length) {
  50408. var value = array[index],
  50409. computed = iteratee ? iteratee(value) : value;
  50410. value = (comparator || value !== 0) ? value : 0;
  50411. if (isCommon && computed === computed) {
  50412. var seenIndex = seen.length;
  50413. while (seenIndex--) {
  50414. if (seen[seenIndex] === computed) {
  50415. continue outer;
  50416. }
  50417. }
  50418. if (iteratee) {
  50419. seen.push(computed);
  50420. }
  50421. result.push(value);
  50422. }
  50423. else if (!includes(seen, computed, comparator)) {
  50424. if (seen !== result) {
  50425. seen.push(computed);
  50426. }
  50427. result.push(value);
  50428. }
  50429. }
  50430. return result;
  50431. }
  50432. /**
  50433. * The base implementation of `_.unset`.
  50434. *
  50435. * @private
  50436. * @param {Object} object The object to modify.
  50437. * @param {Array|string} path The property path to unset.
  50438. * @returns {boolean} Returns `true` if the property is deleted, else `false`.
  50439. */
  50440. function baseUnset(object, path) {
  50441. path = castPath(path, object);
  50442. object = parent(object, path);
  50443. return object == null || delete object[toKey(last(path))];
  50444. }
  50445. /**
  50446. * The base implementation of `_.update`.
  50447. *
  50448. * @private
  50449. * @param {Object} object The object to modify.
  50450. * @param {Array|string} path The path of the property to update.
  50451. * @param {Function} updater The function to produce the updated value.
  50452. * @param {Function} [customizer] The function to customize path creation.
  50453. * @returns {Object} Returns `object`.
  50454. */
  50455. function baseUpdate(object, path, updater, customizer) {
  50456. return baseSet(object, path, updater(baseGet(object, path)), customizer);
  50457. }
  50458. /**
  50459. * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
  50460. * without support for iteratee shorthands.
  50461. *
  50462. * @private
  50463. * @param {Array} array The array to query.
  50464. * @param {Function} predicate The function invoked per iteration.
  50465. * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
  50466. * @param {boolean} [fromRight] Specify iterating from right to left.
  50467. * @returns {Array} Returns the slice of `array`.
  50468. */
  50469. function baseWhile(array, predicate, isDrop, fromRight) {
  50470. var length = array.length,
  50471. index = fromRight ? length : -1;
  50472. while ((fromRight ? index-- : ++index < length) &&
  50473. predicate(array[index], index, array)) {}
  50474. return isDrop
  50475. ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
  50476. : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
  50477. }
  50478. /**
  50479. * The base implementation of `wrapperValue` which returns the result of
  50480. * performing a sequence of actions on the unwrapped `value`, where each
  50481. * successive action is supplied the return value of the previous.
  50482. *
  50483. * @private
  50484. * @param {*} value The unwrapped value.
  50485. * @param {Array} actions Actions to perform to resolve the unwrapped value.
  50486. * @returns {*} Returns the resolved value.
  50487. */
  50488. function baseWrapperValue(value, actions) {
  50489. var result = value;
  50490. if (result instanceof LazyWrapper) {
  50491. result = result.value();
  50492. }
  50493. return arrayReduce(actions, function(result, action) {
  50494. return action.func.apply(action.thisArg, arrayPush([result], action.args));
  50495. }, result);
  50496. }
  50497. /**
  50498. * The base implementation of methods like `_.xor`, without support for
  50499. * iteratee shorthands, that accepts an array of arrays to inspect.
  50500. *
  50501. * @private
  50502. * @param {Array} arrays The arrays to inspect.
  50503. * @param {Function} [iteratee] The iteratee invoked per element.
  50504. * @param {Function} [comparator] The comparator invoked per element.
  50505. * @returns {Array} Returns the new array of values.
  50506. */
  50507. function baseXor(arrays, iteratee, comparator) {
  50508. var length = arrays.length;
  50509. if (length < 2) {
  50510. return length ? baseUniq(arrays[0]) : [];
  50511. }
  50512. var index = -1,
  50513. result = Array(length);
  50514. while (++index < length) {
  50515. var array = arrays[index],
  50516. othIndex = -1;
  50517. while (++othIndex < length) {
  50518. if (othIndex != index) {
  50519. result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
  50520. }
  50521. }
  50522. }
  50523. return baseUniq(baseFlatten(result, 1), iteratee, comparator);
  50524. }
  50525. /**
  50526. * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
  50527. *
  50528. * @private
  50529. * @param {Array} props The property identifiers.
  50530. * @param {Array} values The property values.
  50531. * @param {Function} assignFunc The function to assign values.
  50532. * @returns {Object} Returns the new object.
  50533. */
  50534. function baseZipObject(props, values, assignFunc) {
  50535. var index = -1,
  50536. length = props.length,
  50537. valsLength = values.length,
  50538. result = {};
  50539. while (++index < length) {
  50540. var value = index < valsLength ? values[index] : undefined;
  50541. assignFunc(result, props[index], value);
  50542. }
  50543. return result;
  50544. }
  50545. /**
  50546. * Casts `value` to an empty array if it's not an array like object.
  50547. *
  50548. * @private
  50549. * @param {*} value The value to inspect.
  50550. * @returns {Array|Object} Returns the cast array-like object.
  50551. */
  50552. function castArrayLikeObject(value) {
  50553. return isArrayLikeObject(value) ? value : [];
  50554. }
  50555. /**
  50556. * Casts `value` to `identity` if it's not a function.
  50557. *
  50558. * @private
  50559. * @param {*} value The value to inspect.
  50560. * @returns {Function} Returns cast function.
  50561. */
  50562. function castFunction(value) {
  50563. return typeof value == 'function' ? value : identity;
  50564. }
  50565. /**
  50566. * Casts `value` to a path array if it's not one.
  50567. *
  50568. * @private
  50569. * @param {*} value The value to inspect.
  50570. * @param {Object} [object] The object to query keys on.
  50571. * @returns {Array} Returns the cast property path array.
  50572. */
  50573. function castPath(value, object) {
  50574. if (isArray(value)) {
  50575. return value;
  50576. }
  50577. return isKey(value, object) ? [value] : stringToPath(toString(value));
  50578. }
  50579. /**
  50580. * A `baseRest` alias which can be replaced with `identity` by module
  50581. * replacement plugins.
  50582. *
  50583. * @private
  50584. * @type {Function}
  50585. * @param {Function} func The function to apply a rest parameter to.
  50586. * @returns {Function} Returns the new function.
  50587. */
  50588. var castRest = baseRest;
  50589. /**
  50590. * Casts `array` to a slice if it's needed.
  50591. *
  50592. * @private
  50593. * @param {Array} array The array to inspect.
  50594. * @param {number} start The start position.
  50595. * @param {number} [end=array.length] The end position.
  50596. * @returns {Array} Returns the cast slice.
  50597. */
  50598. function castSlice(array, start, end) {
  50599. var length = array.length;
  50600. end = end === undefined ? length : end;
  50601. return (!start && end >= length) ? array : baseSlice(array, start, end);
  50602. }
  50603. /**
  50604. * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
  50605. *
  50606. * @private
  50607. * @param {number|Object} id The timer id or timeout object of the timer to clear.
  50608. */
  50609. var clearTimeout = ctxClearTimeout || function(id) {
  50610. return root.clearTimeout(id);
  50611. };
  50612. /**
  50613. * Creates a clone of `buffer`.
  50614. *
  50615. * @private
  50616. * @param {Buffer} buffer The buffer to clone.
  50617. * @param {boolean} [isDeep] Specify a deep clone.
  50618. * @returns {Buffer} Returns the cloned buffer.
  50619. */
  50620. function cloneBuffer(buffer, isDeep) {
  50621. if (isDeep) {
  50622. return buffer.slice();
  50623. }
  50624. var length = buffer.length,
  50625. result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
  50626. buffer.copy(result);
  50627. return result;
  50628. }
  50629. /**
  50630. * Creates a clone of `arrayBuffer`.
  50631. *
  50632. * @private
  50633. * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
  50634. * @returns {ArrayBuffer} Returns the cloned array buffer.
  50635. */
  50636. function cloneArrayBuffer(arrayBuffer) {
  50637. var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
  50638. new Uint8Array(result).set(new Uint8Array(arrayBuffer));
  50639. return result;
  50640. }
  50641. /**
  50642. * Creates a clone of `dataView`.
  50643. *
  50644. * @private
  50645. * @param {Object} dataView The data view to clone.
  50646. * @param {boolean} [isDeep] Specify a deep clone.
  50647. * @returns {Object} Returns the cloned data view.
  50648. */
  50649. function cloneDataView(dataView, isDeep) {
  50650. var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
  50651. return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
  50652. }
  50653. /**
  50654. * Creates a clone of `regexp`.
  50655. *
  50656. * @private
  50657. * @param {Object} regexp The regexp to clone.
  50658. * @returns {Object} Returns the cloned regexp.
  50659. */
  50660. function cloneRegExp(regexp) {
  50661. var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
  50662. result.lastIndex = regexp.lastIndex;
  50663. return result;
  50664. }
  50665. /**
  50666. * Creates a clone of the `symbol` object.
  50667. *
  50668. * @private
  50669. * @param {Object} symbol The symbol object to clone.
  50670. * @returns {Object} Returns the cloned symbol object.
  50671. */
  50672. function cloneSymbol(symbol) {
  50673. return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
  50674. }
  50675. /**
  50676. * Creates a clone of `typedArray`.
  50677. *
  50678. * @private
  50679. * @param {Object} typedArray The typed array to clone.
  50680. * @param {boolean} [isDeep] Specify a deep clone.
  50681. * @returns {Object} Returns the cloned typed array.
  50682. */
  50683. function cloneTypedArray(typedArray, isDeep) {
  50684. var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
  50685. return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
  50686. }
  50687. /**
  50688. * Compares values to sort them in ascending order.
  50689. *
  50690. * @private
  50691. * @param {*} value The value to compare.
  50692. * @param {*} other The other value to compare.
  50693. * @returns {number} Returns the sort order indicator for `value`.
  50694. */
  50695. function compareAscending(value, other) {
  50696. if (value !== other) {
  50697. var valIsDefined = value !== undefined,
  50698. valIsNull = value === null,
  50699. valIsReflexive = value === value,
  50700. valIsSymbol = isSymbol(value);
  50701. var othIsDefined = other !== undefined,
  50702. othIsNull = other === null,
  50703. othIsReflexive = other === other,
  50704. othIsSymbol = isSymbol(other);
  50705. if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
  50706. (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
  50707. (valIsNull && othIsDefined && othIsReflexive) ||
  50708. (!valIsDefined && othIsReflexive) ||
  50709. !valIsReflexive) {
  50710. return 1;
  50711. }
  50712. if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
  50713. (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
  50714. (othIsNull && valIsDefined && valIsReflexive) ||
  50715. (!othIsDefined && valIsReflexive) ||
  50716. !othIsReflexive) {
  50717. return -1;
  50718. }
  50719. }
  50720. return 0;
  50721. }
  50722. /**
  50723. * Used by `_.orderBy` to compare multiple properties of a value to another
  50724. * and stable sort them.
  50725. *
  50726. * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
  50727. * specify an order of "desc" for descending or "asc" for ascending sort order
  50728. * of corresponding values.
  50729. *
  50730. * @private
  50731. * @param {Object} object The object to compare.
  50732. * @param {Object} other The other object to compare.
  50733. * @param {boolean[]|string[]} orders The order to sort by for each property.
  50734. * @returns {number} Returns the sort order indicator for `object`.
  50735. */
  50736. function compareMultiple(object, other, orders) {
  50737. var index = -1,
  50738. objCriteria = object.criteria,
  50739. othCriteria = other.criteria,
  50740. length = objCriteria.length,
  50741. ordersLength = orders.length;
  50742. while (++index < length) {
  50743. var result = compareAscending(objCriteria[index], othCriteria[index]);
  50744. if (result) {
  50745. if (index >= ordersLength) {
  50746. return result;
  50747. }
  50748. var order = orders[index];
  50749. return result * (order == 'desc' ? -1 : 1);
  50750. }
  50751. }
  50752. // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
  50753. // that causes it, under certain circumstances, to provide the same value for
  50754. // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
  50755. // for more details.
  50756. //
  50757. // This also ensures a stable sort in V8 and other engines.
  50758. // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
  50759. return object.index - other.index;
  50760. }
  50761. /**
  50762. * Creates an array that is the composition of partially applied arguments,
  50763. * placeholders, and provided arguments into a single array of arguments.
  50764. *
  50765. * @private
  50766. * @param {Array} args The provided arguments.
  50767. * @param {Array} partials The arguments to prepend to those provided.
  50768. * @param {Array} holders The `partials` placeholder indexes.
  50769. * @params {boolean} [isCurried] Specify composing for a curried function.
  50770. * @returns {Array} Returns the new array of composed arguments.
  50771. */
  50772. function composeArgs(args, partials, holders, isCurried) {
  50773. var argsIndex = -1,
  50774. argsLength = args.length,
  50775. holdersLength = holders.length,
  50776. leftIndex = -1,
  50777. leftLength = partials.length,
  50778. rangeLength = nativeMax(argsLength - holdersLength, 0),
  50779. result = Array(leftLength + rangeLength),
  50780. isUncurried = !isCurried;
  50781. while (++leftIndex < leftLength) {
  50782. result[leftIndex] = partials[leftIndex];
  50783. }
  50784. while (++argsIndex < holdersLength) {
  50785. if (isUncurried || argsIndex < argsLength) {
  50786. result[holders[argsIndex]] = args[argsIndex];
  50787. }
  50788. }
  50789. while (rangeLength--) {
  50790. result[leftIndex++] = args[argsIndex++];
  50791. }
  50792. return result;
  50793. }
  50794. /**
  50795. * This function is like `composeArgs` except that the arguments composition
  50796. * is tailored for `_.partialRight`.
  50797. *
  50798. * @private
  50799. * @param {Array} args The provided arguments.
  50800. * @param {Array} partials The arguments to append to those provided.
  50801. * @param {Array} holders The `partials` placeholder indexes.
  50802. * @params {boolean} [isCurried] Specify composing for a curried function.
  50803. * @returns {Array} Returns the new array of composed arguments.
  50804. */
  50805. function composeArgsRight(args, partials, holders, isCurried) {
  50806. var argsIndex = -1,
  50807. argsLength = args.length,
  50808. holdersIndex = -1,
  50809. holdersLength = holders.length,
  50810. rightIndex = -1,
  50811. rightLength = partials.length,
  50812. rangeLength = nativeMax(argsLength - holdersLength, 0),
  50813. result = Array(rangeLength + rightLength),
  50814. isUncurried = !isCurried;
  50815. while (++argsIndex < rangeLength) {
  50816. result[argsIndex] = args[argsIndex];
  50817. }
  50818. var offset = argsIndex;
  50819. while (++rightIndex < rightLength) {
  50820. result[offset + rightIndex] = partials[rightIndex];
  50821. }
  50822. while (++holdersIndex < holdersLength) {
  50823. if (isUncurried || argsIndex < argsLength) {
  50824. result[offset + holders[holdersIndex]] = args[argsIndex++];
  50825. }
  50826. }
  50827. return result;
  50828. }
  50829. /**
  50830. * Copies the values of `source` to `array`.
  50831. *
  50832. * @private
  50833. * @param {Array} source The array to copy values from.
  50834. * @param {Array} [array=[]] The array to copy values to.
  50835. * @returns {Array} Returns `array`.
  50836. */
  50837. function copyArray(source, array) {
  50838. var index = -1,
  50839. length = source.length;
  50840. array || (array = Array(length));
  50841. while (++index < length) {
  50842. array[index] = source[index];
  50843. }
  50844. return array;
  50845. }
  50846. /**
  50847. * Copies properties of `source` to `object`.
  50848. *
  50849. * @private
  50850. * @param {Object} source The object to copy properties from.
  50851. * @param {Array} props The property identifiers to copy.
  50852. * @param {Object} [object={}] The object to copy properties to.
  50853. * @param {Function} [customizer] The function to customize copied values.
  50854. * @returns {Object} Returns `object`.
  50855. */
  50856. function copyObject(source, props, object, customizer) {
  50857. var isNew = !object;
  50858. object || (object = {});
  50859. var index = -1,
  50860. length = props.length;
  50861. while (++index < length) {
  50862. var key = props[index];
  50863. var newValue = customizer
  50864. ? customizer(object[key], source[key], key, object, source)
  50865. : undefined;
  50866. if (newValue === undefined) {
  50867. newValue = source[key];
  50868. }
  50869. if (isNew) {
  50870. baseAssignValue(object, key, newValue);
  50871. } else {
  50872. assignValue(object, key, newValue);
  50873. }
  50874. }
  50875. return object;
  50876. }
  50877. /**
  50878. * Copies own symbols of `source` to `object`.
  50879. *
  50880. * @private
  50881. * @param {Object} source The object to copy symbols from.
  50882. * @param {Object} [object={}] The object to copy symbols to.
  50883. * @returns {Object} Returns `object`.
  50884. */
  50885. function copySymbols(source, object) {
  50886. return copyObject(source, getSymbols(source), object);
  50887. }
  50888. /**
  50889. * Copies own and inherited symbols of `source` to `object`.
  50890. *
  50891. * @private
  50892. * @param {Object} source The object to copy symbols from.
  50893. * @param {Object} [object={}] The object to copy symbols to.
  50894. * @returns {Object} Returns `object`.
  50895. */
  50896. function copySymbolsIn(source, object) {
  50897. return copyObject(source, getSymbolsIn(source), object);
  50898. }
  50899. /**
  50900. * Creates a function like `_.groupBy`.
  50901. *
  50902. * @private
  50903. * @param {Function} setter The function to set accumulator values.
  50904. * @param {Function} [initializer] The accumulator object initializer.
  50905. * @returns {Function} Returns the new aggregator function.
  50906. */
  50907. function createAggregator(setter, initializer) {
  50908. return function(collection, iteratee) {
  50909. var func = isArray(collection) ? arrayAggregator : baseAggregator,
  50910. accumulator = initializer ? initializer() : {};
  50911. return func(collection, setter, getIteratee(iteratee, 2), accumulator);
  50912. };
  50913. }
  50914. /**
  50915. * Creates a function like `_.assign`.
  50916. *
  50917. * @private
  50918. * @param {Function} assigner The function to assign values.
  50919. * @returns {Function} Returns the new assigner function.
  50920. */
  50921. function createAssigner(assigner) {
  50922. return baseRest(function(object, sources) {
  50923. var index = -1,
  50924. length = sources.length,
  50925. customizer = length > 1 ? sources[length - 1] : undefined,
  50926. guard = length > 2 ? sources[2] : undefined;
  50927. customizer = (assigner.length > 3 && typeof customizer == 'function')
  50928. ? (length--, customizer)
  50929. : undefined;
  50930. if (guard && isIterateeCall(sources[0], sources[1], guard)) {
  50931. customizer = length < 3 ? undefined : customizer;
  50932. length = 1;
  50933. }
  50934. object = Object(object);
  50935. while (++index < length) {
  50936. var source = sources[index];
  50937. if (source) {
  50938. assigner(object, source, index, customizer);
  50939. }
  50940. }
  50941. return object;
  50942. });
  50943. }
  50944. /**
  50945. * Creates a `baseEach` or `baseEachRight` function.
  50946. *
  50947. * @private
  50948. * @param {Function} eachFunc The function to iterate over a collection.
  50949. * @param {boolean} [fromRight] Specify iterating from right to left.
  50950. * @returns {Function} Returns the new base function.
  50951. */
  50952. function createBaseEach(eachFunc, fromRight) {
  50953. return function(collection, iteratee) {
  50954. if (collection == null) {
  50955. return collection;
  50956. }
  50957. if (!isArrayLike(collection)) {
  50958. return eachFunc(collection, iteratee);
  50959. }
  50960. var length = collection.length,
  50961. index = fromRight ? length : -1,
  50962. iterable = Object(collection);
  50963. while ((fromRight ? index-- : ++index < length)) {
  50964. if (iteratee(iterable[index], index, iterable) === false) {
  50965. break;
  50966. }
  50967. }
  50968. return collection;
  50969. };
  50970. }
  50971. /**
  50972. * Creates a base function for methods like `_.forIn` and `_.forOwn`.
  50973. *
  50974. * @private
  50975. * @param {boolean} [fromRight] Specify iterating from right to left.
  50976. * @returns {Function} Returns the new base function.
  50977. */
  50978. function createBaseFor(fromRight) {
  50979. return function(object, iteratee, keysFunc) {
  50980. var index = -1,
  50981. iterable = Object(object),
  50982. props = keysFunc(object),
  50983. length = props.length;
  50984. while (length--) {
  50985. var key = props[fromRight ? length : ++index];
  50986. if (iteratee(iterable[key], key, iterable) === false) {
  50987. break;
  50988. }
  50989. }
  50990. return object;
  50991. };
  50992. }
  50993. /**
  50994. * Creates a function that wraps `func` to invoke it with the optional `this`
  50995. * binding of `thisArg`.
  50996. *
  50997. * @private
  50998. * @param {Function} func The function to wrap.
  50999. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  51000. * @param {*} [thisArg] The `this` binding of `func`.
  51001. * @returns {Function} Returns the new wrapped function.
  51002. */
  51003. function createBind(func, bitmask, thisArg) {
  51004. var isBind = bitmask & WRAP_BIND_FLAG,
  51005. Ctor = createCtor(func);
  51006. function wrapper() {
  51007. var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
  51008. return fn.apply(isBind ? thisArg : this, arguments);
  51009. }
  51010. return wrapper;
  51011. }
  51012. /**
  51013. * Creates a function like `_.lowerFirst`.
  51014. *
  51015. * @private
  51016. * @param {string} methodName The name of the `String` case method to use.
  51017. * @returns {Function} Returns the new case function.
  51018. */
  51019. function createCaseFirst(methodName) {
  51020. return function(string) {
  51021. string = toString(string);
  51022. var strSymbols = hasUnicode(string)
  51023. ? stringToArray(string)
  51024. : undefined;
  51025. var chr = strSymbols
  51026. ? strSymbols[0]
  51027. : string.charAt(0);
  51028. var trailing = strSymbols
  51029. ? castSlice(strSymbols, 1).join('')
  51030. : string.slice(1);
  51031. return chr[methodName]() + trailing;
  51032. };
  51033. }
  51034. /**
  51035. * Creates a function like `_.camelCase`.
  51036. *
  51037. * @private
  51038. * @param {Function} callback The function to combine each word.
  51039. * @returns {Function} Returns the new compounder function.
  51040. */
  51041. function createCompounder(callback) {
  51042. return function(string) {
  51043. return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
  51044. };
  51045. }
  51046. /**
  51047. * Creates a function that produces an instance of `Ctor` regardless of
  51048. * whether it was invoked as part of a `new` expression or by `call` or `apply`.
  51049. *
  51050. * @private
  51051. * @param {Function} Ctor The constructor to wrap.
  51052. * @returns {Function} Returns the new wrapped function.
  51053. */
  51054. function createCtor(Ctor) {
  51055. return function() {
  51056. // Use a `switch` statement to work with class constructors. See
  51057. // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
  51058. // for more details.
  51059. var args = arguments;
  51060. switch (args.length) {
  51061. case 0: return new Ctor;
  51062. case 1: return new Ctor(args[0]);
  51063. case 2: return new Ctor(args[0], args[1]);
  51064. case 3: return new Ctor(args[0], args[1], args[2]);
  51065. case 4: return new Ctor(args[0], args[1], args[2], args[3]);
  51066. case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
  51067. case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
  51068. case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
  51069. }
  51070. var thisBinding = baseCreate(Ctor.prototype),
  51071. result = Ctor.apply(thisBinding, args);
  51072. // Mimic the constructor's `return` behavior.
  51073. // See https://es5.github.io/#x13.2.2 for more details.
  51074. return isObject(result) ? result : thisBinding;
  51075. };
  51076. }
  51077. /**
  51078. * Creates a function that wraps `func` to enable currying.
  51079. *
  51080. * @private
  51081. * @param {Function} func The function to wrap.
  51082. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  51083. * @param {number} arity The arity of `func`.
  51084. * @returns {Function} Returns the new wrapped function.
  51085. */
  51086. function createCurry(func, bitmask, arity) {
  51087. var Ctor = createCtor(func);
  51088. function wrapper() {
  51089. var length = arguments.length,
  51090. args = Array(length),
  51091. index = length,
  51092. placeholder = getHolder(wrapper);
  51093. while (index--) {
  51094. args[index] = arguments[index];
  51095. }
  51096. var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
  51097. ? []
  51098. : replaceHolders(args, placeholder);
  51099. length -= holders.length;
  51100. if (length < arity) {
  51101. return createRecurry(
  51102. func, bitmask, createHybrid, wrapper.placeholder, undefined,
  51103. args, holders, undefined, undefined, arity - length);
  51104. }
  51105. var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
  51106. return apply(fn, this, args);
  51107. }
  51108. return wrapper;
  51109. }
  51110. /**
  51111. * Creates a `_.find` or `_.findLast` function.
  51112. *
  51113. * @private
  51114. * @param {Function} findIndexFunc The function to find the collection index.
  51115. * @returns {Function} Returns the new find function.
  51116. */
  51117. function createFind(findIndexFunc) {
  51118. return function(collection, predicate, fromIndex) {
  51119. var iterable = Object(collection);
  51120. if (!isArrayLike(collection)) {
  51121. var iteratee = getIteratee(predicate, 3);
  51122. collection = keys(collection);
  51123. predicate = function(key) { return iteratee(iterable[key], key, iterable); };
  51124. }
  51125. var index = findIndexFunc(collection, predicate, fromIndex);
  51126. return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
  51127. };
  51128. }
  51129. /**
  51130. * Creates a `_.flow` or `_.flowRight` function.
  51131. *
  51132. * @private
  51133. * @param {boolean} [fromRight] Specify iterating from right to left.
  51134. * @returns {Function} Returns the new flow function.
  51135. */
  51136. function createFlow(fromRight) {
  51137. return flatRest(function(funcs) {
  51138. var length = funcs.length,
  51139. index = length,
  51140. prereq = LodashWrapper.prototype.thru;
  51141. if (fromRight) {
  51142. funcs.reverse();
  51143. }
  51144. while (index--) {
  51145. var func = funcs[index];
  51146. if (typeof func != 'function') {
  51147. throw new TypeError(FUNC_ERROR_TEXT);
  51148. }
  51149. if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
  51150. var wrapper = new LodashWrapper([], true);
  51151. }
  51152. }
  51153. index = wrapper ? index : length;
  51154. while (++index < length) {
  51155. func = funcs[index];
  51156. var funcName = getFuncName(func),
  51157. data = funcName == 'wrapper' ? getData(func) : undefined;
  51158. if (data && isLaziable(data[0]) &&
  51159. data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
  51160. !data[4].length && data[9] == 1
  51161. ) {
  51162. wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
  51163. } else {
  51164. wrapper = (func.length == 1 && isLaziable(func))
  51165. ? wrapper[funcName]()
  51166. : wrapper.thru(func);
  51167. }
  51168. }
  51169. return function() {
  51170. var args = arguments,
  51171. value = args[0];
  51172. if (wrapper && args.length == 1 && isArray(value)) {
  51173. return wrapper.plant(value).value();
  51174. }
  51175. var index = 0,
  51176. result = length ? funcs[index].apply(this, args) : value;
  51177. while (++index < length) {
  51178. result = funcs[index].call(this, result);
  51179. }
  51180. return result;
  51181. };
  51182. });
  51183. }
  51184. /**
  51185. * Creates a function that wraps `func` to invoke it with optional `this`
  51186. * binding of `thisArg`, partial application, and currying.
  51187. *
  51188. * @private
  51189. * @param {Function|string} func The function or method name to wrap.
  51190. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  51191. * @param {*} [thisArg] The `this` binding of `func`.
  51192. * @param {Array} [partials] The arguments to prepend to those provided to
  51193. * the new function.
  51194. * @param {Array} [holders] The `partials` placeholder indexes.
  51195. * @param {Array} [partialsRight] The arguments to append to those provided
  51196. * to the new function.
  51197. * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
  51198. * @param {Array} [argPos] The argument positions of the new function.
  51199. * @param {number} [ary] The arity cap of `func`.
  51200. * @param {number} [arity] The arity of `func`.
  51201. * @returns {Function} Returns the new wrapped function.
  51202. */
  51203. function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
  51204. var isAry = bitmask & WRAP_ARY_FLAG,
  51205. isBind = bitmask & WRAP_BIND_FLAG,
  51206. isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
  51207. isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
  51208. isFlip = bitmask & WRAP_FLIP_FLAG,
  51209. Ctor = isBindKey ? undefined : createCtor(func);
  51210. function wrapper() {
  51211. var length = arguments.length,
  51212. args = Array(length),
  51213. index = length;
  51214. while (index--) {
  51215. args[index] = arguments[index];
  51216. }
  51217. if (isCurried) {
  51218. var placeholder = getHolder(wrapper),
  51219. holdersCount = countHolders(args, placeholder);
  51220. }
  51221. if (partials) {
  51222. args = composeArgs(args, partials, holders, isCurried);
  51223. }
  51224. if (partialsRight) {
  51225. args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
  51226. }
  51227. length -= holdersCount;
  51228. if (isCurried && length < arity) {
  51229. var newHolders = replaceHolders(args, placeholder);
  51230. return createRecurry(
  51231. func, bitmask, createHybrid, wrapper.placeholder, thisArg,
  51232. args, newHolders, argPos, ary, arity - length
  51233. );
  51234. }
  51235. var thisBinding = isBind ? thisArg : this,
  51236. fn = isBindKey ? thisBinding[func] : func;
  51237. length = args.length;
  51238. if (argPos) {
  51239. args = reorder(args, argPos);
  51240. } else if (isFlip && length > 1) {
  51241. args.reverse();
  51242. }
  51243. if (isAry && ary < length) {
  51244. args.length = ary;
  51245. }
  51246. if (this && this !== root && this instanceof wrapper) {
  51247. fn = Ctor || createCtor(fn);
  51248. }
  51249. return fn.apply(thisBinding, args);
  51250. }
  51251. return wrapper;
  51252. }
  51253. /**
  51254. * Creates a function like `_.invertBy`.
  51255. *
  51256. * @private
  51257. * @param {Function} setter The function to set accumulator values.
  51258. * @param {Function} toIteratee The function to resolve iteratees.
  51259. * @returns {Function} Returns the new inverter function.
  51260. */
  51261. function createInverter(setter, toIteratee) {
  51262. return function(object, iteratee) {
  51263. return baseInverter(object, setter, toIteratee(iteratee), {});
  51264. };
  51265. }
  51266. /**
  51267. * Creates a function that performs a mathematical operation on two values.
  51268. *
  51269. * @private
  51270. * @param {Function} operator The function to perform the operation.
  51271. * @param {number} [defaultValue] The value used for `undefined` arguments.
  51272. * @returns {Function} Returns the new mathematical operation function.
  51273. */
  51274. function createMathOperation(operator, defaultValue) {
  51275. return function(value, other) {
  51276. var result;
  51277. if (value === undefined && other === undefined) {
  51278. return defaultValue;
  51279. }
  51280. if (value !== undefined) {
  51281. result = value;
  51282. }
  51283. if (other !== undefined) {
  51284. if (result === undefined) {
  51285. return other;
  51286. }
  51287. if (typeof value == 'string' || typeof other == 'string') {
  51288. value = baseToString(value);
  51289. other = baseToString(other);
  51290. } else {
  51291. value = baseToNumber(value);
  51292. other = baseToNumber(other);
  51293. }
  51294. result = operator(value, other);
  51295. }
  51296. return result;
  51297. };
  51298. }
  51299. /**
  51300. * Creates a function like `_.over`.
  51301. *
  51302. * @private
  51303. * @param {Function} arrayFunc The function to iterate over iteratees.
  51304. * @returns {Function} Returns the new over function.
  51305. */
  51306. function createOver(arrayFunc) {
  51307. return flatRest(function(iteratees) {
  51308. iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
  51309. return baseRest(function(args) {
  51310. var thisArg = this;
  51311. return arrayFunc(iteratees, function(iteratee) {
  51312. return apply(iteratee, thisArg, args);
  51313. });
  51314. });
  51315. });
  51316. }
  51317. /**
  51318. * Creates the padding for `string` based on `length`. The `chars` string
  51319. * is truncated if the number of characters exceeds `length`.
  51320. *
  51321. * @private
  51322. * @param {number} length The padding length.
  51323. * @param {string} [chars=' '] The string used as padding.
  51324. * @returns {string} Returns the padding for `string`.
  51325. */
  51326. function createPadding(length, chars) {
  51327. chars = chars === undefined ? ' ' : baseToString(chars);
  51328. var charsLength = chars.length;
  51329. if (charsLength < 2) {
  51330. return charsLength ? baseRepeat(chars, length) : chars;
  51331. }
  51332. var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
  51333. return hasUnicode(chars)
  51334. ? castSlice(stringToArray(result), 0, length).join('')
  51335. : result.slice(0, length);
  51336. }
  51337. /**
  51338. * Creates a function that wraps `func` to invoke it with the `this` binding
  51339. * of `thisArg` and `partials` prepended to the arguments it receives.
  51340. *
  51341. * @private
  51342. * @param {Function} func The function to wrap.
  51343. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  51344. * @param {*} thisArg The `this` binding of `func`.
  51345. * @param {Array} partials The arguments to prepend to those provided to
  51346. * the new function.
  51347. * @returns {Function} Returns the new wrapped function.
  51348. */
  51349. function createPartial(func, bitmask, thisArg, partials) {
  51350. var isBind = bitmask & WRAP_BIND_FLAG,
  51351. Ctor = createCtor(func);
  51352. function wrapper() {
  51353. var argsIndex = -1,
  51354. argsLength = arguments.length,
  51355. leftIndex = -1,
  51356. leftLength = partials.length,
  51357. args = Array(leftLength + argsLength),
  51358. fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
  51359. while (++leftIndex < leftLength) {
  51360. args[leftIndex] = partials[leftIndex];
  51361. }
  51362. while (argsLength--) {
  51363. args[leftIndex++] = arguments[++argsIndex];
  51364. }
  51365. return apply(fn, isBind ? thisArg : this, args);
  51366. }
  51367. return wrapper;
  51368. }
  51369. /**
  51370. * Creates a `_.range` or `_.rangeRight` function.
  51371. *
  51372. * @private
  51373. * @param {boolean} [fromRight] Specify iterating from right to left.
  51374. * @returns {Function} Returns the new range function.
  51375. */
  51376. function createRange(fromRight) {
  51377. return function(start, end, step) {
  51378. if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
  51379. end = step = undefined;
  51380. }
  51381. // Ensure the sign of `-0` is preserved.
  51382. start = toFinite(start);
  51383. if (end === undefined) {
  51384. end = start;
  51385. start = 0;
  51386. } else {
  51387. end = toFinite(end);
  51388. }
  51389. step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
  51390. return baseRange(start, end, step, fromRight);
  51391. };
  51392. }
  51393. /**
  51394. * Creates a function that performs a relational operation on two values.
  51395. *
  51396. * @private
  51397. * @param {Function} operator The function to perform the operation.
  51398. * @returns {Function} Returns the new relational operation function.
  51399. */
  51400. function createRelationalOperation(operator) {
  51401. return function(value, other) {
  51402. if (!(typeof value == 'string' && typeof other == 'string')) {
  51403. value = toNumber(value);
  51404. other = toNumber(other);
  51405. }
  51406. return operator(value, other);
  51407. };
  51408. }
  51409. /**
  51410. * Creates a function that wraps `func` to continue currying.
  51411. *
  51412. * @private
  51413. * @param {Function} func The function to wrap.
  51414. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  51415. * @param {Function} wrapFunc The function to create the `func` wrapper.
  51416. * @param {*} placeholder The placeholder value.
  51417. * @param {*} [thisArg] The `this` binding of `func`.
  51418. * @param {Array} [partials] The arguments to prepend to those provided to
  51419. * the new function.
  51420. * @param {Array} [holders] The `partials` placeholder indexes.
  51421. * @param {Array} [argPos] The argument positions of the new function.
  51422. * @param {number} [ary] The arity cap of `func`.
  51423. * @param {number} [arity] The arity of `func`.
  51424. * @returns {Function} Returns the new wrapped function.
  51425. */
  51426. function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
  51427. var isCurry = bitmask & WRAP_CURRY_FLAG,
  51428. newHolders = isCurry ? holders : undefined,
  51429. newHoldersRight = isCurry ? undefined : holders,
  51430. newPartials = isCurry ? partials : undefined,
  51431. newPartialsRight = isCurry ? undefined : partials;
  51432. bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
  51433. bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
  51434. if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
  51435. bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
  51436. }
  51437. var newData = [
  51438. func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
  51439. newHoldersRight, argPos, ary, arity
  51440. ];
  51441. var result = wrapFunc.apply(undefined, newData);
  51442. if (isLaziable(func)) {
  51443. setData(result, newData);
  51444. }
  51445. result.placeholder = placeholder;
  51446. return setWrapToString(result, func, bitmask);
  51447. }
  51448. /**
  51449. * Creates a function like `_.round`.
  51450. *
  51451. * @private
  51452. * @param {string} methodName The name of the `Math` method to use when rounding.
  51453. * @returns {Function} Returns the new round function.
  51454. */
  51455. function createRound(methodName) {
  51456. var func = Math[methodName];
  51457. return function(number, precision) {
  51458. number = toNumber(number);
  51459. precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
  51460. if (precision && nativeIsFinite(number)) {
  51461. // Shift with exponential notation to avoid floating-point issues.
  51462. // See [MDN](https://mdn.io/round#Examples) for more details.
  51463. var pair = (toString(number) + 'e').split('e'),
  51464. value = func(pair[0] + 'e' + (+pair[1] + precision));
  51465. pair = (toString(value) + 'e').split('e');
  51466. return +(pair[0] + 'e' + (+pair[1] - precision));
  51467. }
  51468. return func(number);
  51469. };
  51470. }
  51471. /**
  51472. * Creates a set object of `values`.
  51473. *
  51474. * @private
  51475. * @param {Array} values The values to add to the set.
  51476. * @returns {Object} Returns the new set.
  51477. */
  51478. var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
  51479. return new Set(values);
  51480. };
  51481. /**
  51482. * Creates a `_.toPairs` or `_.toPairsIn` function.
  51483. *
  51484. * @private
  51485. * @param {Function} keysFunc The function to get the keys of a given object.
  51486. * @returns {Function} Returns the new pairs function.
  51487. */
  51488. function createToPairs(keysFunc) {
  51489. return function(object) {
  51490. var tag = getTag(object);
  51491. if (tag == mapTag) {
  51492. return mapToArray(object);
  51493. }
  51494. if (tag == setTag) {
  51495. return setToPairs(object);
  51496. }
  51497. return baseToPairs(object, keysFunc(object));
  51498. };
  51499. }
  51500. /**
  51501. * Creates a function that either curries or invokes `func` with optional
  51502. * `this` binding and partially applied arguments.
  51503. *
  51504. * @private
  51505. * @param {Function|string} func The function or method name to wrap.
  51506. * @param {number} bitmask The bitmask flags.
  51507. * 1 - `_.bind`
  51508. * 2 - `_.bindKey`
  51509. * 4 - `_.curry` or `_.curryRight` of a bound function
  51510. * 8 - `_.curry`
  51511. * 16 - `_.curryRight`
  51512. * 32 - `_.partial`
  51513. * 64 - `_.partialRight`
  51514. * 128 - `_.rearg`
  51515. * 256 - `_.ary`
  51516. * 512 - `_.flip`
  51517. * @param {*} [thisArg] The `this` binding of `func`.
  51518. * @param {Array} [partials] The arguments to be partially applied.
  51519. * @param {Array} [holders] The `partials` placeholder indexes.
  51520. * @param {Array} [argPos] The argument positions of the new function.
  51521. * @param {number} [ary] The arity cap of `func`.
  51522. * @param {number} [arity] The arity of `func`.
  51523. * @returns {Function} Returns the new wrapped function.
  51524. */
  51525. function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
  51526. var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
  51527. if (!isBindKey && typeof func != 'function') {
  51528. throw new TypeError(FUNC_ERROR_TEXT);
  51529. }
  51530. var length = partials ? partials.length : 0;
  51531. if (!length) {
  51532. bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
  51533. partials = holders = undefined;
  51534. }
  51535. ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
  51536. arity = arity === undefined ? arity : toInteger(arity);
  51537. length -= holders ? holders.length : 0;
  51538. if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
  51539. var partialsRight = partials,
  51540. holdersRight = holders;
  51541. partials = holders = undefined;
  51542. }
  51543. var data = isBindKey ? undefined : getData(func);
  51544. var newData = [
  51545. func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
  51546. argPos, ary, arity
  51547. ];
  51548. if (data) {
  51549. mergeData(newData, data);
  51550. }
  51551. func = newData[0];
  51552. bitmask = newData[1];
  51553. thisArg = newData[2];
  51554. partials = newData[3];
  51555. holders = newData[4];
  51556. arity = newData[9] = newData[9] === undefined
  51557. ? (isBindKey ? 0 : func.length)
  51558. : nativeMax(newData[9] - length, 0);
  51559. if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
  51560. bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
  51561. }
  51562. if (!bitmask || bitmask == WRAP_BIND_FLAG) {
  51563. var result = createBind(func, bitmask, thisArg);
  51564. } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
  51565. result = createCurry(func, bitmask, arity);
  51566. } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
  51567. result = createPartial(func, bitmask, thisArg, partials);
  51568. } else {
  51569. result = createHybrid.apply(undefined, newData);
  51570. }
  51571. var setter = data ? baseSetData : setData;
  51572. return setWrapToString(setter(result, newData), func, bitmask);
  51573. }
  51574. /**
  51575. * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
  51576. * of source objects to the destination object for all destination properties
  51577. * that resolve to `undefined`.
  51578. *
  51579. * @private
  51580. * @param {*} objValue The destination value.
  51581. * @param {*} srcValue The source value.
  51582. * @param {string} key The key of the property to assign.
  51583. * @param {Object} object The parent object of `objValue`.
  51584. * @returns {*} Returns the value to assign.
  51585. */
  51586. function customDefaultsAssignIn(objValue, srcValue, key, object) {
  51587. if (objValue === undefined ||
  51588. (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
  51589. return srcValue;
  51590. }
  51591. return objValue;
  51592. }
  51593. /**
  51594. * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
  51595. * objects into destination objects that are passed thru.
  51596. *
  51597. * @private
  51598. * @param {*} objValue The destination value.
  51599. * @param {*} srcValue The source value.
  51600. * @param {string} key The key of the property to merge.
  51601. * @param {Object} object The parent object of `objValue`.
  51602. * @param {Object} source The parent object of `srcValue`.
  51603. * @param {Object} [stack] Tracks traversed source values and their merged
  51604. * counterparts.
  51605. * @returns {*} Returns the value to assign.
  51606. */
  51607. function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
  51608. if (isObject(objValue) && isObject(srcValue)) {
  51609. // Recursively merge objects and arrays (susceptible to call stack limits).
  51610. stack.set(srcValue, objValue);
  51611. baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
  51612. stack['delete'](srcValue);
  51613. }
  51614. return objValue;
  51615. }
  51616. /**
  51617. * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
  51618. * objects.
  51619. *
  51620. * @private
  51621. * @param {*} value The value to inspect.
  51622. * @param {string} key The key of the property to inspect.
  51623. * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
  51624. */
  51625. function customOmitClone(value) {
  51626. return isPlainObject(value) ? undefined : value;
  51627. }
  51628. /**
  51629. * A specialized version of `baseIsEqualDeep` for arrays with support for
  51630. * partial deep comparisons.
  51631. *
  51632. * @private
  51633. * @param {Array} array The array to compare.
  51634. * @param {Array} other The other array to compare.
  51635. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  51636. * @param {Function} customizer The function to customize comparisons.
  51637. * @param {Function} equalFunc The function to determine equivalents of values.
  51638. * @param {Object} stack Tracks traversed `array` and `other` objects.
  51639. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
  51640. */
  51641. function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
  51642. var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
  51643. arrLength = array.length,
  51644. othLength = other.length;
  51645. if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
  51646. return false;
  51647. }
  51648. // Check that cyclic values are equal.
  51649. var arrStacked = stack.get(array);
  51650. var othStacked = stack.get(other);
  51651. if (arrStacked && othStacked) {
  51652. return arrStacked == other && othStacked == array;
  51653. }
  51654. var index = -1,
  51655. result = true,
  51656. seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
  51657. stack.set(array, other);
  51658. stack.set(other, array);
  51659. // Ignore non-index properties.
  51660. while (++index < arrLength) {
  51661. var arrValue = array[index],
  51662. othValue = other[index];
  51663. if (customizer) {
  51664. var compared = isPartial
  51665. ? customizer(othValue, arrValue, index, other, array, stack)
  51666. : customizer(arrValue, othValue, index, array, other, stack);
  51667. }
  51668. if (compared !== undefined) {
  51669. if (compared) {
  51670. continue;
  51671. }
  51672. result = false;
  51673. break;
  51674. }
  51675. // Recursively compare arrays (susceptible to call stack limits).
  51676. if (seen) {
  51677. if (!arraySome(other, function(othValue, othIndex) {
  51678. if (!cacheHas(seen, othIndex) &&
  51679. (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
  51680. return seen.push(othIndex);
  51681. }
  51682. })) {
  51683. result = false;
  51684. break;
  51685. }
  51686. } else if (!(
  51687. arrValue === othValue ||
  51688. equalFunc(arrValue, othValue, bitmask, customizer, stack)
  51689. )) {
  51690. result = false;
  51691. break;
  51692. }
  51693. }
  51694. stack['delete'](array);
  51695. stack['delete'](other);
  51696. return result;
  51697. }
  51698. /**
  51699. * A specialized version of `baseIsEqualDeep` for comparing objects of
  51700. * the same `toStringTag`.
  51701. *
  51702. * **Note:** This function only supports comparing values with tags of
  51703. * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
  51704. *
  51705. * @private
  51706. * @param {Object} object The object to compare.
  51707. * @param {Object} other The other object to compare.
  51708. * @param {string} tag The `toStringTag` of the objects to compare.
  51709. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  51710. * @param {Function} customizer The function to customize comparisons.
  51711. * @param {Function} equalFunc The function to determine equivalents of values.
  51712. * @param {Object} stack Tracks traversed `object` and `other` objects.
  51713. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  51714. */
  51715. function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
  51716. switch (tag) {
  51717. case dataViewTag:
  51718. if ((object.byteLength != other.byteLength) ||
  51719. (object.byteOffset != other.byteOffset)) {
  51720. return false;
  51721. }
  51722. object = object.buffer;
  51723. other = other.buffer;
  51724. case arrayBufferTag:
  51725. if ((object.byteLength != other.byteLength) ||
  51726. !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
  51727. return false;
  51728. }
  51729. return true;
  51730. case boolTag:
  51731. case dateTag:
  51732. case numberTag:
  51733. // Coerce booleans to `1` or `0` and dates to milliseconds.
  51734. // Invalid dates are coerced to `NaN`.
  51735. return eq(+object, +other);
  51736. case errorTag:
  51737. return object.name == other.name && object.message == other.message;
  51738. case regexpTag:
  51739. case stringTag:
  51740. // Coerce regexes to strings and treat strings, primitives and objects,
  51741. // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
  51742. // for more details.
  51743. return object == (other + '');
  51744. case mapTag:
  51745. var convert = mapToArray;
  51746. case setTag:
  51747. var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
  51748. convert || (convert = setToArray);
  51749. if (object.size != other.size && !isPartial) {
  51750. return false;
  51751. }
  51752. // Assume cyclic values are equal.
  51753. var stacked = stack.get(object);
  51754. if (stacked) {
  51755. return stacked == other;
  51756. }
  51757. bitmask |= COMPARE_UNORDERED_FLAG;
  51758. // Recursively compare objects (susceptible to call stack limits).
  51759. stack.set(object, other);
  51760. var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
  51761. stack['delete'](object);
  51762. return result;
  51763. case symbolTag:
  51764. if (symbolValueOf) {
  51765. return symbolValueOf.call(object) == symbolValueOf.call(other);
  51766. }
  51767. }
  51768. return false;
  51769. }
  51770. /**
  51771. * A specialized version of `baseIsEqualDeep` for objects with support for
  51772. * partial deep comparisons.
  51773. *
  51774. * @private
  51775. * @param {Object} object The object to compare.
  51776. * @param {Object} other The other object to compare.
  51777. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
  51778. * @param {Function} customizer The function to customize comparisons.
  51779. * @param {Function} equalFunc The function to determine equivalents of values.
  51780. * @param {Object} stack Tracks traversed `object` and `other` objects.
  51781. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
  51782. */
  51783. function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
  51784. var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
  51785. objProps = getAllKeys(object),
  51786. objLength = objProps.length,
  51787. othProps = getAllKeys(other),
  51788. othLength = othProps.length;
  51789. if (objLength != othLength && !isPartial) {
  51790. return false;
  51791. }
  51792. var index = objLength;
  51793. while (index--) {
  51794. var key = objProps[index];
  51795. if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
  51796. return false;
  51797. }
  51798. }
  51799. // Check that cyclic values are equal.
  51800. var objStacked = stack.get(object);
  51801. var othStacked = stack.get(other);
  51802. if (objStacked && othStacked) {
  51803. return objStacked == other && othStacked == object;
  51804. }
  51805. var result = true;
  51806. stack.set(object, other);
  51807. stack.set(other, object);
  51808. var skipCtor = isPartial;
  51809. while (++index < objLength) {
  51810. key = objProps[index];
  51811. var objValue = object[key],
  51812. othValue = other[key];
  51813. if (customizer) {
  51814. var compared = isPartial
  51815. ? customizer(othValue, objValue, key, other, object, stack)
  51816. : customizer(objValue, othValue, key, object, other, stack);
  51817. }
  51818. // Recursively compare objects (susceptible to call stack limits).
  51819. if (!(compared === undefined
  51820. ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
  51821. : compared
  51822. )) {
  51823. result = false;
  51824. break;
  51825. }
  51826. skipCtor || (skipCtor = key == 'constructor');
  51827. }
  51828. if (result && !skipCtor) {
  51829. var objCtor = object.constructor,
  51830. othCtor = other.constructor;
  51831. // Non `Object` object instances with different constructors are not equal.
  51832. if (objCtor != othCtor &&
  51833. ('constructor' in object && 'constructor' in other) &&
  51834. !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
  51835. typeof othCtor == 'function' && othCtor instanceof othCtor)) {
  51836. result = false;
  51837. }
  51838. }
  51839. stack['delete'](object);
  51840. stack['delete'](other);
  51841. return result;
  51842. }
  51843. /**
  51844. * A specialized version of `baseRest` which flattens the rest array.
  51845. *
  51846. * @private
  51847. * @param {Function} func The function to apply a rest parameter to.
  51848. * @returns {Function} Returns the new function.
  51849. */
  51850. function flatRest(func) {
  51851. return setToString(overRest(func, undefined, flatten), func + '');
  51852. }
  51853. /**
  51854. * Creates an array of own enumerable property names and symbols of `object`.
  51855. *
  51856. * @private
  51857. * @param {Object} object The object to query.
  51858. * @returns {Array} Returns the array of property names and symbols.
  51859. */
  51860. function getAllKeys(object) {
  51861. return baseGetAllKeys(object, keys, getSymbols);
  51862. }
  51863. /**
  51864. * Creates an array of own and inherited enumerable property names and
  51865. * symbols of `object`.
  51866. *
  51867. * @private
  51868. * @param {Object} object The object to query.
  51869. * @returns {Array} Returns the array of property names and symbols.
  51870. */
  51871. function getAllKeysIn(object) {
  51872. return baseGetAllKeys(object, keysIn, getSymbolsIn);
  51873. }
  51874. /**
  51875. * Gets metadata for `func`.
  51876. *
  51877. * @private
  51878. * @param {Function} func The function to query.
  51879. * @returns {*} Returns the metadata for `func`.
  51880. */
  51881. var getData = !metaMap ? noop : function(func) {
  51882. return metaMap.get(func);
  51883. };
  51884. /**
  51885. * Gets the name of `func`.
  51886. *
  51887. * @private
  51888. * @param {Function} func The function to query.
  51889. * @returns {string} Returns the function name.
  51890. */
  51891. function getFuncName(func) {
  51892. var result = (func.name + ''),
  51893. array = realNames[result],
  51894. length = hasOwnProperty.call(realNames, result) ? array.length : 0;
  51895. while (length--) {
  51896. var data = array[length],
  51897. otherFunc = data.func;
  51898. if (otherFunc == null || otherFunc == func) {
  51899. return data.name;
  51900. }
  51901. }
  51902. return result;
  51903. }
  51904. /**
  51905. * Gets the argument placeholder value for `func`.
  51906. *
  51907. * @private
  51908. * @param {Function} func The function to inspect.
  51909. * @returns {*} Returns the placeholder value.
  51910. */
  51911. function getHolder(func) {
  51912. var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
  51913. return object.placeholder;
  51914. }
  51915. /**
  51916. * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
  51917. * this function returns the custom method, otherwise it returns `baseIteratee`.
  51918. * If arguments are provided, the chosen function is invoked with them and
  51919. * its result is returned.
  51920. *
  51921. * @private
  51922. * @param {*} [value] The value to convert to an iteratee.
  51923. * @param {number} [arity] The arity of the created iteratee.
  51924. * @returns {Function} Returns the chosen function or its result.
  51925. */
  51926. function getIteratee() {
  51927. var result = lodash.iteratee || iteratee;
  51928. result = result === iteratee ? baseIteratee : result;
  51929. return arguments.length ? result(arguments[0], arguments[1]) : result;
  51930. }
  51931. /**
  51932. * Gets the data for `map`.
  51933. *
  51934. * @private
  51935. * @param {Object} map The map to query.
  51936. * @param {string} key The reference key.
  51937. * @returns {*} Returns the map data.
  51938. */
  51939. function getMapData(map, key) {
  51940. var data = map.__data__;
  51941. return isKeyable(key)
  51942. ? data[typeof key == 'string' ? 'string' : 'hash']
  51943. : data.map;
  51944. }
  51945. /**
  51946. * Gets the property names, values, and compare flags of `object`.
  51947. *
  51948. * @private
  51949. * @param {Object} object The object to query.
  51950. * @returns {Array} Returns the match data of `object`.
  51951. */
  51952. function getMatchData(object) {
  51953. var result = keys(object),
  51954. length = result.length;
  51955. while (length--) {
  51956. var key = result[length],
  51957. value = object[key];
  51958. result[length] = [key, value, isStrictComparable(value)];
  51959. }
  51960. return result;
  51961. }
  51962. /**
  51963. * Gets the native function at `key` of `object`.
  51964. *
  51965. * @private
  51966. * @param {Object} object The object to query.
  51967. * @param {string} key The key of the method to get.
  51968. * @returns {*} Returns the function if it's native, else `undefined`.
  51969. */
  51970. function getNative(object, key) {
  51971. var value = getValue(object, key);
  51972. return baseIsNative(value) ? value : undefined;
  51973. }
  51974. /**
  51975. * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
  51976. *
  51977. * @private
  51978. * @param {*} value The value to query.
  51979. * @returns {string} Returns the raw `toStringTag`.
  51980. */
  51981. function getRawTag(value) {
  51982. var isOwn = hasOwnProperty.call(value, symToStringTag),
  51983. tag = value[symToStringTag];
  51984. try {
  51985. value[symToStringTag] = undefined;
  51986. var unmasked = true;
  51987. } catch (e) {}
  51988. var result = nativeObjectToString.call(value);
  51989. if (unmasked) {
  51990. if (isOwn) {
  51991. value[symToStringTag] = tag;
  51992. } else {
  51993. delete value[symToStringTag];
  51994. }
  51995. }
  51996. return result;
  51997. }
  51998. /**
  51999. * Creates an array of the own enumerable symbols of `object`.
  52000. *
  52001. * @private
  52002. * @param {Object} object The object to query.
  52003. * @returns {Array} Returns the array of symbols.
  52004. */
  52005. var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
  52006. if (object == null) {
  52007. return [];
  52008. }
  52009. object = Object(object);
  52010. return arrayFilter(nativeGetSymbols(object), function(symbol) {
  52011. return propertyIsEnumerable.call(object, symbol);
  52012. });
  52013. };
  52014. /**
  52015. * Creates an array of the own and inherited enumerable symbols of `object`.
  52016. *
  52017. * @private
  52018. * @param {Object} object The object to query.
  52019. * @returns {Array} Returns the array of symbols.
  52020. */
  52021. var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
  52022. var result = [];
  52023. while (object) {
  52024. arrayPush(result, getSymbols(object));
  52025. object = getPrototype(object);
  52026. }
  52027. return result;
  52028. };
  52029. /**
  52030. * Gets the `toStringTag` of `value`.
  52031. *
  52032. * @private
  52033. * @param {*} value The value to query.
  52034. * @returns {string} Returns the `toStringTag`.
  52035. */
  52036. var getTag = baseGetTag;
  52037. // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
  52038. if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
  52039. (Map && getTag(new Map) != mapTag) ||
  52040. (Promise && getTag(Promise.resolve()) != promiseTag) ||
  52041. (Set && getTag(new Set) != setTag) ||
  52042. (WeakMap && getTag(new WeakMap) != weakMapTag)) {
  52043. getTag = function(value) {
  52044. var result = baseGetTag(value),
  52045. Ctor = result == objectTag ? value.constructor : undefined,
  52046. ctorString = Ctor ? toSource(Ctor) : '';
  52047. if (ctorString) {
  52048. switch (ctorString) {
  52049. case dataViewCtorString: return dataViewTag;
  52050. case mapCtorString: return mapTag;
  52051. case promiseCtorString: return promiseTag;
  52052. case setCtorString: return setTag;
  52053. case weakMapCtorString: return weakMapTag;
  52054. }
  52055. }
  52056. return result;
  52057. };
  52058. }
  52059. /**
  52060. * Gets the view, applying any `transforms` to the `start` and `end` positions.
  52061. *
  52062. * @private
  52063. * @param {number} start The start of the view.
  52064. * @param {number} end The end of the view.
  52065. * @param {Array} transforms The transformations to apply to the view.
  52066. * @returns {Object} Returns an object containing the `start` and `end`
  52067. * positions of the view.
  52068. */
  52069. function getView(start, end, transforms) {
  52070. var index = -1,
  52071. length = transforms.length;
  52072. while (++index < length) {
  52073. var data = transforms[index],
  52074. size = data.size;
  52075. switch (data.type) {
  52076. case 'drop': start += size; break;
  52077. case 'dropRight': end -= size; break;
  52078. case 'take': end = nativeMin(end, start + size); break;
  52079. case 'takeRight': start = nativeMax(start, end - size); break;
  52080. }
  52081. }
  52082. return { 'start': start, 'end': end };
  52083. }
  52084. /**
  52085. * Extracts wrapper details from the `source` body comment.
  52086. *
  52087. * @private
  52088. * @param {string} source The source to inspect.
  52089. * @returns {Array} Returns the wrapper details.
  52090. */
  52091. function getWrapDetails(source) {
  52092. var match = source.match(reWrapDetails);
  52093. return match ? match[1].split(reSplitDetails) : [];
  52094. }
  52095. /**
  52096. * Checks if `path` exists on `object`.
  52097. *
  52098. * @private
  52099. * @param {Object} object The object to query.
  52100. * @param {Array|string} path The path to check.
  52101. * @param {Function} hasFunc The function to check properties.
  52102. * @returns {boolean} Returns `true` if `path` exists, else `false`.
  52103. */
  52104. function hasPath(object, path, hasFunc) {
  52105. path = castPath(path, object);
  52106. var index = -1,
  52107. length = path.length,
  52108. result = false;
  52109. while (++index < length) {
  52110. var key = toKey(path[index]);
  52111. if (!(result = object != null && hasFunc(object, key))) {
  52112. break;
  52113. }
  52114. object = object[key];
  52115. }
  52116. if (result || ++index != length) {
  52117. return result;
  52118. }
  52119. length = object == null ? 0 : object.length;
  52120. return !!length && isLength(length) && isIndex(key, length) &&
  52121. (isArray(object) || isArguments(object));
  52122. }
  52123. /**
  52124. * Initializes an array clone.
  52125. *
  52126. * @private
  52127. * @param {Array} array The array to clone.
  52128. * @returns {Array} Returns the initialized clone.
  52129. */
  52130. function initCloneArray(array) {
  52131. var length = array.length,
  52132. result = new array.constructor(length);
  52133. // Add properties assigned by `RegExp#exec`.
  52134. if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
  52135. result.index = array.index;
  52136. result.input = array.input;
  52137. }
  52138. return result;
  52139. }
  52140. /**
  52141. * Initializes an object clone.
  52142. *
  52143. * @private
  52144. * @param {Object} object The object to clone.
  52145. * @returns {Object} Returns the initialized clone.
  52146. */
  52147. function initCloneObject(object) {
  52148. return (typeof object.constructor == 'function' && !isPrototype(object))
  52149. ? baseCreate(getPrototype(object))
  52150. : {};
  52151. }
  52152. /**
  52153. * Initializes an object clone based on its `toStringTag`.
  52154. *
  52155. * **Note:** This function only supports cloning values with tags of
  52156. * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
  52157. *
  52158. * @private
  52159. * @param {Object} object The object to clone.
  52160. * @param {string} tag The `toStringTag` of the object to clone.
  52161. * @param {boolean} [isDeep] Specify a deep clone.
  52162. * @returns {Object} Returns the initialized clone.
  52163. */
  52164. function initCloneByTag(object, tag, isDeep) {
  52165. var Ctor = object.constructor;
  52166. switch (tag) {
  52167. case arrayBufferTag:
  52168. return cloneArrayBuffer(object);
  52169. case boolTag:
  52170. case dateTag:
  52171. return new Ctor(+object);
  52172. case dataViewTag:
  52173. return cloneDataView(object, isDeep);
  52174. case float32Tag: case float64Tag:
  52175. case int8Tag: case int16Tag: case int32Tag:
  52176. case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
  52177. return cloneTypedArray(object, isDeep);
  52178. case mapTag:
  52179. return new Ctor;
  52180. case numberTag:
  52181. case stringTag:
  52182. return new Ctor(object);
  52183. case regexpTag:
  52184. return cloneRegExp(object);
  52185. case setTag:
  52186. return new Ctor;
  52187. case symbolTag:
  52188. return cloneSymbol(object);
  52189. }
  52190. }
  52191. /**
  52192. * Inserts wrapper `details` in a comment at the top of the `source` body.
  52193. *
  52194. * @private
  52195. * @param {string} source The source to modify.
  52196. * @returns {Array} details The details to insert.
  52197. * @returns {string} Returns the modified source.
  52198. */
  52199. function insertWrapDetails(source, details) {
  52200. var length = details.length;
  52201. if (!length) {
  52202. return source;
  52203. }
  52204. var lastIndex = length - 1;
  52205. details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
  52206. details = details.join(length > 2 ? ', ' : ' ');
  52207. return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
  52208. }
  52209. /**
  52210. * Checks if `value` is a flattenable `arguments` object or array.
  52211. *
  52212. * @private
  52213. * @param {*} value The value to check.
  52214. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
  52215. */
  52216. function isFlattenable(value) {
  52217. return isArray(value) || isArguments(value) ||
  52218. !!(spreadableSymbol && value && value[spreadableSymbol]);
  52219. }
  52220. /**
  52221. * Checks if `value` is a valid array-like index.
  52222. *
  52223. * @private
  52224. * @param {*} value The value to check.
  52225. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
  52226. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
  52227. */
  52228. function isIndex(value, length) {
  52229. var type = typeof value;
  52230. length = length == null ? MAX_SAFE_INTEGER : length;
  52231. return !!length &&
  52232. (type == 'number' ||
  52233. (type != 'symbol' && reIsUint.test(value))) &&
  52234. (value > -1 && value % 1 == 0 && value < length);
  52235. }
  52236. /**
  52237. * Checks if the given arguments are from an iteratee call.
  52238. *
  52239. * @private
  52240. * @param {*} value The potential iteratee value argument.
  52241. * @param {*} index The potential iteratee index or key argument.
  52242. * @param {*} object The potential iteratee object argument.
  52243. * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
  52244. * else `false`.
  52245. */
  52246. function isIterateeCall(value, index, object) {
  52247. if (!isObject(object)) {
  52248. return false;
  52249. }
  52250. var type = typeof index;
  52251. if (type == 'number'
  52252. ? (isArrayLike(object) && isIndex(index, object.length))
  52253. : (type == 'string' && index in object)
  52254. ) {
  52255. return eq(object[index], value);
  52256. }
  52257. return false;
  52258. }
  52259. /**
  52260. * Checks if `value` is a property name and not a property path.
  52261. *
  52262. * @private
  52263. * @param {*} value The value to check.
  52264. * @param {Object} [object] The object to query keys on.
  52265. * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
  52266. */
  52267. function isKey(value, object) {
  52268. if (isArray(value)) {
  52269. return false;
  52270. }
  52271. var type = typeof value;
  52272. if (type == 'number' || type == 'symbol' || type == 'boolean' ||
  52273. value == null || isSymbol(value)) {
  52274. return true;
  52275. }
  52276. return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
  52277. (object != null && value in Object(object));
  52278. }
  52279. /**
  52280. * Checks if `value` is suitable for use as unique object key.
  52281. *
  52282. * @private
  52283. * @param {*} value The value to check.
  52284. * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
  52285. */
  52286. function isKeyable(value) {
  52287. var type = typeof value;
  52288. return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
  52289. ? (value !== '__proto__')
  52290. : (value === null);
  52291. }
  52292. /**
  52293. * Checks if `func` has a lazy counterpart.
  52294. *
  52295. * @private
  52296. * @param {Function} func The function to check.
  52297. * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
  52298. * else `false`.
  52299. */
  52300. function isLaziable(func) {
  52301. var funcName = getFuncName(func),
  52302. other = lodash[funcName];
  52303. if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
  52304. return false;
  52305. }
  52306. if (func === other) {
  52307. return true;
  52308. }
  52309. var data = getData(other);
  52310. return !!data && func === data[0];
  52311. }
  52312. /**
  52313. * Checks if `func` has its source masked.
  52314. *
  52315. * @private
  52316. * @param {Function} func The function to check.
  52317. * @returns {boolean} Returns `true` if `func` is masked, else `false`.
  52318. */
  52319. function isMasked(func) {
  52320. return !!maskSrcKey && (maskSrcKey in func);
  52321. }
  52322. /**
  52323. * Checks if `func` is capable of being masked.
  52324. *
  52325. * @private
  52326. * @param {*} value The value to check.
  52327. * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
  52328. */
  52329. var isMaskable = coreJsData ? isFunction : stubFalse;
  52330. /**
  52331. * Checks if `value` is likely a prototype object.
  52332. *
  52333. * @private
  52334. * @param {*} value The value to check.
  52335. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
  52336. */
  52337. function isPrototype(value) {
  52338. var Ctor = value && value.constructor,
  52339. proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
  52340. return value === proto;
  52341. }
  52342. /**
  52343. * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
  52344. *
  52345. * @private
  52346. * @param {*} value The value to check.
  52347. * @returns {boolean} Returns `true` if `value` if suitable for strict
  52348. * equality comparisons, else `false`.
  52349. */
  52350. function isStrictComparable(value) {
  52351. return value === value && !isObject(value);
  52352. }
  52353. /**
  52354. * A specialized version of `matchesProperty` for source values suitable
  52355. * for strict equality comparisons, i.e. `===`.
  52356. *
  52357. * @private
  52358. * @param {string} key The key of the property to get.
  52359. * @param {*} srcValue The value to match.
  52360. * @returns {Function} Returns the new spec function.
  52361. */
  52362. function matchesStrictComparable(key, srcValue) {
  52363. return function(object) {
  52364. if (object == null) {
  52365. return false;
  52366. }
  52367. return object[key] === srcValue &&
  52368. (srcValue !== undefined || (key in Object(object)));
  52369. };
  52370. }
  52371. /**
  52372. * A specialized version of `_.memoize` which clears the memoized function's
  52373. * cache when it exceeds `MAX_MEMOIZE_SIZE`.
  52374. *
  52375. * @private
  52376. * @param {Function} func The function to have its output memoized.
  52377. * @returns {Function} Returns the new memoized function.
  52378. */
  52379. function memoizeCapped(func) {
  52380. var result = memoize(func, function(key) {
  52381. if (cache.size === MAX_MEMOIZE_SIZE) {
  52382. cache.clear();
  52383. }
  52384. return key;
  52385. });
  52386. var cache = result.cache;
  52387. return result;
  52388. }
  52389. /**
  52390. * Merges the function metadata of `source` into `data`.
  52391. *
  52392. * Merging metadata reduces the number of wrappers used to invoke a function.
  52393. * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
  52394. * may be applied regardless of execution order. Methods like `_.ary` and
  52395. * `_.rearg` modify function arguments, making the order in which they are
  52396. * executed important, preventing the merging of metadata. However, we make
  52397. * an exception for a safe combined case where curried functions have `_.ary`
  52398. * and or `_.rearg` applied.
  52399. *
  52400. * @private
  52401. * @param {Array} data The destination metadata.
  52402. * @param {Array} source The source metadata.
  52403. * @returns {Array} Returns `data`.
  52404. */
  52405. function mergeData(data, source) {
  52406. var bitmask = data[1],
  52407. srcBitmask = source[1],
  52408. newBitmask = bitmask | srcBitmask,
  52409. isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
  52410. var isCombo =
  52411. ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
  52412. ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
  52413. ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
  52414. // Exit early if metadata can't be merged.
  52415. if (!(isCommon || isCombo)) {
  52416. return data;
  52417. }
  52418. // Use source `thisArg` if available.
  52419. if (srcBitmask & WRAP_BIND_FLAG) {
  52420. data[2] = source[2];
  52421. // Set when currying a bound function.
  52422. newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
  52423. }
  52424. // Compose partial arguments.
  52425. var value = source[3];
  52426. if (value) {
  52427. var partials = data[3];
  52428. data[3] = partials ? composeArgs(partials, value, source[4]) : value;
  52429. data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
  52430. }
  52431. // Compose partial right arguments.
  52432. value = source[5];
  52433. if (value) {
  52434. partials = data[5];
  52435. data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
  52436. data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
  52437. }
  52438. // Use source `argPos` if available.
  52439. value = source[7];
  52440. if (value) {
  52441. data[7] = value;
  52442. }
  52443. // Use source `ary` if it's smaller.
  52444. if (srcBitmask & WRAP_ARY_FLAG) {
  52445. data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
  52446. }
  52447. // Use source `arity` if one is not provided.
  52448. if (data[9] == null) {
  52449. data[9] = source[9];
  52450. }
  52451. // Use source `func` and merge bitmasks.
  52452. data[0] = source[0];
  52453. data[1] = newBitmask;
  52454. return data;
  52455. }
  52456. /**
  52457. * This function is like
  52458. * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  52459. * except that it includes inherited enumerable properties.
  52460. *
  52461. * @private
  52462. * @param {Object} object The object to query.
  52463. * @returns {Array} Returns the array of property names.
  52464. */
  52465. function nativeKeysIn(object) {
  52466. var result = [];
  52467. if (object != null) {
  52468. for (var key in Object(object)) {
  52469. result.push(key);
  52470. }
  52471. }
  52472. return result;
  52473. }
  52474. /**
  52475. * Converts `value` to a string using `Object.prototype.toString`.
  52476. *
  52477. * @private
  52478. * @param {*} value The value to convert.
  52479. * @returns {string} Returns the converted string.
  52480. */
  52481. function objectToString(value) {
  52482. return nativeObjectToString.call(value);
  52483. }
  52484. /**
  52485. * A specialized version of `baseRest` which transforms the rest array.
  52486. *
  52487. * @private
  52488. * @param {Function} func The function to apply a rest parameter to.
  52489. * @param {number} [start=func.length-1] The start position of the rest parameter.
  52490. * @param {Function} transform The rest array transform.
  52491. * @returns {Function} Returns the new function.
  52492. */
  52493. function overRest(func, start, transform) {
  52494. start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
  52495. return function() {
  52496. var args = arguments,
  52497. index = -1,
  52498. length = nativeMax(args.length - start, 0),
  52499. array = Array(length);
  52500. while (++index < length) {
  52501. array[index] = args[start + index];
  52502. }
  52503. index = -1;
  52504. var otherArgs = Array(start + 1);
  52505. while (++index < start) {
  52506. otherArgs[index] = args[index];
  52507. }
  52508. otherArgs[start] = transform(array);
  52509. return apply(func, this, otherArgs);
  52510. };
  52511. }
  52512. /**
  52513. * Gets the parent value at `path` of `object`.
  52514. *
  52515. * @private
  52516. * @param {Object} object The object to query.
  52517. * @param {Array} path The path to get the parent value of.
  52518. * @returns {*} Returns the parent value.
  52519. */
  52520. function parent(object, path) {
  52521. return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
  52522. }
  52523. /**
  52524. * Reorder `array` according to the specified indexes where the element at
  52525. * the first index is assigned as the first element, the element at
  52526. * the second index is assigned as the second element, and so on.
  52527. *
  52528. * @private
  52529. * @param {Array} array The array to reorder.
  52530. * @param {Array} indexes The arranged array indexes.
  52531. * @returns {Array} Returns `array`.
  52532. */
  52533. function reorder(array, indexes) {
  52534. var arrLength = array.length,
  52535. length = nativeMin(indexes.length, arrLength),
  52536. oldArray = copyArray(array);
  52537. while (length--) {
  52538. var index = indexes[length];
  52539. array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
  52540. }
  52541. return array;
  52542. }
  52543. /**
  52544. * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
  52545. *
  52546. * @private
  52547. * @param {Object} object The object to query.
  52548. * @param {string} key The key of the property to get.
  52549. * @returns {*} Returns the property value.
  52550. */
  52551. function safeGet(object, key) {
  52552. if (key === 'constructor' && typeof object[key] === 'function') {
  52553. return;
  52554. }
  52555. if (key == '__proto__') {
  52556. return;
  52557. }
  52558. return object[key];
  52559. }
  52560. /**
  52561. * Sets metadata for `func`.
  52562. *
  52563. * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
  52564. * period of time, it will trip its breaker and transition to an identity
  52565. * function to avoid garbage collection pauses in V8. See
  52566. * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
  52567. * for more details.
  52568. *
  52569. * @private
  52570. * @param {Function} func The function to associate metadata with.
  52571. * @param {*} data The metadata.
  52572. * @returns {Function} Returns `func`.
  52573. */
  52574. var setData = shortOut(baseSetData);
  52575. /**
  52576. * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
  52577. *
  52578. * @private
  52579. * @param {Function} func The function to delay.
  52580. * @param {number} wait The number of milliseconds to delay invocation.
  52581. * @returns {number|Object} Returns the timer id or timeout object.
  52582. */
  52583. var setTimeout = ctxSetTimeout || function(func, wait) {
  52584. return root.setTimeout(func, wait);
  52585. };
  52586. /**
  52587. * Sets the `toString` method of `func` to return `string`.
  52588. *
  52589. * @private
  52590. * @param {Function} func The function to modify.
  52591. * @param {Function} string The `toString` result.
  52592. * @returns {Function} Returns `func`.
  52593. */
  52594. var setToString = shortOut(baseSetToString);
  52595. /**
  52596. * Sets the `toString` method of `wrapper` to mimic the source of `reference`
  52597. * with wrapper details in a comment at the top of the source body.
  52598. *
  52599. * @private
  52600. * @param {Function} wrapper The function to modify.
  52601. * @param {Function} reference The reference function.
  52602. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  52603. * @returns {Function} Returns `wrapper`.
  52604. */
  52605. function setWrapToString(wrapper, reference, bitmask) {
  52606. var source = (reference + '');
  52607. return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
  52608. }
  52609. /**
  52610. * Creates a function that'll short out and invoke `identity` instead
  52611. * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
  52612. * milliseconds.
  52613. *
  52614. * @private
  52615. * @param {Function} func The function to restrict.
  52616. * @returns {Function} Returns the new shortable function.
  52617. */
  52618. function shortOut(func) {
  52619. var count = 0,
  52620. lastCalled = 0;
  52621. return function() {
  52622. var stamp = nativeNow(),
  52623. remaining = HOT_SPAN - (stamp - lastCalled);
  52624. lastCalled = stamp;
  52625. if (remaining > 0) {
  52626. if (++count >= HOT_COUNT) {
  52627. return arguments[0];
  52628. }
  52629. } else {
  52630. count = 0;
  52631. }
  52632. return func.apply(undefined, arguments);
  52633. };
  52634. }
  52635. /**
  52636. * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
  52637. *
  52638. * @private
  52639. * @param {Array} array The array to shuffle.
  52640. * @param {number} [size=array.length] The size of `array`.
  52641. * @returns {Array} Returns `array`.
  52642. */
  52643. function shuffleSelf(array, size) {
  52644. var index = -1,
  52645. length = array.length,
  52646. lastIndex = length - 1;
  52647. size = size === undefined ? length : size;
  52648. while (++index < size) {
  52649. var rand = baseRandom(index, lastIndex),
  52650. value = array[rand];
  52651. array[rand] = array[index];
  52652. array[index] = value;
  52653. }
  52654. array.length = size;
  52655. return array;
  52656. }
  52657. /**
  52658. * Converts `string` to a property path array.
  52659. *
  52660. * @private
  52661. * @param {string} string The string to convert.
  52662. * @returns {Array} Returns the property path array.
  52663. */
  52664. var stringToPath = memoizeCapped(function(string) {
  52665. var result = [];
  52666. if (string.charCodeAt(0) === 46 /* . */) {
  52667. result.push('');
  52668. }
  52669. string.replace(rePropName, function(match, number, quote, subString) {
  52670. result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
  52671. });
  52672. return result;
  52673. });
  52674. /**
  52675. * Converts `value` to a string key if it's not a string or symbol.
  52676. *
  52677. * @private
  52678. * @param {*} value The value to inspect.
  52679. * @returns {string|symbol} Returns the key.
  52680. */
  52681. function toKey(value) {
  52682. if (typeof value == 'string' || isSymbol(value)) {
  52683. return value;
  52684. }
  52685. var result = (value + '');
  52686. return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
  52687. }
  52688. /**
  52689. * Converts `func` to its source code.
  52690. *
  52691. * @private
  52692. * @param {Function} func The function to convert.
  52693. * @returns {string} Returns the source code.
  52694. */
  52695. function toSource(func) {
  52696. if (func != null) {
  52697. try {
  52698. return funcToString.call(func);
  52699. } catch (e) {}
  52700. try {
  52701. return (func + '');
  52702. } catch (e) {}
  52703. }
  52704. return '';
  52705. }
  52706. /**
  52707. * Updates wrapper `details` based on `bitmask` flags.
  52708. *
  52709. * @private
  52710. * @returns {Array} details The details to modify.
  52711. * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
  52712. * @returns {Array} Returns `details`.
  52713. */
  52714. function updateWrapDetails(details, bitmask) {
  52715. arrayEach(wrapFlags, function(pair) {
  52716. var value = '_.' + pair[0];
  52717. if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
  52718. details.push(value);
  52719. }
  52720. });
  52721. return details.sort();
  52722. }
  52723. /**
  52724. * Creates a clone of `wrapper`.
  52725. *
  52726. * @private
  52727. * @param {Object} wrapper The wrapper to clone.
  52728. * @returns {Object} Returns the cloned wrapper.
  52729. */
  52730. function wrapperClone(wrapper) {
  52731. if (wrapper instanceof LazyWrapper) {
  52732. return wrapper.clone();
  52733. }
  52734. var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
  52735. result.__actions__ = copyArray(wrapper.__actions__);
  52736. result.__index__ = wrapper.__index__;
  52737. result.__values__ = wrapper.__values__;
  52738. return result;
  52739. }
  52740. /*------------------------------------------------------------------------*/
  52741. /**
  52742. * Creates an array of elements split into groups the length of `size`.
  52743. * If `array` can't be split evenly, the final chunk will be the remaining
  52744. * elements.
  52745. *
  52746. * @static
  52747. * @memberOf _
  52748. * @since 3.0.0
  52749. * @category Array
  52750. * @param {Array} array The array to process.
  52751. * @param {number} [size=1] The length of each chunk
  52752. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  52753. * @returns {Array} Returns the new array of chunks.
  52754. * @example
  52755. *
  52756. * _.chunk(['a', 'b', 'c', 'd'], 2);
  52757. * // => [['a', 'b'], ['c', 'd']]
  52758. *
  52759. * _.chunk(['a', 'b', 'c', 'd'], 3);
  52760. * // => [['a', 'b', 'c'], ['d']]
  52761. */
  52762. function chunk(array, size, guard) {
  52763. if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
  52764. size = 1;
  52765. } else {
  52766. size = nativeMax(toInteger(size), 0);
  52767. }
  52768. var length = array == null ? 0 : array.length;
  52769. if (!length || size < 1) {
  52770. return [];
  52771. }
  52772. var index = 0,
  52773. resIndex = 0,
  52774. result = Array(nativeCeil(length / size));
  52775. while (index < length) {
  52776. result[resIndex++] = baseSlice(array, index, (index += size));
  52777. }
  52778. return result;
  52779. }
  52780. /**
  52781. * Creates an array with all falsey values removed. The values `false`, `null`,
  52782. * `0`, `""`, `undefined`, and `NaN` are falsey.
  52783. *
  52784. * @static
  52785. * @memberOf _
  52786. * @since 0.1.0
  52787. * @category Array
  52788. * @param {Array} array The array to compact.
  52789. * @returns {Array} Returns the new array of filtered values.
  52790. * @example
  52791. *
  52792. * _.compact([0, 1, false, 2, '', 3]);
  52793. * // => [1, 2, 3]
  52794. */
  52795. function compact(array) {
  52796. var index = -1,
  52797. length = array == null ? 0 : array.length,
  52798. resIndex = 0,
  52799. result = [];
  52800. while (++index < length) {
  52801. var value = array[index];
  52802. if (value) {
  52803. result[resIndex++] = value;
  52804. }
  52805. }
  52806. return result;
  52807. }
  52808. /**
  52809. * Creates a new array concatenating `array` with any additional arrays
  52810. * and/or values.
  52811. *
  52812. * @static
  52813. * @memberOf _
  52814. * @since 4.0.0
  52815. * @category Array
  52816. * @param {Array} array The array to concatenate.
  52817. * @param {...*} [values] The values to concatenate.
  52818. * @returns {Array} Returns the new concatenated array.
  52819. * @example
  52820. *
  52821. * var array = [1];
  52822. * var other = _.concat(array, 2, [3], [[4]]);
  52823. *
  52824. * console.log(other);
  52825. * // => [1, 2, 3, [4]]
  52826. *
  52827. * console.log(array);
  52828. * // => [1]
  52829. */
  52830. function concat() {
  52831. var length = arguments.length;
  52832. if (!length) {
  52833. return [];
  52834. }
  52835. var args = Array(length - 1),
  52836. array = arguments[0],
  52837. index = length;
  52838. while (index--) {
  52839. args[index - 1] = arguments[index];
  52840. }
  52841. return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
  52842. }
  52843. /**
  52844. * Creates an array of `array` values not included in the other given arrays
  52845. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  52846. * for equality comparisons. The order and references of result values are
  52847. * determined by the first array.
  52848. *
  52849. * **Note:** Unlike `_.pullAll`, this method returns a new array.
  52850. *
  52851. * @static
  52852. * @memberOf _
  52853. * @since 0.1.0
  52854. * @category Array
  52855. * @param {Array} array The array to inspect.
  52856. * @param {...Array} [values] The values to exclude.
  52857. * @returns {Array} Returns the new array of filtered values.
  52858. * @see _.without, _.xor
  52859. * @example
  52860. *
  52861. * _.difference([2, 1], [2, 3]);
  52862. * // => [1]
  52863. */
  52864. var difference = baseRest(function(array, values) {
  52865. return isArrayLikeObject(array)
  52866. ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
  52867. : [];
  52868. });
  52869. /**
  52870. * This method is like `_.difference` except that it accepts `iteratee` which
  52871. * is invoked for each element of `array` and `values` to generate the criterion
  52872. * by which they're compared. The order and references of result values are
  52873. * determined by the first array. The iteratee is invoked with one argument:
  52874. * (value).
  52875. *
  52876. * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
  52877. *
  52878. * @static
  52879. * @memberOf _
  52880. * @since 4.0.0
  52881. * @category Array
  52882. * @param {Array} array The array to inspect.
  52883. * @param {...Array} [values] The values to exclude.
  52884. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  52885. * @returns {Array} Returns the new array of filtered values.
  52886. * @example
  52887. *
  52888. * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
  52889. * // => [1.2]
  52890. *
  52891. * // The `_.property` iteratee shorthand.
  52892. * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
  52893. * // => [{ 'x': 2 }]
  52894. */
  52895. var differenceBy = baseRest(function(array, values) {
  52896. var iteratee = last(values);
  52897. if (isArrayLikeObject(iteratee)) {
  52898. iteratee = undefined;
  52899. }
  52900. return isArrayLikeObject(array)
  52901. ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
  52902. : [];
  52903. });
  52904. /**
  52905. * This method is like `_.difference` except that it accepts `comparator`
  52906. * which is invoked to compare elements of `array` to `values`. The order and
  52907. * references of result values are determined by the first array. The comparator
  52908. * is invoked with two arguments: (arrVal, othVal).
  52909. *
  52910. * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
  52911. *
  52912. * @static
  52913. * @memberOf _
  52914. * @since 4.0.0
  52915. * @category Array
  52916. * @param {Array} array The array to inspect.
  52917. * @param {...Array} [values] The values to exclude.
  52918. * @param {Function} [comparator] The comparator invoked per element.
  52919. * @returns {Array} Returns the new array of filtered values.
  52920. * @example
  52921. *
  52922. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
  52923. *
  52924. * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
  52925. * // => [{ 'x': 2, 'y': 1 }]
  52926. */
  52927. var differenceWith = baseRest(function(array, values) {
  52928. var comparator = last(values);
  52929. if (isArrayLikeObject(comparator)) {
  52930. comparator = undefined;
  52931. }
  52932. return isArrayLikeObject(array)
  52933. ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
  52934. : [];
  52935. });
  52936. /**
  52937. * Creates a slice of `array` with `n` elements dropped from the beginning.
  52938. *
  52939. * @static
  52940. * @memberOf _
  52941. * @since 0.5.0
  52942. * @category Array
  52943. * @param {Array} array The array to query.
  52944. * @param {number} [n=1] The number of elements to drop.
  52945. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  52946. * @returns {Array} Returns the slice of `array`.
  52947. * @example
  52948. *
  52949. * _.drop([1, 2, 3]);
  52950. * // => [2, 3]
  52951. *
  52952. * _.drop([1, 2, 3], 2);
  52953. * // => [3]
  52954. *
  52955. * _.drop([1, 2, 3], 5);
  52956. * // => []
  52957. *
  52958. * _.drop([1, 2, 3], 0);
  52959. * // => [1, 2, 3]
  52960. */
  52961. function drop(array, n, guard) {
  52962. var length = array == null ? 0 : array.length;
  52963. if (!length) {
  52964. return [];
  52965. }
  52966. n = (guard || n === undefined) ? 1 : toInteger(n);
  52967. return baseSlice(array, n < 0 ? 0 : n, length);
  52968. }
  52969. /**
  52970. * Creates a slice of `array` with `n` elements dropped from the end.
  52971. *
  52972. * @static
  52973. * @memberOf _
  52974. * @since 3.0.0
  52975. * @category Array
  52976. * @param {Array} array The array to query.
  52977. * @param {number} [n=1] The number of elements to drop.
  52978. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  52979. * @returns {Array} Returns the slice of `array`.
  52980. * @example
  52981. *
  52982. * _.dropRight([1, 2, 3]);
  52983. * // => [1, 2]
  52984. *
  52985. * _.dropRight([1, 2, 3], 2);
  52986. * // => [1]
  52987. *
  52988. * _.dropRight([1, 2, 3], 5);
  52989. * // => []
  52990. *
  52991. * _.dropRight([1, 2, 3], 0);
  52992. * // => [1, 2, 3]
  52993. */
  52994. function dropRight(array, n, guard) {
  52995. var length = array == null ? 0 : array.length;
  52996. if (!length) {
  52997. return [];
  52998. }
  52999. n = (guard || n === undefined) ? 1 : toInteger(n);
  53000. n = length - n;
  53001. return baseSlice(array, 0, n < 0 ? 0 : n);
  53002. }
  53003. /**
  53004. * Creates a slice of `array` excluding elements dropped from the end.
  53005. * Elements are dropped until `predicate` returns falsey. The predicate is
  53006. * invoked with three arguments: (value, index, array).
  53007. *
  53008. * @static
  53009. * @memberOf _
  53010. * @since 3.0.0
  53011. * @category Array
  53012. * @param {Array} array The array to query.
  53013. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  53014. * @returns {Array} Returns the slice of `array`.
  53015. * @example
  53016. *
  53017. * var users = [
  53018. * { 'user': 'barney', 'active': true },
  53019. * { 'user': 'fred', 'active': false },
  53020. * { 'user': 'pebbles', 'active': false }
  53021. * ];
  53022. *
  53023. * _.dropRightWhile(users, function(o) { return !o.active; });
  53024. * // => objects for ['barney']
  53025. *
  53026. * // The `_.matches` iteratee shorthand.
  53027. * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
  53028. * // => objects for ['barney', 'fred']
  53029. *
  53030. * // The `_.matchesProperty` iteratee shorthand.
  53031. * _.dropRightWhile(users, ['active', false]);
  53032. * // => objects for ['barney']
  53033. *
  53034. * // The `_.property` iteratee shorthand.
  53035. * _.dropRightWhile(users, 'active');
  53036. * // => objects for ['barney', 'fred', 'pebbles']
  53037. */
  53038. function dropRightWhile(array, predicate) {
  53039. return (array && array.length)
  53040. ? baseWhile(array, getIteratee(predicate, 3), true, true)
  53041. : [];
  53042. }
  53043. /**
  53044. * Creates a slice of `array` excluding elements dropped from the beginning.
  53045. * Elements are dropped until `predicate` returns falsey. The predicate is
  53046. * invoked with three arguments: (value, index, array).
  53047. *
  53048. * @static
  53049. * @memberOf _
  53050. * @since 3.0.0
  53051. * @category Array
  53052. * @param {Array} array The array to query.
  53053. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  53054. * @returns {Array} Returns the slice of `array`.
  53055. * @example
  53056. *
  53057. * var users = [
  53058. * { 'user': 'barney', 'active': false },
  53059. * { 'user': 'fred', 'active': false },
  53060. * { 'user': 'pebbles', 'active': true }
  53061. * ];
  53062. *
  53063. * _.dropWhile(users, function(o) { return !o.active; });
  53064. * // => objects for ['pebbles']
  53065. *
  53066. * // The `_.matches` iteratee shorthand.
  53067. * _.dropWhile(users, { 'user': 'barney', 'active': false });
  53068. * // => objects for ['fred', 'pebbles']
  53069. *
  53070. * // The `_.matchesProperty` iteratee shorthand.
  53071. * _.dropWhile(users, ['active', false]);
  53072. * // => objects for ['pebbles']
  53073. *
  53074. * // The `_.property` iteratee shorthand.
  53075. * _.dropWhile(users, 'active');
  53076. * // => objects for ['barney', 'fred', 'pebbles']
  53077. */
  53078. function dropWhile(array, predicate) {
  53079. return (array && array.length)
  53080. ? baseWhile(array, getIteratee(predicate, 3), true)
  53081. : [];
  53082. }
  53083. /**
  53084. * Fills elements of `array` with `value` from `start` up to, but not
  53085. * including, `end`.
  53086. *
  53087. * **Note:** This method mutates `array`.
  53088. *
  53089. * @static
  53090. * @memberOf _
  53091. * @since 3.2.0
  53092. * @category Array
  53093. * @param {Array} array The array to fill.
  53094. * @param {*} value The value to fill `array` with.
  53095. * @param {number} [start=0] The start position.
  53096. * @param {number} [end=array.length] The end position.
  53097. * @returns {Array} Returns `array`.
  53098. * @example
  53099. *
  53100. * var array = [1, 2, 3];
  53101. *
  53102. * _.fill(array, 'a');
  53103. * console.log(array);
  53104. * // => ['a', 'a', 'a']
  53105. *
  53106. * _.fill(Array(3), 2);
  53107. * // => [2, 2, 2]
  53108. *
  53109. * _.fill([4, 6, 8, 10], '*', 1, 3);
  53110. * // => [4, '*', '*', 10]
  53111. */
  53112. function fill(array, value, start, end) {
  53113. var length = array == null ? 0 : array.length;
  53114. if (!length) {
  53115. return [];
  53116. }
  53117. if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
  53118. start = 0;
  53119. end = length;
  53120. }
  53121. return baseFill(array, value, start, end);
  53122. }
  53123. /**
  53124. * This method is like `_.find` except that it returns the index of the first
  53125. * element `predicate` returns truthy for instead of the element itself.
  53126. *
  53127. * @static
  53128. * @memberOf _
  53129. * @since 1.1.0
  53130. * @category Array
  53131. * @param {Array} array The array to inspect.
  53132. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  53133. * @param {number} [fromIndex=0] The index to search from.
  53134. * @returns {number} Returns the index of the found element, else `-1`.
  53135. * @example
  53136. *
  53137. * var users = [
  53138. * { 'user': 'barney', 'active': false },
  53139. * { 'user': 'fred', 'active': false },
  53140. * { 'user': 'pebbles', 'active': true }
  53141. * ];
  53142. *
  53143. * _.findIndex(users, function(o) { return o.user == 'barney'; });
  53144. * // => 0
  53145. *
  53146. * // The `_.matches` iteratee shorthand.
  53147. * _.findIndex(users, { 'user': 'fred', 'active': false });
  53148. * // => 1
  53149. *
  53150. * // The `_.matchesProperty` iteratee shorthand.
  53151. * _.findIndex(users, ['active', false]);
  53152. * // => 0
  53153. *
  53154. * // The `_.property` iteratee shorthand.
  53155. * _.findIndex(users, 'active');
  53156. * // => 2
  53157. */
  53158. function findIndex(array, predicate, fromIndex) {
  53159. var length = array == null ? 0 : array.length;
  53160. if (!length) {
  53161. return -1;
  53162. }
  53163. var index = fromIndex == null ? 0 : toInteger(fromIndex);
  53164. if (index < 0) {
  53165. index = nativeMax(length + index, 0);
  53166. }
  53167. return baseFindIndex(array, getIteratee(predicate, 3), index);
  53168. }
  53169. /**
  53170. * This method is like `_.findIndex` except that it iterates over elements
  53171. * of `collection` from right to left.
  53172. *
  53173. * @static
  53174. * @memberOf _
  53175. * @since 2.0.0
  53176. * @category Array
  53177. * @param {Array} array The array to inspect.
  53178. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  53179. * @param {number} [fromIndex=array.length-1] The index to search from.
  53180. * @returns {number} Returns the index of the found element, else `-1`.
  53181. * @example
  53182. *
  53183. * var users = [
  53184. * { 'user': 'barney', 'active': true },
  53185. * { 'user': 'fred', 'active': false },
  53186. * { 'user': 'pebbles', 'active': false }
  53187. * ];
  53188. *
  53189. * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
  53190. * // => 2
  53191. *
  53192. * // The `_.matches` iteratee shorthand.
  53193. * _.findLastIndex(users, { 'user': 'barney', 'active': true });
  53194. * // => 0
  53195. *
  53196. * // The `_.matchesProperty` iteratee shorthand.
  53197. * _.findLastIndex(users, ['active', false]);
  53198. * // => 2
  53199. *
  53200. * // The `_.property` iteratee shorthand.
  53201. * _.findLastIndex(users, 'active');
  53202. * // => 0
  53203. */
  53204. function findLastIndex(array, predicate, fromIndex) {
  53205. var length = array == null ? 0 : array.length;
  53206. if (!length) {
  53207. return -1;
  53208. }
  53209. var index = length - 1;
  53210. if (fromIndex !== undefined) {
  53211. index = toInteger(fromIndex);
  53212. index = fromIndex < 0
  53213. ? nativeMax(length + index, 0)
  53214. : nativeMin(index, length - 1);
  53215. }
  53216. return baseFindIndex(array, getIteratee(predicate, 3), index, true);
  53217. }
  53218. /**
  53219. * Flattens `array` a single level deep.
  53220. *
  53221. * @static
  53222. * @memberOf _
  53223. * @since 0.1.0
  53224. * @category Array
  53225. * @param {Array} array The array to flatten.
  53226. * @returns {Array} Returns the new flattened array.
  53227. * @example
  53228. *
  53229. * _.flatten([1, [2, [3, [4]], 5]]);
  53230. * // => [1, 2, [3, [4]], 5]
  53231. */
  53232. function flatten(array) {
  53233. var length = array == null ? 0 : array.length;
  53234. return length ? baseFlatten(array, 1) : [];
  53235. }
  53236. /**
  53237. * Recursively flattens `array`.
  53238. *
  53239. * @static
  53240. * @memberOf _
  53241. * @since 3.0.0
  53242. * @category Array
  53243. * @param {Array} array The array to flatten.
  53244. * @returns {Array} Returns the new flattened array.
  53245. * @example
  53246. *
  53247. * _.flattenDeep([1, [2, [3, [4]], 5]]);
  53248. * // => [1, 2, 3, 4, 5]
  53249. */
  53250. function flattenDeep(array) {
  53251. var length = array == null ? 0 : array.length;
  53252. return length ? baseFlatten(array, INFINITY) : [];
  53253. }
  53254. /**
  53255. * Recursively flatten `array` up to `depth` times.
  53256. *
  53257. * @static
  53258. * @memberOf _
  53259. * @since 4.4.0
  53260. * @category Array
  53261. * @param {Array} array The array to flatten.
  53262. * @param {number} [depth=1] The maximum recursion depth.
  53263. * @returns {Array} Returns the new flattened array.
  53264. * @example
  53265. *
  53266. * var array = [1, [2, [3, [4]], 5]];
  53267. *
  53268. * _.flattenDepth(array, 1);
  53269. * // => [1, 2, [3, [4]], 5]
  53270. *
  53271. * _.flattenDepth(array, 2);
  53272. * // => [1, 2, 3, [4], 5]
  53273. */
  53274. function flattenDepth(array, depth) {
  53275. var length = array == null ? 0 : array.length;
  53276. if (!length) {
  53277. return [];
  53278. }
  53279. depth = depth === undefined ? 1 : toInteger(depth);
  53280. return baseFlatten(array, depth);
  53281. }
  53282. /**
  53283. * The inverse of `_.toPairs`; this method returns an object composed
  53284. * from key-value `pairs`.
  53285. *
  53286. * @static
  53287. * @memberOf _
  53288. * @since 4.0.0
  53289. * @category Array
  53290. * @param {Array} pairs The key-value pairs.
  53291. * @returns {Object} Returns the new object.
  53292. * @example
  53293. *
  53294. * _.fromPairs([['a', 1], ['b', 2]]);
  53295. * // => { 'a': 1, 'b': 2 }
  53296. */
  53297. function fromPairs(pairs) {
  53298. var index = -1,
  53299. length = pairs == null ? 0 : pairs.length,
  53300. result = {};
  53301. while (++index < length) {
  53302. var pair = pairs[index];
  53303. result[pair[0]] = pair[1];
  53304. }
  53305. return result;
  53306. }
  53307. /**
  53308. * Gets the first element of `array`.
  53309. *
  53310. * @static
  53311. * @memberOf _
  53312. * @since 0.1.0
  53313. * @alias first
  53314. * @category Array
  53315. * @param {Array} array The array to query.
  53316. * @returns {*} Returns the first element of `array`.
  53317. * @example
  53318. *
  53319. * _.head([1, 2, 3]);
  53320. * // => 1
  53321. *
  53322. * _.head([]);
  53323. * // => undefined
  53324. */
  53325. function head(array) {
  53326. return (array && array.length) ? array[0] : undefined;
  53327. }
  53328. /**
  53329. * Gets the index at which the first occurrence of `value` is found in `array`
  53330. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  53331. * for equality comparisons. If `fromIndex` is negative, it's used as the
  53332. * offset from the end of `array`.
  53333. *
  53334. * @static
  53335. * @memberOf _
  53336. * @since 0.1.0
  53337. * @category Array
  53338. * @param {Array} array The array to inspect.
  53339. * @param {*} value The value to search for.
  53340. * @param {number} [fromIndex=0] The index to search from.
  53341. * @returns {number} Returns the index of the matched value, else `-1`.
  53342. * @example
  53343. *
  53344. * _.indexOf([1, 2, 1, 2], 2);
  53345. * // => 1
  53346. *
  53347. * // Search from the `fromIndex`.
  53348. * _.indexOf([1, 2, 1, 2], 2, 2);
  53349. * // => 3
  53350. */
  53351. function indexOf(array, value, fromIndex) {
  53352. var length = array == null ? 0 : array.length;
  53353. if (!length) {
  53354. return -1;
  53355. }
  53356. var index = fromIndex == null ? 0 : toInteger(fromIndex);
  53357. if (index < 0) {
  53358. index = nativeMax(length + index, 0);
  53359. }
  53360. return baseIndexOf(array, value, index);
  53361. }
  53362. /**
  53363. * Gets all but the last element of `array`.
  53364. *
  53365. * @static
  53366. * @memberOf _
  53367. * @since 0.1.0
  53368. * @category Array
  53369. * @param {Array} array The array to query.
  53370. * @returns {Array} Returns the slice of `array`.
  53371. * @example
  53372. *
  53373. * _.initial([1, 2, 3]);
  53374. * // => [1, 2]
  53375. */
  53376. function initial(array) {
  53377. var length = array == null ? 0 : array.length;
  53378. return length ? baseSlice(array, 0, -1) : [];
  53379. }
  53380. /**
  53381. * Creates an array of unique values that are included in all given arrays
  53382. * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  53383. * for equality comparisons. The order and references of result values are
  53384. * determined by the first array.
  53385. *
  53386. * @static
  53387. * @memberOf _
  53388. * @since 0.1.0
  53389. * @category Array
  53390. * @param {...Array} [arrays] The arrays to inspect.
  53391. * @returns {Array} Returns the new array of intersecting values.
  53392. * @example
  53393. *
  53394. * _.intersection([2, 1], [2, 3]);
  53395. * // => [2]
  53396. */
  53397. var intersection = baseRest(function(arrays) {
  53398. var mapped = arrayMap(arrays, castArrayLikeObject);
  53399. return (mapped.length && mapped[0] === arrays[0])
  53400. ? baseIntersection(mapped)
  53401. : [];
  53402. });
  53403. /**
  53404. * This method is like `_.intersection` except that it accepts `iteratee`
  53405. * which is invoked for each element of each `arrays` to generate the criterion
  53406. * by which they're compared. The order and references of result values are
  53407. * determined by the first array. The iteratee is invoked with one argument:
  53408. * (value).
  53409. *
  53410. * @static
  53411. * @memberOf _
  53412. * @since 4.0.0
  53413. * @category Array
  53414. * @param {...Array} [arrays] The arrays to inspect.
  53415. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  53416. * @returns {Array} Returns the new array of intersecting values.
  53417. * @example
  53418. *
  53419. * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
  53420. * // => [2.1]
  53421. *
  53422. * // The `_.property` iteratee shorthand.
  53423. * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
  53424. * // => [{ 'x': 1 }]
  53425. */
  53426. var intersectionBy = baseRest(function(arrays) {
  53427. var iteratee = last(arrays),
  53428. mapped = arrayMap(arrays, castArrayLikeObject);
  53429. if (iteratee === last(mapped)) {
  53430. iteratee = undefined;
  53431. } else {
  53432. mapped.pop();
  53433. }
  53434. return (mapped.length && mapped[0] === arrays[0])
  53435. ? baseIntersection(mapped, getIteratee(iteratee, 2))
  53436. : [];
  53437. });
  53438. /**
  53439. * This method is like `_.intersection` except that it accepts `comparator`
  53440. * which is invoked to compare elements of `arrays`. The order and references
  53441. * of result values are determined by the first array. The comparator is
  53442. * invoked with two arguments: (arrVal, othVal).
  53443. *
  53444. * @static
  53445. * @memberOf _
  53446. * @since 4.0.0
  53447. * @category Array
  53448. * @param {...Array} [arrays] The arrays to inspect.
  53449. * @param {Function} [comparator] The comparator invoked per element.
  53450. * @returns {Array} Returns the new array of intersecting values.
  53451. * @example
  53452. *
  53453. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
  53454. * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
  53455. *
  53456. * _.intersectionWith(objects, others, _.isEqual);
  53457. * // => [{ 'x': 1, 'y': 2 }]
  53458. */
  53459. var intersectionWith = baseRest(function(arrays) {
  53460. var comparator = last(arrays),
  53461. mapped = arrayMap(arrays, castArrayLikeObject);
  53462. comparator = typeof comparator == 'function' ? comparator : undefined;
  53463. if (comparator) {
  53464. mapped.pop();
  53465. }
  53466. return (mapped.length && mapped[0] === arrays[0])
  53467. ? baseIntersection(mapped, undefined, comparator)
  53468. : [];
  53469. });
  53470. /**
  53471. * Converts all elements in `array` into a string separated by `separator`.
  53472. *
  53473. * @static
  53474. * @memberOf _
  53475. * @since 4.0.0
  53476. * @category Array
  53477. * @param {Array} array The array to convert.
  53478. * @param {string} [separator=','] The element separator.
  53479. * @returns {string} Returns the joined string.
  53480. * @example
  53481. *
  53482. * _.join(['a', 'b', 'c'], '~');
  53483. * // => 'a~b~c'
  53484. */
  53485. function join(array, separator) {
  53486. return array == null ? '' : nativeJoin.call(array, separator);
  53487. }
  53488. /**
  53489. * Gets the last element of `array`.
  53490. *
  53491. * @static
  53492. * @memberOf _
  53493. * @since 0.1.0
  53494. * @category Array
  53495. * @param {Array} array The array to query.
  53496. * @returns {*} Returns the last element of `array`.
  53497. * @example
  53498. *
  53499. * _.last([1, 2, 3]);
  53500. * // => 3
  53501. */
  53502. function last(array) {
  53503. var length = array == null ? 0 : array.length;
  53504. return length ? array[length - 1] : undefined;
  53505. }
  53506. /**
  53507. * This method is like `_.indexOf` except that it iterates over elements of
  53508. * `array` from right to left.
  53509. *
  53510. * @static
  53511. * @memberOf _
  53512. * @since 0.1.0
  53513. * @category Array
  53514. * @param {Array} array The array to inspect.
  53515. * @param {*} value The value to search for.
  53516. * @param {number} [fromIndex=array.length-1] The index to search from.
  53517. * @returns {number} Returns the index of the matched value, else `-1`.
  53518. * @example
  53519. *
  53520. * _.lastIndexOf([1, 2, 1, 2], 2);
  53521. * // => 3
  53522. *
  53523. * // Search from the `fromIndex`.
  53524. * _.lastIndexOf([1, 2, 1, 2], 2, 2);
  53525. * // => 1
  53526. */
  53527. function lastIndexOf(array, value, fromIndex) {
  53528. var length = array == null ? 0 : array.length;
  53529. if (!length) {
  53530. return -1;
  53531. }
  53532. var index = length;
  53533. if (fromIndex !== undefined) {
  53534. index = toInteger(fromIndex);
  53535. index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
  53536. }
  53537. return value === value
  53538. ? strictLastIndexOf(array, value, index)
  53539. : baseFindIndex(array, baseIsNaN, index, true);
  53540. }
  53541. /**
  53542. * Gets the element at index `n` of `array`. If `n` is negative, the nth
  53543. * element from the end is returned.
  53544. *
  53545. * @static
  53546. * @memberOf _
  53547. * @since 4.11.0
  53548. * @category Array
  53549. * @param {Array} array The array to query.
  53550. * @param {number} [n=0] The index of the element to return.
  53551. * @returns {*} Returns the nth element of `array`.
  53552. * @example
  53553. *
  53554. * var array = ['a', 'b', 'c', 'd'];
  53555. *
  53556. * _.nth(array, 1);
  53557. * // => 'b'
  53558. *
  53559. * _.nth(array, -2);
  53560. * // => 'c';
  53561. */
  53562. function nth(array, n) {
  53563. return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
  53564. }
  53565. /**
  53566. * Removes all given values from `array` using
  53567. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  53568. * for equality comparisons.
  53569. *
  53570. * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
  53571. * to remove elements from an array by predicate.
  53572. *
  53573. * @static
  53574. * @memberOf _
  53575. * @since 2.0.0
  53576. * @category Array
  53577. * @param {Array} array The array to modify.
  53578. * @param {...*} [values] The values to remove.
  53579. * @returns {Array} Returns `array`.
  53580. * @example
  53581. *
  53582. * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
  53583. *
  53584. * _.pull(array, 'a', 'c');
  53585. * console.log(array);
  53586. * // => ['b', 'b']
  53587. */
  53588. var pull = baseRest(pullAll);
  53589. /**
  53590. * This method is like `_.pull` except that it accepts an array of values to remove.
  53591. *
  53592. * **Note:** Unlike `_.difference`, this method mutates `array`.
  53593. *
  53594. * @static
  53595. * @memberOf _
  53596. * @since 4.0.0
  53597. * @category Array
  53598. * @param {Array} array The array to modify.
  53599. * @param {Array} values The values to remove.
  53600. * @returns {Array} Returns `array`.
  53601. * @example
  53602. *
  53603. * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
  53604. *
  53605. * _.pullAll(array, ['a', 'c']);
  53606. * console.log(array);
  53607. * // => ['b', 'b']
  53608. */
  53609. function pullAll(array, values) {
  53610. return (array && array.length && values && values.length)
  53611. ? basePullAll(array, values)
  53612. : array;
  53613. }
  53614. /**
  53615. * This method is like `_.pullAll` except that it accepts `iteratee` which is
  53616. * invoked for each element of `array` and `values` to generate the criterion
  53617. * by which they're compared. The iteratee is invoked with one argument: (value).
  53618. *
  53619. * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
  53620. *
  53621. * @static
  53622. * @memberOf _
  53623. * @since 4.0.0
  53624. * @category Array
  53625. * @param {Array} array The array to modify.
  53626. * @param {Array} values The values to remove.
  53627. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  53628. * @returns {Array} Returns `array`.
  53629. * @example
  53630. *
  53631. * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
  53632. *
  53633. * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
  53634. * console.log(array);
  53635. * // => [{ 'x': 2 }]
  53636. */
  53637. function pullAllBy(array, values, iteratee) {
  53638. return (array && array.length && values && values.length)
  53639. ? basePullAll(array, values, getIteratee(iteratee, 2))
  53640. : array;
  53641. }
  53642. /**
  53643. * This method is like `_.pullAll` except that it accepts `comparator` which
  53644. * is invoked to compare elements of `array` to `values`. The comparator is
  53645. * invoked with two arguments: (arrVal, othVal).
  53646. *
  53647. * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
  53648. *
  53649. * @static
  53650. * @memberOf _
  53651. * @since 4.6.0
  53652. * @category Array
  53653. * @param {Array} array The array to modify.
  53654. * @param {Array} values The values to remove.
  53655. * @param {Function} [comparator] The comparator invoked per element.
  53656. * @returns {Array} Returns `array`.
  53657. * @example
  53658. *
  53659. * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
  53660. *
  53661. * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
  53662. * console.log(array);
  53663. * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
  53664. */
  53665. function pullAllWith(array, values, comparator) {
  53666. return (array && array.length && values && values.length)
  53667. ? basePullAll(array, values, undefined, comparator)
  53668. : array;
  53669. }
  53670. /**
  53671. * Removes elements from `array` corresponding to `indexes` and returns an
  53672. * array of removed elements.
  53673. *
  53674. * **Note:** Unlike `_.at`, this method mutates `array`.
  53675. *
  53676. * @static
  53677. * @memberOf _
  53678. * @since 3.0.0
  53679. * @category Array
  53680. * @param {Array} array The array to modify.
  53681. * @param {...(number|number[])} [indexes] The indexes of elements to remove.
  53682. * @returns {Array} Returns the new array of removed elements.
  53683. * @example
  53684. *
  53685. * var array = ['a', 'b', 'c', 'd'];
  53686. * var pulled = _.pullAt(array, [1, 3]);
  53687. *
  53688. * console.log(array);
  53689. * // => ['a', 'c']
  53690. *
  53691. * console.log(pulled);
  53692. * // => ['b', 'd']
  53693. */
  53694. var pullAt = flatRest(function(array, indexes) {
  53695. var length = array == null ? 0 : array.length,
  53696. result = baseAt(array, indexes);
  53697. basePullAt(array, arrayMap(indexes, function(index) {
  53698. return isIndex(index, length) ? +index : index;
  53699. }).sort(compareAscending));
  53700. return result;
  53701. });
  53702. /**
  53703. * Removes all elements from `array` that `predicate` returns truthy for
  53704. * and returns an array of the removed elements. The predicate is invoked
  53705. * with three arguments: (value, index, array).
  53706. *
  53707. * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
  53708. * to pull elements from an array by value.
  53709. *
  53710. * @static
  53711. * @memberOf _
  53712. * @since 2.0.0
  53713. * @category Array
  53714. * @param {Array} array The array to modify.
  53715. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  53716. * @returns {Array} Returns the new array of removed elements.
  53717. * @example
  53718. *
  53719. * var array = [1, 2, 3, 4];
  53720. * var evens = _.remove(array, function(n) {
  53721. * return n % 2 == 0;
  53722. * });
  53723. *
  53724. * console.log(array);
  53725. * // => [1, 3]
  53726. *
  53727. * console.log(evens);
  53728. * // => [2, 4]
  53729. */
  53730. function remove(array, predicate) {
  53731. var result = [];
  53732. if (!(array && array.length)) {
  53733. return result;
  53734. }
  53735. var index = -1,
  53736. indexes = [],
  53737. length = array.length;
  53738. predicate = getIteratee(predicate, 3);
  53739. while (++index < length) {
  53740. var value = array[index];
  53741. if (predicate(value, index, array)) {
  53742. result.push(value);
  53743. indexes.push(index);
  53744. }
  53745. }
  53746. basePullAt(array, indexes);
  53747. return result;
  53748. }
  53749. /**
  53750. * Reverses `array` so that the first element becomes the last, the second
  53751. * element becomes the second to last, and so on.
  53752. *
  53753. * **Note:** This method mutates `array` and is based on
  53754. * [`Array#reverse`](https://mdn.io/Array/reverse).
  53755. *
  53756. * @static
  53757. * @memberOf _
  53758. * @since 4.0.0
  53759. * @category Array
  53760. * @param {Array} array The array to modify.
  53761. * @returns {Array} Returns `array`.
  53762. * @example
  53763. *
  53764. * var array = [1, 2, 3];
  53765. *
  53766. * _.reverse(array);
  53767. * // => [3, 2, 1]
  53768. *
  53769. * console.log(array);
  53770. * // => [3, 2, 1]
  53771. */
  53772. function reverse(array) {
  53773. return array == null ? array : nativeReverse.call(array);
  53774. }
  53775. /**
  53776. * Creates a slice of `array` from `start` up to, but not including, `end`.
  53777. *
  53778. * **Note:** This method is used instead of
  53779. * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
  53780. * returned.
  53781. *
  53782. * @static
  53783. * @memberOf _
  53784. * @since 3.0.0
  53785. * @category Array
  53786. * @param {Array} array The array to slice.
  53787. * @param {number} [start=0] The start position.
  53788. * @param {number} [end=array.length] The end position.
  53789. * @returns {Array} Returns the slice of `array`.
  53790. */
  53791. function slice(array, start, end) {
  53792. var length = array == null ? 0 : array.length;
  53793. if (!length) {
  53794. return [];
  53795. }
  53796. if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
  53797. start = 0;
  53798. end = length;
  53799. }
  53800. else {
  53801. start = start == null ? 0 : toInteger(start);
  53802. end = end === undefined ? length : toInteger(end);
  53803. }
  53804. return baseSlice(array, start, end);
  53805. }
  53806. /**
  53807. * Uses a binary search to determine the lowest index at which `value`
  53808. * should be inserted into `array` in order to maintain its sort order.
  53809. *
  53810. * @static
  53811. * @memberOf _
  53812. * @since 0.1.0
  53813. * @category Array
  53814. * @param {Array} array The sorted array to inspect.
  53815. * @param {*} value The value to evaluate.
  53816. * @returns {number} Returns the index at which `value` should be inserted
  53817. * into `array`.
  53818. * @example
  53819. *
  53820. * _.sortedIndex([30, 50], 40);
  53821. * // => 1
  53822. */
  53823. function sortedIndex(array, value) {
  53824. return baseSortedIndex(array, value);
  53825. }
  53826. /**
  53827. * This method is like `_.sortedIndex` except that it accepts `iteratee`
  53828. * which is invoked for `value` and each element of `array` to compute their
  53829. * sort ranking. The iteratee is invoked with one argument: (value).
  53830. *
  53831. * @static
  53832. * @memberOf _
  53833. * @since 4.0.0
  53834. * @category Array
  53835. * @param {Array} array The sorted array to inspect.
  53836. * @param {*} value The value to evaluate.
  53837. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  53838. * @returns {number} Returns the index at which `value` should be inserted
  53839. * into `array`.
  53840. * @example
  53841. *
  53842. * var objects = [{ 'x': 4 }, { 'x': 5 }];
  53843. *
  53844. * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
  53845. * // => 0
  53846. *
  53847. * // The `_.property` iteratee shorthand.
  53848. * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
  53849. * // => 0
  53850. */
  53851. function sortedIndexBy(array, value, iteratee) {
  53852. return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
  53853. }
  53854. /**
  53855. * This method is like `_.indexOf` except that it performs a binary
  53856. * search on a sorted `array`.
  53857. *
  53858. * @static
  53859. * @memberOf _
  53860. * @since 4.0.0
  53861. * @category Array
  53862. * @param {Array} array The array to inspect.
  53863. * @param {*} value The value to search for.
  53864. * @returns {number} Returns the index of the matched value, else `-1`.
  53865. * @example
  53866. *
  53867. * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
  53868. * // => 1
  53869. */
  53870. function sortedIndexOf(array, value) {
  53871. var length = array == null ? 0 : array.length;
  53872. if (length) {
  53873. var index = baseSortedIndex(array, value);
  53874. if (index < length && eq(array[index], value)) {
  53875. return index;
  53876. }
  53877. }
  53878. return -1;
  53879. }
  53880. /**
  53881. * This method is like `_.sortedIndex` except that it returns the highest
  53882. * index at which `value` should be inserted into `array` in order to
  53883. * maintain its sort order.
  53884. *
  53885. * @static
  53886. * @memberOf _
  53887. * @since 3.0.0
  53888. * @category Array
  53889. * @param {Array} array The sorted array to inspect.
  53890. * @param {*} value The value to evaluate.
  53891. * @returns {number} Returns the index at which `value` should be inserted
  53892. * into `array`.
  53893. * @example
  53894. *
  53895. * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
  53896. * // => 4
  53897. */
  53898. function sortedLastIndex(array, value) {
  53899. return baseSortedIndex(array, value, true);
  53900. }
  53901. /**
  53902. * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
  53903. * which is invoked for `value` and each element of `array` to compute their
  53904. * sort ranking. The iteratee is invoked with one argument: (value).
  53905. *
  53906. * @static
  53907. * @memberOf _
  53908. * @since 4.0.0
  53909. * @category Array
  53910. * @param {Array} array The sorted array to inspect.
  53911. * @param {*} value The value to evaluate.
  53912. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  53913. * @returns {number} Returns the index at which `value` should be inserted
  53914. * into `array`.
  53915. * @example
  53916. *
  53917. * var objects = [{ 'x': 4 }, { 'x': 5 }];
  53918. *
  53919. * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
  53920. * // => 1
  53921. *
  53922. * // The `_.property` iteratee shorthand.
  53923. * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
  53924. * // => 1
  53925. */
  53926. function sortedLastIndexBy(array, value, iteratee) {
  53927. return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
  53928. }
  53929. /**
  53930. * This method is like `_.lastIndexOf` except that it performs a binary
  53931. * search on a sorted `array`.
  53932. *
  53933. * @static
  53934. * @memberOf _
  53935. * @since 4.0.0
  53936. * @category Array
  53937. * @param {Array} array The array to inspect.
  53938. * @param {*} value The value to search for.
  53939. * @returns {number} Returns the index of the matched value, else `-1`.
  53940. * @example
  53941. *
  53942. * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
  53943. * // => 3
  53944. */
  53945. function sortedLastIndexOf(array, value) {
  53946. var length = array == null ? 0 : array.length;
  53947. if (length) {
  53948. var index = baseSortedIndex(array, value, true) - 1;
  53949. if (eq(array[index], value)) {
  53950. return index;
  53951. }
  53952. }
  53953. return -1;
  53954. }
  53955. /**
  53956. * This method is like `_.uniq` except that it's designed and optimized
  53957. * for sorted arrays.
  53958. *
  53959. * @static
  53960. * @memberOf _
  53961. * @since 4.0.0
  53962. * @category Array
  53963. * @param {Array} array The array to inspect.
  53964. * @returns {Array} Returns the new duplicate free array.
  53965. * @example
  53966. *
  53967. * _.sortedUniq([1, 1, 2]);
  53968. * // => [1, 2]
  53969. */
  53970. function sortedUniq(array) {
  53971. return (array && array.length)
  53972. ? baseSortedUniq(array)
  53973. : [];
  53974. }
  53975. /**
  53976. * This method is like `_.uniqBy` except that it's designed and optimized
  53977. * for sorted arrays.
  53978. *
  53979. * @static
  53980. * @memberOf _
  53981. * @since 4.0.0
  53982. * @category Array
  53983. * @param {Array} array The array to inspect.
  53984. * @param {Function} [iteratee] The iteratee invoked per element.
  53985. * @returns {Array} Returns the new duplicate free array.
  53986. * @example
  53987. *
  53988. * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
  53989. * // => [1.1, 2.3]
  53990. */
  53991. function sortedUniqBy(array, iteratee) {
  53992. return (array && array.length)
  53993. ? baseSortedUniq(array, getIteratee(iteratee, 2))
  53994. : [];
  53995. }
  53996. /**
  53997. * Gets all but the first element of `array`.
  53998. *
  53999. * @static
  54000. * @memberOf _
  54001. * @since 4.0.0
  54002. * @category Array
  54003. * @param {Array} array The array to query.
  54004. * @returns {Array} Returns the slice of `array`.
  54005. * @example
  54006. *
  54007. * _.tail([1, 2, 3]);
  54008. * // => [2, 3]
  54009. */
  54010. function tail(array) {
  54011. var length = array == null ? 0 : array.length;
  54012. return length ? baseSlice(array, 1, length) : [];
  54013. }
  54014. /**
  54015. * Creates a slice of `array` with `n` elements taken from the beginning.
  54016. *
  54017. * @static
  54018. * @memberOf _
  54019. * @since 0.1.0
  54020. * @category Array
  54021. * @param {Array} array The array to query.
  54022. * @param {number} [n=1] The number of elements to take.
  54023. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  54024. * @returns {Array} Returns the slice of `array`.
  54025. * @example
  54026. *
  54027. * _.take([1, 2, 3]);
  54028. * // => [1]
  54029. *
  54030. * _.take([1, 2, 3], 2);
  54031. * // => [1, 2]
  54032. *
  54033. * _.take([1, 2, 3], 5);
  54034. * // => [1, 2, 3]
  54035. *
  54036. * _.take([1, 2, 3], 0);
  54037. * // => []
  54038. */
  54039. function take(array, n, guard) {
  54040. if (!(array && array.length)) {
  54041. return [];
  54042. }
  54043. n = (guard || n === undefined) ? 1 : toInteger(n);
  54044. return baseSlice(array, 0, n < 0 ? 0 : n);
  54045. }
  54046. /**
  54047. * Creates a slice of `array` with `n` elements taken from the end.
  54048. *
  54049. * @static
  54050. * @memberOf _
  54051. * @since 3.0.0
  54052. * @category Array
  54053. * @param {Array} array The array to query.
  54054. * @param {number} [n=1] The number of elements to take.
  54055. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  54056. * @returns {Array} Returns the slice of `array`.
  54057. * @example
  54058. *
  54059. * _.takeRight([1, 2, 3]);
  54060. * // => [3]
  54061. *
  54062. * _.takeRight([1, 2, 3], 2);
  54063. * // => [2, 3]
  54064. *
  54065. * _.takeRight([1, 2, 3], 5);
  54066. * // => [1, 2, 3]
  54067. *
  54068. * _.takeRight([1, 2, 3], 0);
  54069. * // => []
  54070. */
  54071. function takeRight(array, n, guard) {
  54072. var length = array == null ? 0 : array.length;
  54073. if (!length) {
  54074. return [];
  54075. }
  54076. n = (guard || n === undefined) ? 1 : toInteger(n);
  54077. n = length - n;
  54078. return baseSlice(array, n < 0 ? 0 : n, length);
  54079. }
  54080. /**
  54081. * Creates a slice of `array` with elements taken from the end. Elements are
  54082. * taken until `predicate` returns falsey. The predicate is invoked with
  54083. * three arguments: (value, index, array).
  54084. *
  54085. * @static
  54086. * @memberOf _
  54087. * @since 3.0.0
  54088. * @category Array
  54089. * @param {Array} array The array to query.
  54090. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  54091. * @returns {Array} Returns the slice of `array`.
  54092. * @example
  54093. *
  54094. * var users = [
  54095. * { 'user': 'barney', 'active': true },
  54096. * { 'user': 'fred', 'active': false },
  54097. * { 'user': 'pebbles', 'active': false }
  54098. * ];
  54099. *
  54100. * _.takeRightWhile(users, function(o) { return !o.active; });
  54101. * // => objects for ['fred', 'pebbles']
  54102. *
  54103. * // The `_.matches` iteratee shorthand.
  54104. * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
  54105. * // => objects for ['pebbles']
  54106. *
  54107. * // The `_.matchesProperty` iteratee shorthand.
  54108. * _.takeRightWhile(users, ['active', false]);
  54109. * // => objects for ['fred', 'pebbles']
  54110. *
  54111. * // The `_.property` iteratee shorthand.
  54112. * _.takeRightWhile(users, 'active');
  54113. * // => []
  54114. */
  54115. function takeRightWhile(array, predicate) {
  54116. return (array && array.length)
  54117. ? baseWhile(array, getIteratee(predicate, 3), false, true)
  54118. : [];
  54119. }
  54120. /**
  54121. * Creates a slice of `array` with elements taken from the beginning. Elements
  54122. * are taken until `predicate` returns falsey. The predicate is invoked with
  54123. * three arguments: (value, index, array).
  54124. *
  54125. * @static
  54126. * @memberOf _
  54127. * @since 3.0.0
  54128. * @category Array
  54129. * @param {Array} array The array to query.
  54130. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  54131. * @returns {Array} Returns the slice of `array`.
  54132. * @example
  54133. *
  54134. * var users = [
  54135. * { 'user': 'barney', 'active': false },
  54136. * { 'user': 'fred', 'active': false },
  54137. * { 'user': 'pebbles', 'active': true }
  54138. * ];
  54139. *
  54140. * _.takeWhile(users, function(o) { return !o.active; });
  54141. * // => objects for ['barney', 'fred']
  54142. *
  54143. * // The `_.matches` iteratee shorthand.
  54144. * _.takeWhile(users, { 'user': 'barney', 'active': false });
  54145. * // => objects for ['barney']
  54146. *
  54147. * // The `_.matchesProperty` iteratee shorthand.
  54148. * _.takeWhile(users, ['active', false]);
  54149. * // => objects for ['barney', 'fred']
  54150. *
  54151. * // The `_.property` iteratee shorthand.
  54152. * _.takeWhile(users, 'active');
  54153. * // => []
  54154. */
  54155. function takeWhile(array, predicate) {
  54156. return (array && array.length)
  54157. ? baseWhile(array, getIteratee(predicate, 3))
  54158. : [];
  54159. }
  54160. /**
  54161. * Creates an array of unique values, in order, from all given arrays using
  54162. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  54163. * for equality comparisons.
  54164. *
  54165. * @static
  54166. * @memberOf _
  54167. * @since 0.1.0
  54168. * @category Array
  54169. * @param {...Array} [arrays] The arrays to inspect.
  54170. * @returns {Array} Returns the new array of combined values.
  54171. * @example
  54172. *
  54173. * _.union([2], [1, 2]);
  54174. * // => [2, 1]
  54175. */
  54176. var union = baseRest(function(arrays) {
  54177. return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
  54178. });
  54179. /**
  54180. * This method is like `_.union` except that it accepts `iteratee` which is
  54181. * invoked for each element of each `arrays` to generate the criterion by
  54182. * which uniqueness is computed. Result values are chosen from the first
  54183. * array in which the value occurs. The iteratee is invoked with one argument:
  54184. * (value).
  54185. *
  54186. * @static
  54187. * @memberOf _
  54188. * @since 4.0.0
  54189. * @category Array
  54190. * @param {...Array} [arrays] The arrays to inspect.
  54191. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  54192. * @returns {Array} Returns the new array of combined values.
  54193. * @example
  54194. *
  54195. * _.unionBy([2.1], [1.2, 2.3], Math.floor);
  54196. * // => [2.1, 1.2]
  54197. *
  54198. * // The `_.property` iteratee shorthand.
  54199. * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
  54200. * // => [{ 'x': 1 }, { 'x': 2 }]
  54201. */
  54202. var unionBy = baseRest(function(arrays) {
  54203. var iteratee = last(arrays);
  54204. if (isArrayLikeObject(iteratee)) {
  54205. iteratee = undefined;
  54206. }
  54207. return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
  54208. });
  54209. /**
  54210. * This method is like `_.union` except that it accepts `comparator` which
  54211. * is invoked to compare elements of `arrays`. Result values are chosen from
  54212. * the first array in which the value occurs. The comparator is invoked
  54213. * with two arguments: (arrVal, othVal).
  54214. *
  54215. * @static
  54216. * @memberOf _
  54217. * @since 4.0.0
  54218. * @category Array
  54219. * @param {...Array} [arrays] The arrays to inspect.
  54220. * @param {Function} [comparator] The comparator invoked per element.
  54221. * @returns {Array} Returns the new array of combined values.
  54222. * @example
  54223. *
  54224. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
  54225. * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
  54226. *
  54227. * _.unionWith(objects, others, _.isEqual);
  54228. * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
  54229. */
  54230. var unionWith = baseRest(function(arrays) {
  54231. var comparator = last(arrays);
  54232. comparator = typeof comparator == 'function' ? comparator : undefined;
  54233. return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
  54234. });
  54235. /**
  54236. * Creates a duplicate-free version of an array, using
  54237. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  54238. * for equality comparisons, in which only the first occurrence of each element
  54239. * is kept. The order of result values is determined by the order they occur
  54240. * in the array.
  54241. *
  54242. * @static
  54243. * @memberOf _
  54244. * @since 0.1.0
  54245. * @category Array
  54246. * @param {Array} array The array to inspect.
  54247. * @returns {Array} Returns the new duplicate free array.
  54248. * @example
  54249. *
  54250. * _.uniq([2, 1, 2]);
  54251. * // => [2, 1]
  54252. */
  54253. function uniq(array) {
  54254. return (array && array.length) ? baseUniq(array) : [];
  54255. }
  54256. /**
  54257. * This method is like `_.uniq` except that it accepts `iteratee` which is
  54258. * invoked for each element in `array` to generate the criterion by which
  54259. * uniqueness is computed. The order of result values is determined by the
  54260. * order they occur in the array. The iteratee is invoked with one argument:
  54261. * (value).
  54262. *
  54263. * @static
  54264. * @memberOf _
  54265. * @since 4.0.0
  54266. * @category Array
  54267. * @param {Array} array The array to inspect.
  54268. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  54269. * @returns {Array} Returns the new duplicate free array.
  54270. * @example
  54271. *
  54272. * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
  54273. * // => [2.1, 1.2]
  54274. *
  54275. * // The `_.property` iteratee shorthand.
  54276. * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
  54277. * // => [{ 'x': 1 }, { 'x': 2 }]
  54278. */
  54279. function uniqBy(array, iteratee) {
  54280. return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
  54281. }
  54282. /**
  54283. * This method is like `_.uniq` except that it accepts `comparator` which
  54284. * is invoked to compare elements of `array`. The order of result values is
  54285. * determined by the order they occur in the array.The comparator is invoked
  54286. * with two arguments: (arrVal, othVal).
  54287. *
  54288. * @static
  54289. * @memberOf _
  54290. * @since 4.0.0
  54291. * @category Array
  54292. * @param {Array} array The array to inspect.
  54293. * @param {Function} [comparator] The comparator invoked per element.
  54294. * @returns {Array} Returns the new duplicate free array.
  54295. * @example
  54296. *
  54297. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
  54298. *
  54299. * _.uniqWith(objects, _.isEqual);
  54300. * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
  54301. */
  54302. function uniqWith(array, comparator) {
  54303. comparator = typeof comparator == 'function' ? comparator : undefined;
  54304. return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
  54305. }
  54306. /**
  54307. * This method is like `_.zip` except that it accepts an array of grouped
  54308. * elements and creates an array regrouping the elements to their pre-zip
  54309. * configuration.
  54310. *
  54311. * @static
  54312. * @memberOf _
  54313. * @since 1.2.0
  54314. * @category Array
  54315. * @param {Array} array The array of grouped elements to process.
  54316. * @returns {Array} Returns the new array of regrouped elements.
  54317. * @example
  54318. *
  54319. * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
  54320. * // => [['a', 1, true], ['b', 2, false]]
  54321. *
  54322. * _.unzip(zipped);
  54323. * // => [['a', 'b'], [1, 2], [true, false]]
  54324. */
  54325. function unzip(array) {
  54326. if (!(array && array.length)) {
  54327. return [];
  54328. }
  54329. var length = 0;
  54330. array = arrayFilter(array, function(group) {
  54331. if (isArrayLikeObject(group)) {
  54332. length = nativeMax(group.length, length);
  54333. return true;
  54334. }
  54335. });
  54336. return baseTimes(length, function(index) {
  54337. return arrayMap(array, baseProperty(index));
  54338. });
  54339. }
  54340. /**
  54341. * This method is like `_.unzip` except that it accepts `iteratee` to specify
  54342. * how regrouped values should be combined. The iteratee is invoked with the
  54343. * elements of each group: (...group).
  54344. *
  54345. * @static
  54346. * @memberOf _
  54347. * @since 3.8.0
  54348. * @category Array
  54349. * @param {Array} array The array of grouped elements to process.
  54350. * @param {Function} [iteratee=_.identity] The function to combine
  54351. * regrouped values.
  54352. * @returns {Array} Returns the new array of regrouped elements.
  54353. * @example
  54354. *
  54355. * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
  54356. * // => [[1, 10, 100], [2, 20, 200]]
  54357. *
  54358. * _.unzipWith(zipped, _.add);
  54359. * // => [3, 30, 300]
  54360. */
  54361. function unzipWith(array, iteratee) {
  54362. if (!(array && array.length)) {
  54363. return [];
  54364. }
  54365. var result = unzip(array);
  54366. if (iteratee == null) {
  54367. return result;
  54368. }
  54369. return arrayMap(result, function(group) {
  54370. return apply(iteratee, undefined, group);
  54371. });
  54372. }
  54373. /**
  54374. * Creates an array excluding all given values using
  54375. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  54376. * for equality comparisons.
  54377. *
  54378. * **Note:** Unlike `_.pull`, this method returns a new array.
  54379. *
  54380. * @static
  54381. * @memberOf _
  54382. * @since 0.1.0
  54383. * @category Array
  54384. * @param {Array} array The array to inspect.
  54385. * @param {...*} [values] The values to exclude.
  54386. * @returns {Array} Returns the new array of filtered values.
  54387. * @see _.difference, _.xor
  54388. * @example
  54389. *
  54390. * _.without([2, 1, 2, 3], 1, 2);
  54391. * // => [3]
  54392. */
  54393. var without = baseRest(function(array, values) {
  54394. return isArrayLikeObject(array)
  54395. ? baseDifference(array, values)
  54396. : [];
  54397. });
  54398. /**
  54399. * Creates an array of unique values that is the
  54400. * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
  54401. * of the given arrays. The order of result values is determined by the order
  54402. * they occur in the arrays.
  54403. *
  54404. * @static
  54405. * @memberOf _
  54406. * @since 2.4.0
  54407. * @category Array
  54408. * @param {...Array} [arrays] The arrays to inspect.
  54409. * @returns {Array} Returns the new array of filtered values.
  54410. * @see _.difference, _.without
  54411. * @example
  54412. *
  54413. * _.xor([2, 1], [2, 3]);
  54414. * // => [1, 3]
  54415. */
  54416. var xor = baseRest(function(arrays) {
  54417. return baseXor(arrayFilter(arrays, isArrayLikeObject));
  54418. });
  54419. /**
  54420. * This method is like `_.xor` except that it accepts `iteratee` which is
  54421. * invoked for each element of each `arrays` to generate the criterion by
  54422. * which by which they're compared. The order of result values is determined
  54423. * by the order they occur in the arrays. The iteratee is invoked with one
  54424. * argument: (value).
  54425. *
  54426. * @static
  54427. * @memberOf _
  54428. * @since 4.0.0
  54429. * @category Array
  54430. * @param {...Array} [arrays] The arrays to inspect.
  54431. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  54432. * @returns {Array} Returns the new array of filtered values.
  54433. * @example
  54434. *
  54435. * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
  54436. * // => [1.2, 3.4]
  54437. *
  54438. * // The `_.property` iteratee shorthand.
  54439. * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
  54440. * // => [{ 'x': 2 }]
  54441. */
  54442. var xorBy = baseRest(function(arrays) {
  54443. var iteratee = last(arrays);
  54444. if (isArrayLikeObject(iteratee)) {
  54445. iteratee = undefined;
  54446. }
  54447. return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
  54448. });
  54449. /**
  54450. * This method is like `_.xor` except that it accepts `comparator` which is
  54451. * invoked to compare elements of `arrays`. The order of result values is
  54452. * determined by the order they occur in the arrays. The comparator is invoked
  54453. * with two arguments: (arrVal, othVal).
  54454. *
  54455. * @static
  54456. * @memberOf _
  54457. * @since 4.0.0
  54458. * @category Array
  54459. * @param {...Array} [arrays] The arrays to inspect.
  54460. * @param {Function} [comparator] The comparator invoked per element.
  54461. * @returns {Array} Returns the new array of filtered values.
  54462. * @example
  54463. *
  54464. * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
  54465. * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
  54466. *
  54467. * _.xorWith(objects, others, _.isEqual);
  54468. * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
  54469. */
  54470. var xorWith = baseRest(function(arrays) {
  54471. var comparator = last(arrays);
  54472. comparator = typeof comparator == 'function' ? comparator : undefined;
  54473. return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
  54474. });
  54475. /**
  54476. * Creates an array of grouped elements, the first of which contains the
  54477. * first elements of the given arrays, the second of which contains the
  54478. * second elements of the given arrays, and so on.
  54479. *
  54480. * @static
  54481. * @memberOf _
  54482. * @since 0.1.0
  54483. * @category Array
  54484. * @param {...Array} [arrays] The arrays to process.
  54485. * @returns {Array} Returns the new array of grouped elements.
  54486. * @example
  54487. *
  54488. * _.zip(['a', 'b'], [1, 2], [true, false]);
  54489. * // => [['a', 1, true], ['b', 2, false]]
  54490. */
  54491. var zip = baseRest(unzip);
  54492. /**
  54493. * This method is like `_.fromPairs` except that it accepts two arrays,
  54494. * one of property identifiers and one of corresponding values.
  54495. *
  54496. * @static
  54497. * @memberOf _
  54498. * @since 0.4.0
  54499. * @category Array
  54500. * @param {Array} [props=[]] The property identifiers.
  54501. * @param {Array} [values=[]] The property values.
  54502. * @returns {Object} Returns the new object.
  54503. * @example
  54504. *
  54505. * _.zipObject(['a', 'b'], [1, 2]);
  54506. * // => { 'a': 1, 'b': 2 }
  54507. */
  54508. function zipObject(props, values) {
  54509. return baseZipObject(props || [], values || [], assignValue);
  54510. }
  54511. /**
  54512. * This method is like `_.zipObject` except that it supports property paths.
  54513. *
  54514. * @static
  54515. * @memberOf _
  54516. * @since 4.1.0
  54517. * @category Array
  54518. * @param {Array} [props=[]] The property identifiers.
  54519. * @param {Array} [values=[]] The property values.
  54520. * @returns {Object} Returns the new object.
  54521. * @example
  54522. *
  54523. * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
  54524. * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
  54525. */
  54526. function zipObjectDeep(props, values) {
  54527. return baseZipObject(props || [], values || [], baseSet);
  54528. }
  54529. /**
  54530. * This method is like `_.zip` except that it accepts `iteratee` to specify
  54531. * how grouped values should be combined. The iteratee is invoked with the
  54532. * elements of each group: (...group).
  54533. *
  54534. * @static
  54535. * @memberOf _
  54536. * @since 3.8.0
  54537. * @category Array
  54538. * @param {...Array} [arrays] The arrays to process.
  54539. * @param {Function} [iteratee=_.identity] The function to combine
  54540. * grouped values.
  54541. * @returns {Array} Returns the new array of grouped elements.
  54542. * @example
  54543. *
  54544. * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
  54545. * return a + b + c;
  54546. * });
  54547. * // => [111, 222]
  54548. */
  54549. var zipWith = baseRest(function(arrays) {
  54550. var length = arrays.length,
  54551. iteratee = length > 1 ? arrays[length - 1] : undefined;
  54552. iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
  54553. return unzipWith(arrays, iteratee);
  54554. });
  54555. /*------------------------------------------------------------------------*/
  54556. /**
  54557. * Creates a `lodash` wrapper instance that wraps `value` with explicit method
  54558. * chain sequences enabled. The result of such sequences must be unwrapped
  54559. * with `_#value`.
  54560. *
  54561. * @static
  54562. * @memberOf _
  54563. * @since 1.3.0
  54564. * @category Seq
  54565. * @param {*} value The value to wrap.
  54566. * @returns {Object} Returns the new `lodash` wrapper instance.
  54567. * @example
  54568. *
  54569. * var users = [
  54570. * { 'user': 'barney', 'age': 36 },
  54571. * { 'user': 'fred', 'age': 40 },
  54572. * { 'user': 'pebbles', 'age': 1 }
  54573. * ];
  54574. *
  54575. * var youngest = _
  54576. * .chain(users)
  54577. * .sortBy('age')
  54578. * .map(function(o) {
  54579. * return o.user + ' is ' + o.age;
  54580. * })
  54581. * .head()
  54582. * .value();
  54583. * // => 'pebbles is 1'
  54584. */
  54585. function chain(value) {
  54586. var result = lodash(value);
  54587. result.__chain__ = true;
  54588. return result;
  54589. }
  54590. /**
  54591. * This method invokes `interceptor` and returns `value`. The interceptor
  54592. * is invoked with one argument; (value). The purpose of this method is to
  54593. * "tap into" a method chain sequence in order to modify intermediate results.
  54594. *
  54595. * @static
  54596. * @memberOf _
  54597. * @since 0.1.0
  54598. * @category Seq
  54599. * @param {*} value The value to provide to `interceptor`.
  54600. * @param {Function} interceptor The function to invoke.
  54601. * @returns {*} Returns `value`.
  54602. * @example
  54603. *
  54604. * _([1, 2, 3])
  54605. * .tap(function(array) {
  54606. * // Mutate input array.
  54607. * array.pop();
  54608. * })
  54609. * .reverse()
  54610. * .value();
  54611. * // => [2, 1]
  54612. */
  54613. function tap(value, interceptor) {
  54614. interceptor(value);
  54615. return value;
  54616. }
  54617. /**
  54618. * This method is like `_.tap` except that it returns the result of `interceptor`.
  54619. * The purpose of this method is to "pass thru" values replacing intermediate
  54620. * results in a method chain sequence.
  54621. *
  54622. * @static
  54623. * @memberOf _
  54624. * @since 3.0.0
  54625. * @category Seq
  54626. * @param {*} value The value to provide to `interceptor`.
  54627. * @param {Function} interceptor The function to invoke.
  54628. * @returns {*} Returns the result of `interceptor`.
  54629. * @example
  54630. *
  54631. * _(' abc ')
  54632. * .chain()
  54633. * .trim()
  54634. * .thru(function(value) {
  54635. * return [value];
  54636. * })
  54637. * .value();
  54638. * // => ['abc']
  54639. */
  54640. function thru(value, interceptor) {
  54641. return interceptor(value);
  54642. }
  54643. /**
  54644. * This method is the wrapper version of `_.at`.
  54645. *
  54646. * @name at
  54647. * @memberOf _
  54648. * @since 1.0.0
  54649. * @category Seq
  54650. * @param {...(string|string[])} [paths] The property paths to pick.
  54651. * @returns {Object} Returns the new `lodash` wrapper instance.
  54652. * @example
  54653. *
  54654. * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
  54655. *
  54656. * _(object).at(['a[0].b.c', 'a[1]']).value();
  54657. * // => [3, 4]
  54658. */
  54659. var wrapperAt = flatRest(function(paths) {
  54660. var length = paths.length,
  54661. start = length ? paths[0] : 0,
  54662. value = this.__wrapped__,
  54663. interceptor = function(object) { return baseAt(object, paths); };
  54664. if (length > 1 || this.__actions__.length ||
  54665. !(value instanceof LazyWrapper) || !isIndex(start)) {
  54666. return this.thru(interceptor);
  54667. }
  54668. value = value.slice(start, +start + (length ? 1 : 0));
  54669. value.__actions__.push({
  54670. 'func': thru,
  54671. 'args': [interceptor],
  54672. 'thisArg': undefined
  54673. });
  54674. return new LodashWrapper(value, this.__chain__).thru(function(array) {
  54675. if (length && !array.length) {
  54676. array.push(undefined);
  54677. }
  54678. return array;
  54679. });
  54680. });
  54681. /**
  54682. * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
  54683. *
  54684. * @name chain
  54685. * @memberOf _
  54686. * @since 0.1.0
  54687. * @category Seq
  54688. * @returns {Object} Returns the new `lodash` wrapper instance.
  54689. * @example
  54690. *
  54691. * var users = [
  54692. * { 'user': 'barney', 'age': 36 },
  54693. * { 'user': 'fred', 'age': 40 }
  54694. * ];
  54695. *
  54696. * // A sequence without explicit chaining.
  54697. * _(users).head();
  54698. * // => { 'user': 'barney', 'age': 36 }
  54699. *
  54700. * // A sequence with explicit chaining.
  54701. * _(users)
  54702. * .chain()
  54703. * .head()
  54704. * .pick('user')
  54705. * .value();
  54706. * // => { 'user': 'barney' }
  54707. */
  54708. function wrapperChain() {
  54709. return chain(this);
  54710. }
  54711. /**
  54712. * Executes the chain sequence and returns the wrapped result.
  54713. *
  54714. * @name commit
  54715. * @memberOf _
  54716. * @since 3.2.0
  54717. * @category Seq
  54718. * @returns {Object} Returns the new `lodash` wrapper instance.
  54719. * @example
  54720. *
  54721. * var array = [1, 2];
  54722. * var wrapped = _(array).push(3);
  54723. *
  54724. * console.log(array);
  54725. * // => [1, 2]
  54726. *
  54727. * wrapped = wrapped.commit();
  54728. * console.log(array);
  54729. * // => [1, 2, 3]
  54730. *
  54731. * wrapped.last();
  54732. * // => 3
  54733. *
  54734. * console.log(array);
  54735. * // => [1, 2, 3]
  54736. */
  54737. function wrapperCommit() {
  54738. return new LodashWrapper(this.value(), this.__chain__);
  54739. }
  54740. /**
  54741. * Gets the next value on a wrapped object following the
  54742. * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
  54743. *
  54744. * @name next
  54745. * @memberOf _
  54746. * @since 4.0.0
  54747. * @category Seq
  54748. * @returns {Object} Returns the next iterator value.
  54749. * @example
  54750. *
  54751. * var wrapped = _([1, 2]);
  54752. *
  54753. * wrapped.next();
  54754. * // => { 'done': false, 'value': 1 }
  54755. *
  54756. * wrapped.next();
  54757. * // => { 'done': false, 'value': 2 }
  54758. *
  54759. * wrapped.next();
  54760. * // => { 'done': true, 'value': undefined }
  54761. */
  54762. function wrapperNext() {
  54763. if (this.__values__ === undefined) {
  54764. this.__values__ = toArray(this.value());
  54765. }
  54766. var done = this.__index__ >= this.__values__.length,
  54767. value = done ? undefined : this.__values__[this.__index__++];
  54768. return { 'done': done, 'value': value };
  54769. }
  54770. /**
  54771. * Enables the wrapper to be iterable.
  54772. *
  54773. * @name Symbol.iterator
  54774. * @memberOf _
  54775. * @since 4.0.0
  54776. * @category Seq
  54777. * @returns {Object} Returns the wrapper object.
  54778. * @example
  54779. *
  54780. * var wrapped = _([1, 2]);
  54781. *
  54782. * wrapped[Symbol.iterator]() === wrapped;
  54783. * // => true
  54784. *
  54785. * Array.from(wrapped);
  54786. * // => [1, 2]
  54787. */
  54788. function wrapperToIterator() {
  54789. return this;
  54790. }
  54791. /**
  54792. * Creates a clone of the chain sequence planting `value` as the wrapped value.
  54793. *
  54794. * @name plant
  54795. * @memberOf _
  54796. * @since 3.2.0
  54797. * @category Seq
  54798. * @param {*} value The value to plant.
  54799. * @returns {Object} Returns the new `lodash` wrapper instance.
  54800. * @example
  54801. *
  54802. * function square(n) {
  54803. * return n * n;
  54804. * }
  54805. *
  54806. * var wrapped = _([1, 2]).map(square);
  54807. * var other = wrapped.plant([3, 4]);
  54808. *
  54809. * other.value();
  54810. * // => [9, 16]
  54811. *
  54812. * wrapped.value();
  54813. * // => [1, 4]
  54814. */
  54815. function wrapperPlant(value) {
  54816. var result,
  54817. parent = this;
  54818. while (parent instanceof baseLodash) {
  54819. var clone = wrapperClone(parent);
  54820. clone.__index__ = 0;
  54821. clone.__values__ = undefined;
  54822. if (result) {
  54823. previous.__wrapped__ = clone;
  54824. } else {
  54825. result = clone;
  54826. }
  54827. var previous = clone;
  54828. parent = parent.__wrapped__;
  54829. }
  54830. previous.__wrapped__ = value;
  54831. return result;
  54832. }
  54833. /**
  54834. * This method is the wrapper version of `_.reverse`.
  54835. *
  54836. * **Note:** This method mutates the wrapped array.
  54837. *
  54838. * @name reverse
  54839. * @memberOf _
  54840. * @since 0.1.0
  54841. * @category Seq
  54842. * @returns {Object} Returns the new `lodash` wrapper instance.
  54843. * @example
  54844. *
  54845. * var array = [1, 2, 3];
  54846. *
  54847. * _(array).reverse().value()
  54848. * // => [3, 2, 1]
  54849. *
  54850. * console.log(array);
  54851. * // => [3, 2, 1]
  54852. */
  54853. function wrapperReverse() {
  54854. var value = this.__wrapped__;
  54855. if (value instanceof LazyWrapper) {
  54856. var wrapped = value;
  54857. if (this.__actions__.length) {
  54858. wrapped = new LazyWrapper(this);
  54859. }
  54860. wrapped = wrapped.reverse();
  54861. wrapped.__actions__.push({
  54862. 'func': thru,
  54863. 'args': [reverse],
  54864. 'thisArg': undefined
  54865. });
  54866. return new LodashWrapper(wrapped, this.__chain__);
  54867. }
  54868. return this.thru(reverse);
  54869. }
  54870. /**
  54871. * Executes the chain sequence to resolve the unwrapped value.
  54872. *
  54873. * @name value
  54874. * @memberOf _
  54875. * @since 0.1.0
  54876. * @alias toJSON, valueOf
  54877. * @category Seq
  54878. * @returns {*} Returns the resolved unwrapped value.
  54879. * @example
  54880. *
  54881. * _([1, 2, 3]).value();
  54882. * // => [1, 2, 3]
  54883. */
  54884. function wrapperValue() {
  54885. return baseWrapperValue(this.__wrapped__, this.__actions__);
  54886. }
  54887. /*------------------------------------------------------------------------*/
  54888. /**
  54889. * Creates an object composed of keys generated from the results of running
  54890. * each element of `collection` thru `iteratee`. The corresponding value of
  54891. * each key is the number of times the key was returned by `iteratee`. The
  54892. * iteratee is invoked with one argument: (value).
  54893. *
  54894. * @static
  54895. * @memberOf _
  54896. * @since 0.5.0
  54897. * @category Collection
  54898. * @param {Array|Object} collection The collection to iterate over.
  54899. * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
  54900. * @returns {Object} Returns the composed aggregate object.
  54901. * @example
  54902. *
  54903. * _.countBy([6.1, 4.2, 6.3], Math.floor);
  54904. * // => { '4': 1, '6': 2 }
  54905. *
  54906. * // The `_.property` iteratee shorthand.
  54907. * _.countBy(['one', 'two', 'three'], 'length');
  54908. * // => { '3': 2, '5': 1 }
  54909. */
  54910. var countBy = createAggregator(function(result, value, key) {
  54911. if (hasOwnProperty.call(result, key)) {
  54912. ++result[key];
  54913. } else {
  54914. baseAssignValue(result, key, 1);
  54915. }
  54916. });
  54917. /**
  54918. * Checks if `predicate` returns truthy for **all** elements of `collection`.
  54919. * Iteration is stopped once `predicate` returns falsey. The predicate is
  54920. * invoked with three arguments: (value, index|key, collection).
  54921. *
  54922. * **Note:** This method returns `true` for
  54923. * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
  54924. * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
  54925. * elements of empty collections.
  54926. *
  54927. * @static
  54928. * @memberOf _
  54929. * @since 0.1.0
  54930. * @category Collection
  54931. * @param {Array|Object} collection The collection to iterate over.
  54932. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  54933. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  54934. * @returns {boolean} Returns `true` if all elements pass the predicate check,
  54935. * else `false`.
  54936. * @example
  54937. *
  54938. * _.every([true, 1, null, 'yes'], Boolean);
  54939. * // => false
  54940. *
  54941. * var users = [
  54942. * { 'user': 'barney', 'age': 36, 'active': false },
  54943. * { 'user': 'fred', 'age': 40, 'active': false }
  54944. * ];
  54945. *
  54946. * // The `_.matches` iteratee shorthand.
  54947. * _.every(users, { 'user': 'barney', 'active': false });
  54948. * // => false
  54949. *
  54950. * // The `_.matchesProperty` iteratee shorthand.
  54951. * _.every(users, ['active', false]);
  54952. * // => true
  54953. *
  54954. * // The `_.property` iteratee shorthand.
  54955. * _.every(users, 'active');
  54956. * // => false
  54957. */
  54958. function every(collection, predicate, guard) {
  54959. var func = isArray(collection) ? arrayEvery : baseEvery;
  54960. if (guard && isIterateeCall(collection, predicate, guard)) {
  54961. predicate = undefined;
  54962. }
  54963. return func(collection, getIteratee(predicate, 3));
  54964. }
  54965. /**
  54966. * Iterates over elements of `collection`, returning an array of all elements
  54967. * `predicate` returns truthy for. The predicate is invoked with three
  54968. * arguments: (value, index|key, collection).
  54969. *
  54970. * **Note:** Unlike `_.remove`, this method returns a new array.
  54971. *
  54972. * @static
  54973. * @memberOf _
  54974. * @since 0.1.0
  54975. * @category Collection
  54976. * @param {Array|Object} collection The collection to iterate over.
  54977. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  54978. * @returns {Array} Returns the new filtered array.
  54979. * @see _.reject
  54980. * @example
  54981. *
  54982. * var users = [
  54983. * { 'user': 'barney', 'age': 36, 'active': true },
  54984. * { 'user': 'fred', 'age': 40, 'active': false }
  54985. * ];
  54986. *
  54987. * _.filter(users, function(o) { return !o.active; });
  54988. * // => objects for ['fred']
  54989. *
  54990. * // The `_.matches` iteratee shorthand.
  54991. * _.filter(users, { 'age': 36, 'active': true });
  54992. * // => objects for ['barney']
  54993. *
  54994. * // The `_.matchesProperty` iteratee shorthand.
  54995. * _.filter(users, ['active', false]);
  54996. * // => objects for ['fred']
  54997. *
  54998. * // The `_.property` iteratee shorthand.
  54999. * _.filter(users, 'active');
  55000. * // => objects for ['barney']
  55001. *
  55002. * // Combining several predicates using `_.overEvery` or `_.overSome`.
  55003. * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
  55004. * // => objects for ['fred', 'barney']
  55005. */
  55006. function filter(collection, predicate) {
  55007. var func = isArray(collection) ? arrayFilter : baseFilter;
  55008. return func(collection, getIteratee(predicate, 3));
  55009. }
  55010. /**
  55011. * Iterates over elements of `collection`, returning the first element
  55012. * `predicate` returns truthy for. The predicate is invoked with three
  55013. * arguments: (value, index|key, collection).
  55014. *
  55015. * @static
  55016. * @memberOf _
  55017. * @since 0.1.0
  55018. * @category Collection
  55019. * @param {Array|Object} collection The collection to inspect.
  55020. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  55021. * @param {number} [fromIndex=0] The index to search from.
  55022. * @returns {*} Returns the matched element, else `undefined`.
  55023. * @example
  55024. *
  55025. * var users = [
  55026. * { 'user': 'barney', 'age': 36, 'active': true },
  55027. * { 'user': 'fred', 'age': 40, 'active': false },
  55028. * { 'user': 'pebbles', 'age': 1, 'active': true }
  55029. * ];
  55030. *
  55031. * _.find(users, function(o) { return o.age < 40; });
  55032. * // => object for 'barney'
  55033. *
  55034. * // The `_.matches` iteratee shorthand.
  55035. * _.find(users, { 'age': 1, 'active': true });
  55036. * // => object for 'pebbles'
  55037. *
  55038. * // The `_.matchesProperty` iteratee shorthand.
  55039. * _.find(users, ['active', false]);
  55040. * // => object for 'fred'
  55041. *
  55042. * // The `_.property` iteratee shorthand.
  55043. * _.find(users, 'active');
  55044. * // => object for 'barney'
  55045. */
  55046. var find = createFind(findIndex);
  55047. /**
  55048. * This method is like `_.find` except that it iterates over elements of
  55049. * `collection` from right to left.
  55050. *
  55051. * @static
  55052. * @memberOf _
  55053. * @since 2.0.0
  55054. * @category Collection
  55055. * @param {Array|Object} collection The collection to inspect.
  55056. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  55057. * @param {number} [fromIndex=collection.length-1] The index to search from.
  55058. * @returns {*} Returns the matched element, else `undefined`.
  55059. * @example
  55060. *
  55061. * _.findLast([1, 2, 3, 4], function(n) {
  55062. * return n % 2 == 1;
  55063. * });
  55064. * // => 3
  55065. */
  55066. var findLast = createFind(findLastIndex);
  55067. /**
  55068. * Creates a flattened array of values by running each element in `collection`
  55069. * thru `iteratee` and flattening the mapped results. The iteratee is invoked
  55070. * with three arguments: (value, index|key, collection).
  55071. *
  55072. * @static
  55073. * @memberOf _
  55074. * @since 4.0.0
  55075. * @category Collection
  55076. * @param {Array|Object} collection The collection to iterate over.
  55077. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  55078. * @returns {Array} Returns the new flattened array.
  55079. * @example
  55080. *
  55081. * function duplicate(n) {
  55082. * return [n, n];
  55083. * }
  55084. *
  55085. * _.flatMap([1, 2], duplicate);
  55086. * // => [1, 1, 2, 2]
  55087. */
  55088. function flatMap(collection, iteratee) {
  55089. return baseFlatten(map(collection, iteratee), 1);
  55090. }
  55091. /**
  55092. * This method is like `_.flatMap` except that it recursively flattens the
  55093. * mapped results.
  55094. *
  55095. * @static
  55096. * @memberOf _
  55097. * @since 4.7.0
  55098. * @category Collection
  55099. * @param {Array|Object} collection The collection to iterate over.
  55100. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  55101. * @returns {Array} Returns the new flattened array.
  55102. * @example
  55103. *
  55104. * function duplicate(n) {
  55105. * return [[[n, n]]];
  55106. * }
  55107. *
  55108. * _.flatMapDeep([1, 2], duplicate);
  55109. * // => [1, 1, 2, 2]
  55110. */
  55111. function flatMapDeep(collection, iteratee) {
  55112. return baseFlatten(map(collection, iteratee), INFINITY);
  55113. }
  55114. /**
  55115. * This method is like `_.flatMap` except that it recursively flattens the
  55116. * mapped results up to `depth` times.
  55117. *
  55118. * @static
  55119. * @memberOf _
  55120. * @since 4.7.0
  55121. * @category Collection
  55122. * @param {Array|Object} collection The collection to iterate over.
  55123. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  55124. * @param {number} [depth=1] The maximum recursion depth.
  55125. * @returns {Array} Returns the new flattened array.
  55126. * @example
  55127. *
  55128. * function duplicate(n) {
  55129. * return [[[n, n]]];
  55130. * }
  55131. *
  55132. * _.flatMapDepth([1, 2], duplicate, 2);
  55133. * // => [[1, 1], [2, 2]]
  55134. */
  55135. function flatMapDepth(collection, iteratee, depth) {
  55136. depth = depth === undefined ? 1 : toInteger(depth);
  55137. return baseFlatten(map(collection, iteratee), depth);
  55138. }
  55139. /**
  55140. * Iterates over elements of `collection` and invokes `iteratee` for each element.
  55141. * The iteratee is invoked with three arguments: (value, index|key, collection).
  55142. * Iteratee functions may exit iteration early by explicitly returning `false`.
  55143. *
  55144. * **Note:** As with other "Collections" methods, objects with a "length"
  55145. * property are iterated like arrays. To avoid this behavior use `_.forIn`
  55146. * or `_.forOwn` for object iteration.
  55147. *
  55148. * @static
  55149. * @memberOf _
  55150. * @since 0.1.0
  55151. * @alias each
  55152. * @category Collection
  55153. * @param {Array|Object} collection The collection to iterate over.
  55154. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  55155. * @returns {Array|Object} Returns `collection`.
  55156. * @see _.forEachRight
  55157. * @example
  55158. *
  55159. * _.forEach([1, 2], function(value) {
  55160. * console.log(value);
  55161. * });
  55162. * // => Logs `1` then `2`.
  55163. *
  55164. * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
  55165. * console.log(key);
  55166. * });
  55167. * // => Logs 'a' then 'b' (iteration order is not guaranteed).
  55168. */
  55169. function forEach(collection, iteratee) {
  55170. var func = isArray(collection) ? arrayEach : baseEach;
  55171. return func(collection, getIteratee(iteratee, 3));
  55172. }
  55173. /**
  55174. * This method is like `_.forEach` except that it iterates over elements of
  55175. * `collection` from right to left.
  55176. *
  55177. * @static
  55178. * @memberOf _
  55179. * @since 2.0.0
  55180. * @alias eachRight
  55181. * @category Collection
  55182. * @param {Array|Object} collection The collection to iterate over.
  55183. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  55184. * @returns {Array|Object} Returns `collection`.
  55185. * @see _.forEach
  55186. * @example
  55187. *
  55188. * _.forEachRight([1, 2], function(value) {
  55189. * console.log(value);
  55190. * });
  55191. * // => Logs `2` then `1`.
  55192. */
  55193. function forEachRight(collection, iteratee) {
  55194. var func = isArray(collection) ? arrayEachRight : baseEachRight;
  55195. return func(collection, getIteratee(iteratee, 3));
  55196. }
  55197. /**
  55198. * Creates an object composed of keys generated from the results of running
  55199. * each element of `collection` thru `iteratee`. The order of grouped values
  55200. * is determined by the order they occur in `collection`. The corresponding
  55201. * value of each key is an array of elements responsible for generating the
  55202. * key. The iteratee is invoked with one argument: (value).
  55203. *
  55204. * @static
  55205. * @memberOf _
  55206. * @since 0.1.0
  55207. * @category Collection
  55208. * @param {Array|Object} collection The collection to iterate over.
  55209. * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
  55210. * @returns {Object} Returns the composed aggregate object.
  55211. * @example
  55212. *
  55213. * _.groupBy([6.1, 4.2, 6.3], Math.floor);
  55214. * // => { '4': [4.2], '6': [6.1, 6.3] }
  55215. *
  55216. * // The `_.property` iteratee shorthand.
  55217. * _.groupBy(['one', 'two', 'three'], 'length');
  55218. * // => { '3': ['one', 'two'], '5': ['three'] }
  55219. */
  55220. var groupBy = createAggregator(function(result, value, key) {
  55221. if (hasOwnProperty.call(result, key)) {
  55222. result[key].push(value);
  55223. } else {
  55224. baseAssignValue(result, key, [value]);
  55225. }
  55226. });
  55227. /**
  55228. * Checks if `value` is in `collection`. If `collection` is a string, it's
  55229. * checked for a substring of `value`, otherwise
  55230. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  55231. * is used for equality comparisons. If `fromIndex` is negative, it's used as
  55232. * the offset from the end of `collection`.
  55233. *
  55234. * @static
  55235. * @memberOf _
  55236. * @since 0.1.0
  55237. * @category Collection
  55238. * @param {Array|Object|string} collection The collection to inspect.
  55239. * @param {*} value The value to search for.
  55240. * @param {number} [fromIndex=0] The index to search from.
  55241. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
  55242. * @returns {boolean} Returns `true` if `value` is found, else `false`.
  55243. * @example
  55244. *
  55245. * _.includes([1, 2, 3], 1);
  55246. * // => true
  55247. *
  55248. * _.includes([1, 2, 3], 1, 2);
  55249. * // => false
  55250. *
  55251. * _.includes({ 'a': 1, 'b': 2 }, 1);
  55252. * // => true
  55253. *
  55254. * _.includes('abcd', 'bc');
  55255. * // => true
  55256. */
  55257. function includes(collection, value, fromIndex, guard) {
  55258. collection = isArrayLike(collection) ? collection : values(collection);
  55259. fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
  55260. var length = collection.length;
  55261. if (fromIndex < 0) {
  55262. fromIndex = nativeMax(length + fromIndex, 0);
  55263. }
  55264. return isString(collection)
  55265. ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
  55266. : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
  55267. }
  55268. /**
  55269. * Invokes the method at `path` of each element in `collection`, returning
  55270. * an array of the results of each invoked method. Any additional arguments
  55271. * are provided to each invoked method. If `path` is a function, it's invoked
  55272. * for, and `this` bound to, each element in `collection`.
  55273. *
  55274. * @static
  55275. * @memberOf _
  55276. * @since 4.0.0
  55277. * @category Collection
  55278. * @param {Array|Object} collection The collection to iterate over.
  55279. * @param {Array|Function|string} path The path of the method to invoke or
  55280. * the function invoked per iteration.
  55281. * @param {...*} [args] The arguments to invoke each method with.
  55282. * @returns {Array} Returns the array of results.
  55283. * @example
  55284. *
  55285. * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
  55286. * // => [[1, 5, 7], [1, 2, 3]]
  55287. *
  55288. * _.invokeMap([123, 456], String.prototype.split, '');
  55289. * // => [['1', '2', '3'], ['4', '5', '6']]
  55290. */
  55291. var invokeMap = baseRest(function(collection, path, args) {
  55292. var index = -1,
  55293. isFunc = typeof path == 'function',
  55294. result = isArrayLike(collection) ? Array(collection.length) : [];
  55295. baseEach(collection, function(value) {
  55296. result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
  55297. });
  55298. return result;
  55299. });
  55300. /**
  55301. * Creates an object composed of keys generated from the results of running
  55302. * each element of `collection` thru `iteratee`. The corresponding value of
  55303. * each key is the last element responsible for generating the key. The
  55304. * iteratee is invoked with one argument: (value).
  55305. *
  55306. * @static
  55307. * @memberOf _
  55308. * @since 4.0.0
  55309. * @category Collection
  55310. * @param {Array|Object} collection The collection to iterate over.
  55311. * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
  55312. * @returns {Object} Returns the composed aggregate object.
  55313. * @example
  55314. *
  55315. * var array = [
  55316. * { 'dir': 'left', 'code': 97 },
  55317. * { 'dir': 'right', 'code': 100 }
  55318. * ];
  55319. *
  55320. * _.keyBy(array, function(o) {
  55321. * return String.fromCharCode(o.code);
  55322. * });
  55323. * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
  55324. *
  55325. * _.keyBy(array, 'dir');
  55326. * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
  55327. */
  55328. var keyBy = createAggregator(function(result, value, key) {
  55329. baseAssignValue(result, key, value);
  55330. });
  55331. /**
  55332. * Creates an array of values by running each element in `collection` thru
  55333. * `iteratee`. The iteratee is invoked with three arguments:
  55334. * (value, index|key, collection).
  55335. *
  55336. * Many lodash methods are guarded to work as iteratees for methods like
  55337. * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
  55338. *
  55339. * The guarded methods are:
  55340. * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
  55341. * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
  55342. * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
  55343. * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
  55344. *
  55345. * @static
  55346. * @memberOf _
  55347. * @since 0.1.0
  55348. * @category Collection
  55349. * @param {Array|Object} collection The collection to iterate over.
  55350. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  55351. * @returns {Array} Returns the new mapped array.
  55352. * @example
  55353. *
  55354. * function square(n) {
  55355. * return n * n;
  55356. * }
  55357. *
  55358. * _.map([4, 8], square);
  55359. * // => [16, 64]
  55360. *
  55361. * _.map({ 'a': 4, 'b': 8 }, square);
  55362. * // => [16, 64] (iteration order is not guaranteed)
  55363. *
  55364. * var users = [
  55365. * { 'user': 'barney' },
  55366. * { 'user': 'fred' }
  55367. * ];
  55368. *
  55369. * // The `_.property` iteratee shorthand.
  55370. * _.map(users, 'user');
  55371. * // => ['barney', 'fred']
  55372. */
  55373. function map(collection, iteratee) {
  55374. var func = isArray(collection) ? arrayMap : baseMap;
  55375. return func(collection, getIteratee(iteratee, 3));
  55376. }
  55377. /**
  55378. * This method is like `_.sortBy` except that it allows specifying the sort
  55379. * orders of the iteratees to sort by. If `orders` is unspecified, all values
  55380. * are sorted in ascending order. Otherwise, specify an order of "desc" for
  55381. * descending or "asc" for ascending sort order of corresponding values.
  55382. *
  55383. * @static
  55384. * @memberOf _
  55385. * @since 4.0.0
  55386. * @category Collection
  55387. * @param {Array|Object} collection The collection to iterate over.
  55388. * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
  55389. * The iteratees to sort by.
  55390. * @param {string[]} [orders] The sort orders of `iteratees`.
  55391. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
  55392. * @returns {Array} Returns the new sorted array.
  55393. * @example
  55394. *
  55395. * var users = [
  55396. * { 'user': 'fred', 'age': 48 },
  55397. * { 'user': 'barney', 'age': 34 },
  55398. * { 'user': 'fred', 'age': 40 },
  55399. * { 'user': 'barney', 'age': 36 }
  55400. * ];
  55401. *
  55402. * // Sort by `user` in ascending order and by `age` in descending order.
  55403. * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
  55404. * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
  55405. */
  55406. function orderBy(collection, iteratees, orders, guard) {
  55407. if (collection == null) {
  55408. return [];
  55409. }
  55410. if (!isArray(iteratees)) {
  55411. iteratees = iteratees == null ? [] : [iteratees];
  55412. }
  55413. orders = guard ? undefined : orders;
  55414. if (!isArray(orders)) {
  55415. orders = orders == null ? [] : [orders];
  55416. }
  55417. return baseOrderBy(collection, iteratees, orders);
  55418. }
  55419. /**
  55420. * Creates an array of elements split into two groups, the first of which
  55421. * contains elements `predicate` returns truthy for, the second of which
  55422. * contains elements `predicate` returns falsey for. The predicate is
  55423. * invoked with one argument: (value).
  55424. *
  55425. * @static
  55426. * @memberOf _
  55427. * @since 3.0.0
  55428. * @category Collection
  55429. * @param {Array|Object} collection The collection to iterate over.
  55430. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  55431. * @returns {Array} Returns the array of grouped elements.
  55432. * @example
  55433. *
  55434. * var users = [
  55435. * { 'user': 'barney', 'age': 36, 'active': false },
  55436. * { 'user': 'fred', 'age': 40, 'active': true },
  55437. * { 'user': 'pebbles', 'age': 1, 'active': false }
  55438. * ];
  55439. *
  55440. * _.partition(users, function(o) { return o.active; });
  55441. * // => objects for [['fred'], ['barney', 'pebbles']]
  55442. *
  55443. * // The `_.matches` iteratee shorthand.
  55444. * _.partition(users, { 'age': 1, 'active': false });
  55445. * // => objects for [['pebbles'], ['barney', 'fred']]
  55446. *
  55447. * // The `_.matchesProperty` iteratee shorthand.
  55448. * _.partition(users, ['active', false]);
  55449. * // => objects for [['barney', 'pebbles'], ['fred']]
  55450. *
  55451. * // The `_.property` iteratee shorthand.
  55452. * _.partition(users, 'active');
  55453. * // => objects for [['fred'], ['barney', 'pebbles']]
  55454. */
  55455. var partition = createAggregator(function(result, value, key) {
  55456. result[key ? 0 : 1].push(value);
  55457. }, function() { return [[], []]; });
  55458. /**
  55459. * Reduces `collection` to a value which is the accumulated result of running
  55460. * each element in `collection` thru `iteratee`, where each successive
  55461. * invocation is supplied the return value of the previous. If `accumulator`
  55462. * is not given, the first element of `collection` is used as the initial
  55463. * value. The iteratee is invoked with four arguments:
  55464. * (accumulator, value, index|key, collection).
  55465. *
  55466. * Many lodash methods are guarded to work as iteratees for methods like
  55467. * `_.reduce`, `_.reduceRight`, and `_.transform`.
  55468. *
  55469. * The guarded methods are:
  55470. * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
  55471. * and `sortBy`
  55472. *
  55473. * @static
  55474. * @memberOf _
  55475. * @since 0.1.0
  55476. * @category Collection
  55477. * @param {Array|Object} collection The collection to iterate over.
  55478. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  55479. * @param {*} [accumulator] The initial value.
  55480. * @returns {*} Returns the accumulated value.
  55481. * @see _.reduceRight
  55482. * @example
  55483. *
  55484. * _.reduce([1, 2], function(sum, n) {
  55485. * return sum + n;
  55486. * }, 0);
  55487. * // => 3
  55488. *
  55489. * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
  55490. * (result[value] || (result[value] = [])).push(key);
  55491. * return result;
  55492. * }, {});
  55493. * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
  55494. */
  55495. function reduce(collection, iteratee, accumulator) {
  55496. var func = isArray(collection) ? arrayReduce : baseReduce,
  55497. initAccum = arguments.length < 3;
  55498. return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
  55499. }
  55500. /**
  55501. * This method is like `_.reduce` except that it iterates over elements of
  55502. * `collection` from right to left.
  55503. *
  55504. * @static
  55505. * @memberOf _
  55506. * @since 0.1.0
  55507. * @category Collection
  55508. * @param {Array|Object} collection The collection to iterate over.
  55509. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  55510. * @param {*} [accumulator] The initial value.
  55511. * @returns {*} Returns the accumulated value.
  55512. * @see _.reduce
  55513. * @example
  55514. *
  55515. * var array = [[0, 1], [2, 3], [4, 5]];
  55516. *
  55517. * _.reduceRight(array, function(flattened, other) {
  55518. * return flattened.concat(other);
  55519. * }, []);
  55520. * // => [4, 5, 2, 3, 0, 1]
  55521. */
  55522. function reduceRight(collection, iteratee, accumulator) {
  55523. var func = isArray(collection) ? arrayReduceRight : baseReduce,
  55524. initAccum = arguments.length < 3;
  55525. return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
  55526. }
  55527. /**
  55528. * The opposite of `_.filter`; this method returns the elements of `collection`
  55529. * that `predicate` does **not** return truthy for.
  55530. *
  55531. * @static
  55532. * @memberOf _
  55533. * @since 0.1.0
  55534. * @category Collection
  55535. * @param {Array|Object} collection The collection to iterate over.
  55536. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  55537. * @returns {Array} Returns the new filtered array.
  55538. * @see _.filter
  55539. * @example
  55540. *
  55541. * var users = [
  55542. * { 'user': 'barney', 'age': 36, 'active': false },
  55543. * { 'user': 'fred', 'age': 40, 'active': true }
  55544. * ];
  55545. *
  55546. * _.reject(users, function(o) { return !o.active; });
  55547. * // => objects for ['fred']
  55548. *
  55549. * // The `_.matches` iteratee shorthand.
  55550. * _.reject(users, { 'age': 40, 'active': true });
  55551. * // => objects for ['barney']
  55552. *
  55553. * // The `_.matchesProperty` iteratee shorthand.
  55554. * _.reject(users, ['active', false]);
  55555. * // => objects for ['fred']
  55556. *
  55557. * // The `_.property` iteratee shorthand.
  55558. * _.reject(users, 'active');
  55559. * // => objects for ['barney']
  55560. */
  55561. function reject(collection, predicate) {
  55562. var func = isArray(collection) ? arrayFilter : baseFilter;
  55563. return func(collection, negate(getIteratee(predicate, 3)));
  55564. }
  55565. /**
  55566. * Gets a random element from `collection`.
  55567. *
  55568. * @static
  55569. * @memberOf _
  55570. * @since 2.0.0
  55571. * @category Collection
  55572. * @param {Array|Object} collection The collection to sample.
  55573. * @returns {*} Returns the random element.
  55574. * @example
  55575. *
  55576. * _.sample([1, 2, 3, 4]);
  55577. * // => 2
  55578. */
  55579. function sample(collection) {
  55580. var func = isArray(collection) ? arraySample : baseSample;
  55581. return func(collection);
  55582. }
  55583. /**
  55584. * Gets `n` random elements at unique keys from `collection` up to the
  55585. * size of `collection`.
  55586. *
  55587. * @static
  55588. * @memberOf _
  55589. * @since 4.0.0
  55590. * @category Collection
  55591. * @param {Array|Object} collection The collection to sample.
  55592. * @param {number} [n=1] The number of elements to sample.
  55593. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  55594. * @returns {Array} Returns the random elements.
  55595. * @example
  55596. *
  55597. * _.sampleSize([1, 2, 3], 2);
  55598. * // => [3, 1]
  55599. *
  55600. * _.sampleSize([1, 2, 3], 4);
  55601. * // => [2, 3, 1]
  55602. */
  55603. function sampleSize(collection, n, guard) {
  55604. if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
  55605. n = 1;
  55606. } else {
  55607. n = toInteger(n);
  55608. }
  55609. var func = isArray(collection) ? arraySampleSize : baseSampleSize;
  55610. return func(collection, n);
  55611. }
  55612. /**
  55613. * Creates an array of shuffled values, using a version of the
  55614. * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
  55615. *
  55616. * @static
  55617. * @memberOf _
  55618. * @since 0.1.0
  55619. * @category Collection
  55620. * @param {Array|Object} collection The collection to shuffle.
  55621. * @returns {Array} Returns the new shuffled array.
  55622. * @example
  55623. *
  55624. * _.shuffle([1, 2, 3, 4]);
  55625. * // => [4, 1, 3, 2]
  55626. */
  55627. function shuffle(collection) {
  55628. var func = isArray(collection) ? arrayShuffle : baseShuffle;
  55629. return func(collection);
  55630. }
  55631. /**
  55632. * Gets the size of `collection` by returning its length for array-like
  55633. * values or the number of own enumerable string keyed properties for objects.
  55634. *
  55635. * @static
  55636. * @memberOf _
  55637. * @since 0.1.0
  55638. * @category Collection
  55639. * @param {Array|Object|string} collection The collection to inspect.
  55640. * @returns {number} Returns the collection size.
  55641. * @example
  55642. *
  55643. * _.size([1, 2, 3]);
  55644. * // => 3
  55645. *
  55646. * _.size({ 'a': 1, 'b': 2 });
  55647. * // => 2
  55648. *
  55649. * _.size('pebbles');
  55650. * // => 7
  55651. */
  55652. function size(collection) {
  55653. if (collection == null) {
  55654. return 0;
  55655. }
  55656. if (isArrayLike(collection)) {
  55657. return isString(collection) ? stringSize(collection) : collection.length;
  55658. }
  55659. var tag = getTag(collection);
  55660. if (tag == mapTag || tag == setTag) {
  55661. return collection.size;
  55662. }
  55663. return baseKeys(collection).length;
  55664. }
  55665. /**
  55666. * Checks if `predicate` returns truthy for **any** element of `collection`.
  55667. * Iteration is stopped once `predicate` returns truthy. The predicate is
  55668. * invoked with three arguments: (value, index|key, collection).
  55669. *
  55670. * @static
  55671. * @memberOf _
  55672. * @since 0.1.0
  55673. * @category Collection
  55674. * @param {Array|Object} collection The collection to iterate over.
  55675. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  55676. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  55677. * @returns {boolean} Returns `true` if any element passes the predicate check,
  55678. * else `false`.
  55679. * @example
  55680. *
  55681. * _.some([null, 0, 'yes', false], Boolean);
  55682. * // => true
  55683. *
  55684. * var users = [
  55685. * { 'user': 'barney', 'active': true },
  55686. * { 'user': 'fred', 'active': false }
  55687. * ];
  55688. *
  55689. * // The `_.matches` iteratee shorthand.
  55690. * _.some(users, { 'user': 'barney', 'active': false });
  55691. * // => false
  55692. *
  55693. * // The `_.matchesProperty` iteratee shorthand.
  55694. * _.some(users, ['active', false]);
  55695. * // => true
  55696. *
  55697. * // The `_.property` iteratee shorthand.
  55698. * _.some(users, 'active');
  55699. * // => true
  55700. */
  55701. function some(collection, predicate, guard) {
  55702. var func = isArray(collection) ? arraySome : baseSome;
  55703. if (guard && isIterateeCall(collection, predicate, guard)) {
  55704. predicate = undefined;
  55705. }
  55706. return func(collection, getIteratee(predicate, 3));
  55707. }
  55708. /**
  55709. * Creates an array of elements, sorted in ascending order by the results of
  55710. * running each element in a collection thru each iteratee. This method
  55711. * performs a stable sort, that is, it preserves the original sort order of
  55712. * equal elements. The iteratees are invoked with one argument: (value).
  55713. *
  55714. * @static
  55715. * @memberOf _
  55716. * @since 0.1.0
  55717. * @category Collection
  55718. * @param {Array|Object} collection The collection to iterate over.
  55719. * @param {...(Function|Function[])} [iteratees=[_.identity]]
  55720. * The iteratees to sort by.
  55721. * @returns {Array} Returns the new sorted array.
  55722. * @example
  55723. *
  55724. * var users = [
  55725. * { 'user': 'fred', 'age': 48 },
  55726. * { 'user': 'barney', 'age': 36 },
  55727. * { 'user': 'fred', 'age': 30 },
  55728. * { 'user': 'barney', 'age': 34 }
  55729. * ];
  55730. *
  55731. * _.sortBy(users, [function(o) { return o.user; }]);
  55732. * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
  55733. *
  55734. * _.sortBy(users, ['user', 'age']);
  55735. * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
  55736. */
  55737. var sortBy = baseRest(function(collection, iteratees) {
  55738. if (collection == null) {
  55739. return [];
  55740. }
  55741. var length = iteratees.length;
  55742. if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
  55743. iteratees = [];
  55744. } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
  55745. iteratees = [iteratees[0]];
  55746. }
  55747. return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
  55748. });
  55749. /*------------------------------------------------------------------------*/
  55750. /**
  55751. * Gets the timestamp of the number of milliseconds that have elapsed since
  55752. * the Unix epoch (1 January 1970 00:00:00 UTC).
  55753. *
  55754. * @static
  55755. * @memberOf _
  55756. * @since 2.4.0
  55757. * @category Date
  55758. * @returns {number} Returns the timestamp.
  55759. * @example
  55760. *
  55761. * _.defer(function(stamp) {
  55762. * console.log(_.now() - stamp);
  55763. * }, _.now());
  55764. * // => Logs the number of milliseconds it took for the deferred invocation.
  55765. */
  55766. var now = ctxNow || function() {
  55767. return root.Date.now();
  55768. };
  55769. /*------------------------------------------------------------------------*/
  55770. /**
  55771. * The opposite of `_.before`; this method creates a function that invokes
  55772. * `func` once it's called `n` or more times.
  55773. *
  55774. * @static
  55775. * @memberOf _
  55776. * @since 0.1.0
  55777. * @category Function
  55778. * @param {number} n The number of calls before `func` is invoked.
  55779. * @param {Function} func The function to restrict.
  55780. * @returns {Function} Returns the new restricted function.
  55781. * @example
  55782. *
  55783. * var saves = ['profile', 'settings'];
  55784. *
  55785. * var done = _.after(saves.length, function() {
  55786. * console.log('done saving!');
  55787. * });
  55788. *
  55789. * _.forEach(saves, function(type) {
  55790. * asyncSave({ 'type': type, 'complete': done });
  55791. * });
  55792. * // => Logs 'done saving!' after the two async saves have completed.
  55793. */
  55794. function after(n, func) {
  55795. if (typeof func != 'function') {
  55796. throw new TypeError(FUNC_ERROR_TEXT);
  55797. }
  55798. n = toInteger(n);
  55799. return function() {
  55800. if (--n < 1) {
  55801. return func.apply(this, arguments);
  55802. }
  55803. };
  55804. }
  55805. /**
  55806. * Creates a function that invokes `func`, with up to `n` arguments,
  55807. * ignoring any additional arguments.
  55808. *
  55809. * @static
  55810. * @memberOf _
  55811. * @since 3.0.0
  55812. * @category Function
  55813. * @param {Function} func The function to cap arguments for.
  55814. * @param {number} [n=func.length] The arity cap.
  55815. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  55816. * @returns {Function} Returns the new capped function.
  55817. * @example
  55818. *
  55819. * _.map(['6', '8', '10'], _.ary(parseInt, 1));
  55820. * // => [6, 8, 10]
  55821. */
  55822. function ary(func, n, guard) {
  55823. n = guard ? undefined : n;
  55824. n = (func && n == null) ? func.length : n;
  55825. return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
  55826. }
  55827. /**
  55828. * Creates a function that invokes `func`, with the `this` binding and arguments
  55829. * of the created function, while it's called less than `n` times. Subsequent
  55830. * calls to the created function return the result of the last `func` invocation.
  55831. *
  55832. * @static
  55833. * @memberOf _
  55834. * @since 3.0.0
  55835. * @category Function
  55836. * @param {number} n The number of calls at which `func` is no longer invoked.
  55837. * @param {Function} func The function to restrict.
  55838. * @returns {Function} Returns the new restricted function.
  55839. * @example
  55840. *
  55841. * jQuery(element).on('click', _.before(5, addContactToList));
  55842. * // => Allows adding up to 4 contacts to the list.
  55843. */
  55844. function before(n, func) {
  55845. var result;
  55846. if (typeof func != 'function') {
  55847. throw new TypeError(FUNC_ERROR_TEXT);
  55848. }
  55849. n = toInteger(n);
  55850. return function() {
  55851. if (--n > 0) {
  55852. result = func.apply(this, arguments);
  55853. }
  55854. if (n <= 1) {
  55855. func = undefined;
  55856. }
  55857. return result;
  55858. };
  55859. }
  55860. /**
  55861. * Creates a function that invokes `func` with the `this` binding of `thisArg`
  55862. * and `partials` prepended to the arguments it receives.
  55863. *
  55864. * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
  55865. * may be used as a placeholder for partially applied arguments.
  55866. *
  55867. * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
  55868. * property of bound functions.
  55869. *
  55870. * @static
  55871. * @memberOf _
  55872. * @since 0.1.0
  55873. * @category Function
  55874. * @param {Function} func The function to bind.
  55875. * @param {*} thisArg The `this` binding of `func`.
  55876. * @param {...*} [partials] The arguments to be partially applied.
  55877. * @returns {Function} Returns the new bound function.
  55878. * @example
  55879. *
  55880. * function greet(greeting, punctuation) {
  55881. * return greeting + ' ' + this.user + punctuation;
  55882. * }
  55883. *
  55884. * var object = { 'user': 'fred' };
  55885. *
  55886. * var bound = _.bind(greet, object, 'hi');
  55887. * bound('!');
  55888. * // => 'hi fred!'
  55889. *
  55890. * // Bound with placeholders.
  55891. * var bound = _.bind(greet, object, _, '!');
  55892. * bound('hi');
  55893. * // => 'hi fred!'
  55894. */
  55895. var bind = baseRest(function(func, thisArg, partials) {
  55896. var bitmask = WRAP_BIND_FLAG;
  55897. if (partials.length) {
  55898. var holders = replaceHolders(partials, getHolder(bind));
  55899. bitmask |= WRAP_PARTIAL_FLAG;
  55900. }
  55901. return createWrap(func, bitmask, thisArg, partials, holders);
  55902. });
  55903. /**
  55904. * Creates a function that invokes the method at `object[key]` with `partials`
  55905. * prepended to the arguments it receives.
  55906. *
  55907. * This method differs from `_.bind` by allowing bound functions to reference
  55908. * methods that may be redefined or don't yet exist. See
  55909. * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
  55910. * for more details.
  55911. *
  55912. * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
  55913. * builds, may be used as a placeholder for partially applied arguments.
  55914. *
  55915. * @static
  55916. * @memberOf _
  55917. * @since 0.10.0
  55918. * @category Function
  55919. * @param {Object} object The object to invoke the method on.
  55920. * @param {string} key The key of the method.
  55921. * @param {...*} [partials] The arguments to be partially applied.
  55922. * @returns {Function} Returns the new bound function.
  55923. * @example
  55924. *
  55925. * var object = {
  55926. * 'user': 'fred',
  55927. * 'greet': function(greeting, punctuation) {
  55928. * return greeting + ' ' + this.user + punctuation;
  55929. * }
  55930. * };
  55931. *
  55932. * var bound = _.bindKey(object, 'greet', 'hi');
  55933. * bound('!');
  55934. * // => 'hi fred!'
  55935. *
  55936. * object.greet = function(greeting, punctuation) {
  55937. * return greeting + 'ya ' + this.user + punctuation;
  55938. * };
  55939. *
  55940. * bound('!');
  55941. * // => 'hiya fred!'
  55942. *
  55943. * // Bound with placeholders.
  55944. * var bound = _.bindKey(object, 'greet', _, '!');
  55945. * bound('hi');
  55946. * // => 'hiya fred!'
  55947. */
  55948. var bindKey = baseRest(function(object, key, partials) {
  55949. var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
  55950. if (partials.length) {
  55951. var holders = replaceHolders(partials, getHolder(bindKey));
  55952. bitmask |= WRAP_PARTIAL_FLAG;
  55953. }
  55954. return createWrap(key, bitmask, object, partials, holders);
  55955. });
  55956. /**
  55957. * Creates a function that accepts arguments of `func` and either invokes
  55958. * `func` returning its result, if at least `arity` number of arguments have
  55959. * been provided, or returns a function that accepts the remaining `func`
  55960. * arguments, and so on. The arity of `func` may be specified if `func.length`
  55961. * is not sufficient.
  55962. *
  55963. * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
  55964. * may be used as a placeholder for provided arguments.
  55965. *
  55966. * **Note:** This method doesn't set the "length" property of curried functions.
  55967. *
  55968. * @static
  55969. * @memberOf _
  55970. * @since 2.0.0
  55971. * @category Function
  55972. * @param {Function} func The function to curry.
  55973. * @param {number} [arity=func.length] The arity of `func`.
  55974. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  55975. * @returns {Function} Returns the new curried function.
  55976. * @example
  55977. *
  55978. * var abc = function(a, b, c) {
  55979. * return [a, b, c];
  55980. * };
  55981. *
  55982. * var curried = _.curry(abc);
  55983. *
  55984. * curried(1)(2)(3);
  55985. * // => [1, 2, 3]
  55986. *
  55987. * curried(1, 2)(3);
  55988. * // => [1, 2, 3]
  55989. *
  55990. * curried(1, 2, 3);
  55991. * // => [1, 2, 3]
  55992. *
  55993. * // Curried with placeholders.
  55994. * curried(1)(_, 3)(2);
  55995. * // => [1, 2, 3]
  55996. */
  55997. function curry(func, arity, guard) {
  55998. arity = guard ? undefined : arity;
  55999. var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
  56000. result.placeholder = curry.placeholder;
  56001. return result;
  56002. }
  56003. /**
  56004. * This method is like `_.curry` except that arguments are applied to `func`
  56005. * in the manner of `_.partialRight` instead of `_.partial`.
  56006. *
  56007. * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
  56008. * builds, may be used as a placeholder for provided arguments.
  56009. *
  56010. * **Note:** This method doesn't set the "length" property of curried functions.
  56011. *
  56012. * @static
  56013. * @memberOf _
  56014. * @since 3.0.0
  56015. * @category Function
  56016. * @param {Function} func The function to curry.
  56017. * @param {number} [arity=func.length] The arity of `func`.
  56018. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  56019. * @returns {Function} Returns the new curried function.
  56020. * @example
  56021. *
  56022. * var abc = function(a, b, c) {
  56023. * return [a, b, c];
  56024. * };
  56025. *
  56026. * var curried = _.curryRight(abc);
  56027. *
  56028. * curried(3)(2)(1);
  56029. * // => [1, 2, 3]
  56030. *
  56031. * curried(2, 3)(1);
  56032. * // => [1, 2, 3]
  56033. *
  56034. * curried(1, 2, 3);
  56035. * // => [1, 2, 3]
  56036. *
  56037. * // Curried with placeholders.
  56038. * curried(3)(1, _)(2);
  56039. * // => [1, 2, 3]
  56040. */
  56041. function curryRight(func, arity, guard) {
  56042. arity = guard ? undefined : arity;
  56043. var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
  56044. result.placeholder = curryRight.placeholder;
  56045. return result;
  56046. }
  56047. /**
  56048. * Creates a debounced function that delays invoking `func` until after `wait`
  56049. * milliseconds have elapsed since the last time the debounced function was
  56050. * invoked. The debounced function comes with a `cancel` method to cancel
  56051. * delayed `func` invocations and a `flush` method to immediately invoke them.
  56052. * Provide `options` to indicate whether `func` should be invoked on the
  56053. * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
  56054. * with the last arguments provided to the debounced function. Subsequent
  56055. * calls to the debounced function return the result of the last `func`
  56056. * invocation.
  56057. *
  56058. * **Note:** If `leading` and `trailing` options are `true`, `func` is
  56059. * invoked on the trailing edge of the timeout only if the debounced function
  56060. * is invoked more than once during the `wait` timeout.
  56061. *
  56062. * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
  56063. * until to the next tick, similar to `setTimeout` with a timeout of `0`.
  56064. *
  56065. * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
  56066. * for details over the differences between `_.debounce` and `_.throttle`.
  56067. *
  56068. * @static
  56069. * @memberOf _
  56070. * @since 0.1.0
  56071. * @category Function
  56072. * @param {Function} func The function to debounce.
  56073. * @param {number} [wait=0] The number of milliseconds to delay.
  56074. * @param {Object} [options={}] The options object.
  56075. * @param {boolean} [options.leading=false]
  56076. * Specify invoking on the leading edge of the timeout.
  56077. * @param {number} [options.maxWait]
  56078. * The maximum time `func` is allowed to be delayed before it's invoked.
  56079. * @param {boolean} [options.trailing=true]
  56080. * Specify invoking on the trailing edge of the timeout.
  56081. * @returns {Function} Returns the new debounced function.
  56082. * @example
  56083. *
  56084. * // Avoid costly calculations while the window size is in flux.
  56085. * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
  56086. *
  56087. * // Invoke `sendMail` when clicked, debouncing subsequent calls.
  56088. * jQuery(element).on('click', _.debounce(sendMail, 300, {
  56089. * 'leading': true,
  56090. * 'trailing': false
  56091. * }));
  56092. *
  56093. * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
  56094. * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
  56095. * var source = new EventSource('/stream');
  56096. * jQuery(source).on('message', debounced);
  56097. *
  56098. * // Cancel the trailing debounced invocation.
  56099. * jQuery(window).on('popstate', debounced.cancel);
  56100. */
  56101. function debounce(func, wait, options) {
  56102. var lastArgs,
  56103. lastThis,
  56104. maxWait,
  56105. result,
  56106. timerId,
  56107. lastCallTime,
  56108. lastInvokeTime = 0,
  56109. leading = false,
  56110. maxing = false,
  56111. trailing = true;
  56112. if (typeof func != 'function') {
  56113. throw new TypeError(FUNC_ERROR_TEXT);
  56114. }
  56115. wait = toNumber(wait) || 0;
  56116. if (isObject(options)) {
  56117. leading = !!options.leading;
  56118. maxing = 'maxWait' in options;
  56119. maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
  56120. trailing = 'trailing' in options ? !!options.trailing : trailing;
  56121. }
  56122. function invokeFunc(time) {
  56123. var args = lastArgs,
  56124. thisArg = lastThis;
  56125. lastArgs = lastThis = undefined;
  56126. lastInvokeTime = time;
  56127. result = func.apply(thisArg, args);
  56128. return result;
  56129. }
  56130. function leadingEdge(time) {
  56131. // Reset any `maxWait` timer.
  56132. lastInvokeTime = time;
  56133. // Start the timer for the trailing edge.
  56134. timerId = setTimeout(timerExpired, wait);
  56135. // Invoke the leading edge.
  56136. return leading ? invokeFunc(time) : result;
  56137. }
  56138. function remainingWait(time) {
  56139. var timeSinceLastCall = time - lastCallTime,
  56140. timeSinceLastInvoke = time - lastInvokeTime,
  56141. timeWaiting = wait - timeSinceLastCall;
  56142. return maxing
  56143. ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
  56144. : timeWaiting;
  56145. }
  56146. function shouldInvoke(time) {
  56147. var timeSinceLastCall = time - lastCallTime,
  56148. timeSinceLastInvoke = time - lastInvokeTime;
  56149. // Either this is the first call, activity has stopped and we're at the
  56150. // trailing edge, the system time has gone backwards and we're treating
  56151. // it as the trailing edge, or we've hit the `maxWait` limit.
  56152. return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
  56153. (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
  56154. }
  56155. function timerExpired() {
  56156. var time = now();
  56157. if (shouldInvoke(time)) {
  56158. return trailingEdge(time);
  56159. }
  56160. // Restart the timer.
  56161. timerId = setTimeout(timerExpired, remainingWait(time));
  56162. }
  56163. function trailingEdge(time) {
  56164. timerId = undefined;
  56165. // Only invoke if we have `lastArgs` which means `func` has been
  56166. // debounced at least once.
  56167. if (trailing && lastArgs) {
  56168. return invokeFunc(time);
  56169. }
  56170. lastArgs = lastThis = undefined;
  56171. return result;
  56172. }
  56173. function cancel() {
  56174. if (timerId !== undefined) {
  56175. clearTimeout(timerId);
  56176. }
  56177. lastInvokeTime = 0;
  56178. lastArgs = lastCallTime = lastThis = timerId = undefined;
  56179. }
  56180. function flush() {
  56181. return timerId === undefined ? result : trailingEdge(now());
  56182. }
  56183. function debounced() {
  56184. var time = now(),
  56185. isInvoking = shouldInvoke(time);
  56186. lastArgs = arguments;
  56187. lastThis = this;
  56188. lastCallTime = time;
  56189. if (isInvoking) {
  56190. if (timerId === undefined) {
  56191. return leadingEdge(lastCallTime);
  56192. }
  56193. if (maxing) {
  56194. // Handle invocations in a tight loop.
  56195. clearTimeout(timerId);
  56196. timerId = setTimeout(timerExpired, wait);
  56197. return invokeFunc(lastCallTime);
  56198. }
  56199. }
  56200. if (timerId === undefined) {
  56201. timerId = setTimeout(timerExpired, wait);
  56202. }
  56203. return result;
  56204. }
  56205. debounced.cancel = cancel;
  56206. debounced.flush = flush;
  56207. return debounced;
  56208. }
  56209. /**
  56210. * Defers invoking the `func` until the current call stack has cleared. Any
  56211. * additional arguments are provided to `func` when it's invoked.
  56212. *
  56213. * @static
  56214. * @memberOf _
  56215. * @since 0.1.0
  56216. * @category Function
  56217. * @param {Function} func The function to defer.
  56218. * @param {...*} [args] The arguments to invoke `func` with.
  56219. * @returns {number} Returns the timer id.
  56220. * @example
  56221. *
  56222. * _.defer(function(text) {
  56223. * console.log(text);
  56224. * }, 'deferred');
  56225. * // => Logs 'deferred' after one millisecond.
  56226. */
  56227. var defer = baseRest(function(func, args) {
  56228. return baseDelay(func, 1, args);
  56229. });
  56230. /**
  56231. * Invokes `func` after `wait` milliseconds. Any additional arguments are
  56232. * provided to `func` when it's invoked.
  56233. *
  56234. * @static
  56235. * @memberOf _
  56236. * @since 0.1.0
  56237. * @category Function
  56238. * @param {Function} func The function to delay.
  56239. * @param {number} wait The number of milliseconds to delay invocation.
  56240. * @param {...*} [args] The arguments to invoke `func` with.
  56241. * @returns {number} Returns the timer id.
  56242. * @example
  56243. *
  56244. * _.delay(function(text) {
  56245. * console.log(text);
  56246. * }, 1000, 'later');
  56247. * // => Logs 'later' after one second.
  56248. */
  56249. var delay = baseRest(function(func, wait, args) {
  56250. return baseDelay(func, toNumber(wait) || 0, args);
  56251. });
  56252. /**
  56253. * Creates a function that invokes `func` with arguments reversed.
  56254. *
  56255. * @static
  56256. * @memberOf _
  56257. * @since 4.0.0
  56258. * @category Function
  56259. * @param {Function} func The function to flip arguments for.
  56260. * @returns {Function} Returns the new flipped function.
  56261. * @example
  56262. *
  56263. * var flipped = _.flip(function() {
  56264. * return _.toArray(arguments);
  56265. * });
  56266. *
  56267. * flipped('a', 'b', 'c', 'd');
  56268. * // => ['d', 'c', 'b', 'a']
  56269. */
  56270. function flip(func) {
  56271. return createWrap(func, WRAP_FLIP_FLAG);
  56272. }
  56273. /**
  56274. * Creates a function that memoizes the result of `func`. If `resolver` is
  56275. * provided, it determines the cache key for storing the result based on the
  56276. * arguments provided to the memoized function. By default, the first argument
  56277. * provided to the memoized function is used as the map cache key. The `func`
  56278. * is invoked with the `this` binding of the memoized function.
  56279. *
  56280. * **Note:** The cache is exposed as the `cache` property on the memoized
  56281. * function. Its creation may be customized by replacing the `_.memoize.Cache`
  56282. * constructor with one whose instances implement the
  56283. * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
  56284. * method interface of `clear`, `delete`, `get`, `has`, and `set`.
  56285. *
  56286. * @static
  56287. * @memberOf _
  56288. * @since 0.1.0
  56289. * @category Function
  56290. * @param {Function} func The function to have its output memoized.
  56291. * @param {Function} [resolver] The function to resolve the cache key.
  56292. * @returns {Function} Returns the new memoized function.
  56293. * @example
  56294. *
  56295. * var object = { 'a': 1, 'b': 2 };
  56296. * var other = { 'c': 3, 'd': 4 };
  56297. *
  56298. * var values = _.memoize(_.values);
  56299. * values(object);
  56300. * // => [1, 2]
  56301. *
  56302. * values(other);
  56303. * // => [3, 4]
  56304. *
  56305. * object.a = 2;
  56306. * values(object);
  56307. * // => [1, 2]
  56308. *
  56309. * // Modify the result cache.
  56310. * values.cache.set(object, ['a', 'b']);
  56311. * values(object);
  56312. * // => ['a', 'b']
  56313. *
  56314. * // Replace `_.memoize.Cache`.
  56315. * _.memoize.Cache = WeakMap;
  56316. */
  56317. function memoize(func, resolver) {
  56318. if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
  56319. throw new TypeError(FUNC_ERROR_TEXT);
  56320. }
  56321. var memoized = function() {
  56322. var args = arguments,
  56323. key = resolver ? resolver.apply(this, args) : args[0],
  56324. cache = memoized.cache;
  56325. if (cache.has(key)) {
  56326. return cache.get(key);
  56327. }
  56328. var result = func.apply(this, args);
  56329. memoized.cache = cache.set(key, result) || cache;
  56330. return result;
  56331. };
  56332. memoized.cache = new (memoize.Cache || MapCache);
  56333. return memoized;
  56334. }
  56335. // Expose `MapCache`.
  56336. memoize.Cache = MapCache;
  56337. /**
  56338. * Creates a function that negates the result of the predicate `func`. The
  56339. * `func` predicate is invoked with the `this` binding and arguments of the
  56340. * created function.
  56341. *
  56342. * @static
  56343. * @memberOf _
  56344. * @since 3.0.0
  56345. * @category Function
  56346. * @param {Function} predicate The predicate to negate.
  56347. * @returns {Function} Returns the new negated function.
  56348. * @example
  56349. *
  56350. * function isEven(n) {
  56351. * return n % 2 == 0;
  56352. * }
  56353. *
  56354. * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
  56355. * // => [1, 3, 5]
  56356. */
  56357. function negate(predicate) {
  56358. if (typeof predicate != 'function') {
  56359. throw new TypeError(FUNC_ERROR_TEXT);
  56360. }
  56361. return function() {
  56362. var args = arguments;
  56363. switch (args.length) {
  56364. case 0: return !predicate.call(this);
  56365. case 1: return !predicate.call(this, args[0]);
  56366. case 2: return !predicate.call(this, args[0], args[1]);
  56367. case 3: return !predicate.call(this, args[0], args[1], args[2]);
  56368. }
  56369. return !predicate.apply(this, args);
  56370. };
  56371. }
  56372. /**
  56373. * Creates a function that is restricted to invoking `func` once. Repeat calls
  56374. * to the function return the value of the first invocation. The `func` is
  56375. * invoked with the `this` binding and arguments of the created function.
  56376. *
  56377. * @static
  56378. * @memberOf _
  56379. * @since 0.1.0
  56380. * @category Function
  56381. * @param {Function} func The function to restrict.
  56382. * @returns {Function} Returns the new restricted function.
  56383. * @example
  56384. *
  56385. * var initialize = _.once(createApplication);
  56386. * initialize();
  56387. * initialize();
  56388. * // => `createApplication` is invoked once
  56389. */
  56390. function once(func) {
  56391. return before(2, func);
  56392. }
  56393. /**
  56394. * Creates a function that invokes `func` with its arguments transformed.
  56395. *
  56396. * @static
  56397. * @since 4.0.0
  56398. * @memberOf _
  56399. * @category Function
  56400. * @param {Function} func The function to wrap.
  56401. * @param {...(Function|Function[])} [transforms=[_.identity]]
  56402. * The argument transforms.
  56403. * @returns {Function} Returns the new function.
  56404. * @example
  56405. *
  56406. * function doubled(n) {
  56407. * return n * 2;
  56408. * }
  56409. *
  56410. * function square(n) {
  56411. * return n * n;
  56412. * }
  56413. *
  56414. * var func = _.overArgs(function(x, y) {
  56415. * return [x, y];
  56416. * }, [square, doubled]);
  56417. *
  56418. * func(9, 3);
  56419. * // => [81, 6]
  56420. *
  56421. * func(10, 5);
  56422. * // => [100, 10]
  56423. */
  56424. var overArgs = castRest(function(func, transforms) {
  56425. transforms = (transforms.length == 1 && isArray(transforms[0]))
  56426. ? arrayMap(transforms[0], baseUnary(getIteratee()))
  56427. : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
  56428. var funcsLength = transforms.length;
  56429. return baseRest(function(args) {
  56430. var index = -1,
  56431. length = nativeMin(args.length, funcsLength);
  56432. while (++index < length) {
  56433. args[index] = transforms[index].call(this, args[index]);
  56434. }
  56435. return apply(func, this, args);
  56436. });
  56437. });
  56438. /**
  56439. * Creates a function that invokes `func` with `partials` prepended to the
  56440. * arguments it receives. This method is like `_.bind` except it does **not**
  56441. * alter the `this` binding.
  56442. *
  56443. * The `_.partial.placeholder` value, which defaults to `_` in monolithic
  56444. * builds, may be used as a placeholder for partially applied arguments.
  56445. *
  56446. * **Note:** This method doesn't set the "length" property of partially
  56447. * applied functions.
  56448. *
  56449. * @static
  56450. * @memberOf _
  56451. * @since 0.2.0
  56452. * @category Function
  56453. * @param {Function} func The function to partially apply arguments to.
  56454. * @param {...*} [partials] The arguments to be partially applied.
  56455. * @returns {Function} Returns the new partially applied function.
  56456. * @example
  56457. *
  56458. * function greet(greeting, name) {
  56459. * return greeting + ' ' + name;
  56460. * }
  56461. *
  56462. * var sayHelloTo = _.partial(greet, 'hello');
  56463. * sayHelloTo('fred');
  56464. * // => 'hello fred'
  56465. *
  56466. * // Partially applied with placeholders.
  56467. * var greetFred = _.partial(greet, _, 'fred');
  56468. * greetFred('hi');
  56469. * // => 'hi fred'
  56470. */
  56471. var partial = baseRest(function(func, partials) {
  56472. var holders = replaceHolders(partials, getHolder(partial));
  56473. return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
  56474. });
  56475. /**
  56476. * This method is like `_.partial` except that partially applied arguments
  56477. * are appended to the arguments it receives.
  56478. *
  56479. * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
  56480. * builds, may be used as a placeholder for partially applied arguments.
  56481. *
  56482. * **Note:** This method doesn't set the "length" property of partially
  56483. * applied functions.
  56484. *
  56485. * @static
  56486. * @memberOf _
  56487. * @since 1.0.0
  56488. * @category Function
  56489. * @param {Function} func The function to partially apply arguments to.
  56490. * @param {...*} [partials] The arguments to be partially applied.
  56491. * @returns {Function} Returns the new partially applied function.
  56492. * @example
  56493. *
  56494. * function greet(greeting, name) {
  56495. * return greeting + ' ' + name;
  56496. * }
  56497. *
  56498. * var greetFred = _.partialRight(greet, 'fred');
  56499. * greetFred('hi');
  56500. * // => 'hi fred'
  56501. *
  56502. * // Partially applied with placeholders.
  56503. * var sayHelloTo = _.partialRight(greet, 'hello', _);
  56504. * sayHelloTo('fred');
  56505. * // => 'hello fred'
  56506. */
  56507. var partialRight = baseRest(function(func, partials) {
  56508. var holders = replaceHolders(partials, getHolder(partialRight));
  56509. return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
  56510. });
  56511. /**
  56512. * Creates a function that invokes `func` with arguments arranged according
  56513. * to the specified `indexes` where the argument value at the first index is
  56514. * provided as the first argument, the argument value at the second index is
  56515. * provided as the second argument, and so on.
  56516. *
  56517. * @static
  56518. * @memberOf _
  56519. * @since 3.0.0
  56520. * @category Function
  56521. * @param {Function} func The function to rearrange arguments for.
  56522. * @param {...(number|number[])} indexes The arranged argument indexes.
  56523. * @returns {Function} Returns the new function.
  56524. * @example
  56525. *
  56526. * var rearged = _.rearg(function(a, b, c) {
  56527. * return [a, b, c];
  56528. * }, [2, 0, 1]);
  56529. *
  56530. * rearged('b', 'c', 'a')
  56531. * // => ['a', 'b', 'c']
  56532. */
  56533. var rearg = flatRest(function(func, indexes) {
  56534. return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
  56535. });
  56536. /**
  56537. * Creates a function that invokes `func` with the `this` binding of the
  56538. * created function and arguments from `start` and beyond provided as
  56539. * an array.
  56540. *
  56541. * **Note:** This method is based on the
  56542. * [rest parameter](https://mdn.io/rest_parameters).
  56543. *
  56544. * @static
  56545. * @memberOf _
  56546. * @since 4.0.0
  56547. * @category Function
  56548. * @param {Function} func The function to apply a rest parameter to.
  56549. * @param {number} [start=func.length-1] The start position of the rest parameter.
  56550. * @returns {Function} Returns the new function.
  56551. * @example
  56552. *
  56553. * var say = _.rest(function(what, names) {
  56554. * return what + ' ' + _.initial(names).join(', ') +
  56555. * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
  56556. * });
  56557. *
  56558. * say('hello', 'fred', 'barney', 'pebbles');
  56559. * // => 'hello fred, barney, & pebbles'
  56560. */
  56561. function rest(func, start) {
  56562. if (typeof func != 'function') {
  56563. throw new TypeError(FUNC_ERROR_TEXT);
  56564. }
  56565. start = start === undefined ? start : toInteger(start);
  56566. return baseRest(func, start);
  56567. }
  56568. /**
  56569. * Creates a function that invokes `func` with the `this` binding of the
  56570. * create function and an array of arguments much like
  56571. * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
  56572. *
  56573. * **Note:** This method is based on the
  56574. * [spread operator](https://mdn.io/spread_operator).
  56575. *
  56576. * @static
  56577. * @memberOf _
  56578. * @since 3.2.0
  56579. * @category Function
  56580. * @param {Function} func The function to spread arguments over.
  56581. * @param {number} [start=0] The start position of the spread.
  56582. * @returns {Function} Returns the new function.
  56583. * @example
  56584. *
  56585. * var say = _.spread(function(who, what) {
  56586. * return who + ' says ' + what;
  56587. * });
  56588. *
  56589. * say(['fred', 'hello']);
  56590. * // => 'fred says hello'
  56591. *
  56592. * var numbers = Promise.all([
  56593. * Promise.resolve(40),
  56594. * Promise.resolve(36)
  56595. * ]);
  56596. *
  56597. * numbers.then(_.spread(function(x, y) {
  56598. * return x + y;
  56599. * }));
  56600. * // => a Promise of 76
  56601. */
  56602. function spread(func, start) {
  56603. if (typeof func != 'function') {
  56604. throw new TypeError(FUNC_ERROR_TEXT);
  56605. }
  56606. start = start == null ? 0 : nativeMax(toInteger(start), 0);
  56607. return baseRest(function(args) {
  56608. var array = args[start],
  56609. otherArgs = castSlice(args, 0, start);
  56610. if (array) {
  56611. arrayPush(otherArgs, array);
  56612. }
  56613. return apply(func, this, otherArgs);
  56614. });
  56615. }
  56616. /**
  56617. * Creates a throttled function that only invokes `func` at most once per
  56618. * every `wait` milliseconds. The throttled function comes with a `cancel`
  56619. * method to cancel delayed `func` invocations and a `flush` method to
  56620. * immediately invoke them. Provide `options` to indicate whether `func`
  56621. * should be invoked on the leading and/or trailing edge of the `wait`
  56622. * timeout. The `func` is invoked with the last arguments provided to the
  56623. * throttled function. Subsequent calls to the throttled function return the
  56624. * result of the last `func` invocation.
  56625. *
  56626. * **Note:** If `leading` and `trailing` options are `true`, `func` is
  56627. * invoked on the trailing edge of the timeout only if the throttled function
  56628. * is invoked more than once during the `wait` timeout.
  56629. *
  56630. * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
  56631. * until to the next tick, similar to `setTimeout` with a timeout of `0`.
  56632. *
  56633. * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
  56634. * for details over the differences between `_.throttle` and `_.debounce`.
  56635. *
  56636. * @static
  56637. * @memberOf _
  56638. * @since 0.1.0
  56639. * @category Function
  56640. * @param {Function} func The function to throttle.
  56641. * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
  56642. * @param {Object} [options={}] The options object.
  56643. * @param {boolean} [options.leading=true]
  56644. * Specify invoking on the leading edge of the timeout.
  56645. * @param {boolean} [options.trailing=true]
  56646. * Specify invoking on the trailing edge of the timeout.
  56647. * @returns {Function} Returns the new throttled function.
  56648. * @example
  56649. *
  56650. * // Avoid excessively updating the position while scrolling.
  56651. * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
  56652. *
  56653. * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
  56654. * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
  56655. * jQuery(element).on('click', throttled);
  56656. *
  56657. * // Cancel the trailing throttled invocation.
  56658. * jQuery(window).on('popstate', throttled.cancel);
  56659. */
  56660. function throttle(func, wait, options) {
  56661. var leading = true,
  56662. trailing = true;
  56663. if (typeof func != 'function') {
  56664. throw new TypeError(FUNC_ERROR_TEXT);
  56665. }
  56666. if (isObject(options)) {
  56667. leading = 'leading' in options ? !!options.leading : leading;
  56668. trailing = 'trailing' in options ? !!options.trailing : trailing;
  56669. }
  56670. return debounce(func, wait, {
  56671. 'leading': leading,
  56672. 'maxWait': wait,
  56673. 'trailing': trailing
  56674. });
  56675. }
  56676. /**
  56677. * Creates a function that accepts up to one argument, ignoring any
  56678. * additional arguments.
  56679. *
  56680. * @static
  56681. * @memberOf _
  56682. * @since 4.0.0
  56683. * @category Function
  56684. * @param {Function} func The function to cap arguments for.
  56685. * @returns {Function} Returns the new capped function.
  56686. * @example
  56687. *
  56688. * _.map(['6', '8', '10'], _.unary(parseInt));
  56689. * // => [6, 8, 10]
  56690. */
  56691. function unary(func) {
  56692. return ary(func, 1);
  56693. }
  56694. /**
  56695. * Creates a function that provides `value` to `wrapper` as its first
  56696. * argument. Any additional arguments provided to the function are appended
  56697. * to those provided to the `wrapper`. The wrapper is invoked with the `this`
  56698. * binding of the created function.
  56699. *
  56700. * @static
  56701. * @memberOf _
  56702. * @since 0.1.0
  56703. * @category Function
  56704. * @param {*} value The value to wrap.
  56705. * @param {Function} [wrapper=identity] The wrapper function.
  56706. * @returns {Function} Returns the new function.
  56707. * @example
  56708. *
  56709. * var p = _.wrap(_.escape, function(func, text) {
  56710. * return '<p>' + func(text) + '</p>';
  56711. * });
  56712. *
  56713. * p('fred, barney, & pebbles');
  56714. * // => '<p>fred, barney, &amp; pebbles</p>'
  56715. */
  56716. function wrap(value, wrapper) {
  56717. return partial(castFunction(wrapper), value);
  56718. }
  56719. /*------------------------------------------------------------------------*/
  56720. /**
  56721. * Casts `value` as an array if it's not one.
  56722. *
  56723. * @static
  56724. * @memberOf _
  56725. * @since 4.4.0
  56726. * @category Lang
  56727. * @param {*} value The value to inspect.
  56728. * @returns {Array} Returns the cast array.
  56729. * @example
  56730. *
  56731. * _.castArray(1);
  56732. * // => [1]
  56733. *
  56734. * _.castArray({ 'a': 1 });
  56735. * // => [{ 'a': 1 }]
  56736. *
  56737. * _.castArray('abc');
  56738. * // => ['abc']
  56739. *
  56740. * _.castArray(null);
  56741. * // => [null]
  56742. *
  56743. * _.castArray(undefined);
  56744. * // => [undefined]
  56745. *
  56746. * _.castArray();
  56747. * // => []
  56748. *
  56749. * var array = [1, 2, 3];
  56750. * console.log(_.castArray(array) === array);
  56751. * // => true
  56752. */
  56753. function castArray() {
  56754. if (!arguments.length) {
  56755. return [];
  56756. }
  56757. var value = arguments[0];
  56758. return isArray(value) ? value : [value];
  56759. }
  56760. /**
  56761. * Creates a shallow clone of `value`.
  56762. *
  56763. * **Note:** This method is loosely based on the
  56764. * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
  56765. * and supports cloning arrays, array buffers, booleans, date objects, maps,
  56766. * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
  56767. * arrays. The own enumerable properties of `arguments` objects are cloned
  56768. * as plain objects. An empty object is returned for uncloneable values such
  56769. * as error objects, functions, DOM nodes, and WeakMaps.
  56770. *
  56771. * @static
  56772. * @memberOf _
  56773. * @since 0.1.0
  56774. * @category Lang
  56775. * @param {*} value The value to clone.
  56776. * @returns {*} Returns the cloned value.
  56777. * @see _.cloneDeep
  56778. * @example
  56779. *
  56780. * var objects = [{ 'a': 1 }, { 'b': 2 }];
  56781. *
  56782. * var shallow = _.clone(objects);
  56783. * console.log(shallow[0] === objects[0]);
  56784. * // => true
  56785. */
  56786. function clone(value) {
  56787. return baseClone(value, CLONE_SYMBOLS_FLAG);
  56788. }
  56789. /**
  56790. * This method is like `_.clone` except that it accepts `customizer` which
  56791. * is invoked to produce the cloned value. If `customizer` returns `undefined`,
  56792. * cloning is handled by the method instead. The `customizer` is invoked with
  56793. * up to four arguments; (value [, index|key, object, stack]).
  56794. *
  56795. * @static
  56796. * @memberOf _
  56797. * @since 4.0.0
  56798. * @category Lang
  56799. * @param {*} value The value to clone.
  56800. * @param {Function} [customizer] The function to customize cloning.
  56801. * @returns {*} Returns the cloned value.
  56802. * @see _.cloneDeepWith
  56803. * @example
  56804. *
  56805. * function customizer(value) {
  56806. * if (_.isElement(value)) {
  56807. * return value.cloneNode(false);
  56808. * }
  56809. * }
  56810. *
  56811. * var el = _.cloneWith(document.body, customizer);
  56812. *
  56813. * console.log(el === document.body);
  56814. * // => false
  56815. * console.log(el.nodeName);
  56816. * // => 'BODY'
  56817. * console.log(el.childNodes.length);
  56818. * // => 0
  56819. */
  56820. function cloneWith(value, customizer) {
  56821. customizer = typeof customizer == 'function' ? customizer : undefined;
  56822. return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
  56823. }
  56824. /**
  56825. * This method is like `_.clone` except that it recursively clones `value`.
  56826. *
  56827. * @static
  56828. * @memberOf _
  56829. * @since 1.0.0
  56830. * @category Lang
  56831. * @param {*} value The value to recursively clone.
  56832. * @returns {*} Returns the deep cloned value.
  56833. * @see _.clone
  56834. * @example
  56835. *
  56836. * var objects = [{ 'a': 1 }, { 'b': 2 }];
  56837. *
  56838. * var deep = _.cloneDeep(objects);
  56839. * console.log(deep[0] === objects[0]);
  56840. * // => false
  56841. */
  56842. function cloneDeep(value) {
  56843. return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
  56844. }
  56845. /**
  56846. * This method is like `_.cloneWith` except that it recursively clones `value`.
  56847. *
  56848. * @static
  56849. * @memberOf _
  56850. * @since 4.0.0
  56851. * @category Lang
  56852. * @param {*} value The value to recursively clone.
  56853. * @param {Function} [customizer] The function to customize cloning.
  56854. * @returns {*} Returns the deep cloned value.
  56855. * @see _.cloneWith
  56856. * @example
  56857. *
  56858. * function customizer(value) {
  56859. * if (_.isElement(value)) {
  56860. * return value.cloneNode(true);
  56861. * }
  56862. * }
  56863. *
  56864. * var el = _.cloneDeepWith(document.body, customizer);
  56865. *
  56866. * console.log(el === document.body);
  56867. * // => false
  56868. * console.log(el.nodeName);
  56869. * // => 'BODY'
  56870. * console.log(el.childNodes.length);
  56871. * // => 20
  56872. */
  56873. function cloneDeepWith(value, customizer) {
  56874. customizer = typeof customizer == 'function' ? customizer : undefined;
  56875. return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
  56876. }
  56877. /**
  56878. * Checks if `object` conforms to `source` by invoking the predicate
  56879. * properties of `source` with the corresponding property values of `object`.
  56880. *
  56881. * **Note:** This method is equivalent to `_.conforms` when `source` is
  56882. * partially applied.
  56883. *
  56884. * @static
  56885. * @memberOf _
  56886. * @since 4.14.0
  56887. * @category Lang
  56888. * @param {Object} object The object to inspect.
  56889. * @param {Object} source The object of property predicates to conform to.
  56890. * @returns {boolean} Returns `true` if `object` conforms, else `false`.
  56891. * @example
  56892. *
  56893. * var object = { 'a': 1, 'b': 2 };
  56894. *
  56895. * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
  56896. * // => true
  56897. *
  56898. * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
  56899. * // => false
  56900. */
  56901. function conformsTo(object, source) {
  56902. return source == null || baseConformsTo(object, source, keys(source));
  56903. }
  56904. /**
  56905. * Performs a
  56906. * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  56907. * comparison between two values to determine if they are equivalent.
  56908. *
  56909. * @static
  56910. * @memberOf _
  56911. * @since 4.0.0
  56912. * @category Lang
  56913. * @param {*} value The value to compare.
  56914. * @param {*} other The other value to compare.
  56915. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  56916. * @example
  56917. *
  56918. * var object = { 'a': 1 };
  56919. * var other = { 'a': 1 };
  56920. *
  56921. * _.eq(object, object);
  56922. * // => true
  56923. *
  56924. * _.eq(object, other);
  56925. * // => false
  56926. *
  56927. * _.eq('a', 'a');
  56928. * // => true
  56929. *
  56930. * _.eq('a', Object('a'));
  56931. * // => false
  56932. *
  56933. * _.eq(NaN, NaN);
  56934. * // => true
  56935. */
  56936. function eq(value, other) {
  56937. return value === other || (value !== value && other !== other);
  56938. }
  56939. /**
  56940. * Checks if `value` is greater than `other`.
  56941. *
  56942. * @static
  56943. * @memberOf _
  56944. * @since 3.9.0
  56945. * @category Lang
  56946. * @param {*} value The value to compare.
  56947. * @param {*} other The other value to compare.
  56948. * @returns {boolean} Returns `true` if `value` is greater than `other`,
  56949. * else `false`.
  56950. * @see _.lt
  56951. * @example
  56952. *
  56953. * _.gt(3, 1);
  56954. * // => true
  56955. *
  56956. * _.gt(3, 3);
  56957. * // => false
  56958. *
  56959. * _.gt(1, 3);
  56960. * // => false
  56961. */
  56962. var gt = createRelationalOperation(baseGt);
  56963. /**
  56964. * Checks if `value` is greater than or equal to `other`.
  56965. *
  56966. * @static
  56967. * @memberOf _
  56968. * @since 3.9.0
  56969. * @category Lang
  56970. * @param {*} value The value to compare.
  56971. * @param {*} other The other value to compare.
  56972. * @returns {boolean} Returns `true` if `value` is greater than or equal to
  56973. * `other`, else `false`.
  56974. * @see _.lte
  56975. * @example
  56976. *
  56977. * _.gte(3, 1);
  56978. * // => true
  56979. *
  56980. * _.gte(3, 3);
  56981. * // => true
  56982. *
  56983. * _.gte(1, 3);
  56984. * // => false
  56985. */
  56986. var gte = createRelationalOperation(function(value, other) {
  56987. return value >= other;
  56988. });
  56989. /**
  56990. * Checks if `value` is likely an `arguments` object.
  56991. *
  56992. * @static
  56993. * @memberOf _
  56994. * @since 0.1.0
  56995. * @category Lang
  56996. * @param {*} value The value to check.
  56997. * @returns {boolean} Returns `true` if `value` is an `arguments` object,
  56998. * else `false`.
  56999. * @example
  57000. *
  57001. * _.isArguments(function() { return arguments; }());
  57002. * // => true
  57003. *
  57004. * _.isArguments([1, 2, 3]);
  57005. * // => false
  57006. */
  57007. var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
  57008. return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
  57009. !propertyIsEnumerable.call(value, 'callee');
  57010. };
  57011. /**
  57012. * Checks if `value` is classified as an `Array` object.
  57013. *
  57014. * @static
  57015. * @memberOf _
  57016. * @since 0.1.0
  57017. * @category Lang
  57018. * @param {*} value The value to check.
  57019. * @returns {boolean} Returns `true` if `value` is an array, else `false`.
  57020. * @example
  57021. *
  57022. * _.isArray([1, 2, 3]);
  57023. * // => true
  57024. *
  57025. * _.isArray(document.body.children);
  57026. * // => false
  57027. *
  57028. * _.isArray('abc');
  57029. * // => false
  57030. *
  57031. * _.isArray(_.noop);
  57032. * // => false
  57033. */
  57034. var isArray = Array.isArray;
  57035. /**
  57036. * Checks if `value` is classified as an `ArrayBuffer` object.
  57037. *
  57038. * @static
  57039. * @memberOf _
  57040. * @since 4.3.0
  57041. * @category Lang
  57042. * @param {*} value The value to check.
  57043. * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
  57044. * @example
  57045. *
  57046. * _.isArrayBuffer(new ArrayBuffer(2));
  57047. * // => true
  57048. *
  57049. * _.isArrayBuffer(new Array(2));
  57050. * // => false
  57051. */
  57052. var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
  57053. /**
  57054. * Checks if `value` is array-like. A value is considered array-like if it's
  57055. * not a function and has a `value.length` that's an integer greater than or
  57056. * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
  57057. *
  57058. * @static
  57059. * @memberOf _
  57060. * @since 4.0.0
  57061. * @category Lang
  57062. * @param {*} value The value to check.
  57063. * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
  57064. * @example
  57065. *
  57066. * _.isArrayLike([1, 2, 3]);
  57067. * // => true
  57068. *
  57069. * _.isArrayLike(document.body.children);
  57070. * // => true
  57071. *
  57072. * _.isArrayLike('abc');
  57073. * // => true
  57074. *
  57075. * _.isArrayLike(_.noop);
  57076. * // => false
  57077. */
  57078. function isArrayLike(value) {
  57079. return value != null && isLength(value.length) && !isFunction(value);
  57080. }
  57081. /**
  57082. * This method is like `_.isArrayLike` except that it also checks if `value`
  57083. * is an object.
  57084. *
  57085. * @static
  57086. * @memberOf _
  57087. * @since 4.0.0
  57088. * @category Lang
  57089. * @param {*} value The value to check.
  57090. * @returns {boolean} Returns `true` if `value` is an array-like object,
  57091. * else `false`.
  57092. * @example
  57093. *
  57094. * _.isArrayLikeObject([1, 2, 3]);
  57095. * // => true
  57096. *
  57097. * _.isArrayLikeObject(document.body.children);
  57098. * // => true
  57099. *
  57100. * _.isArrayLikeObject('abc');
  57101. * // => false
  57102. *
  57103. * _.isArrayLikeObject(_.noop);
  57104. * // => false
  57105. */
  57106. function isArrayLikeObject(value) {
  57107. return isObjectLike(value) && isArrayLike(value);
  57108. }
  57109. /**
  57110. * Checks if `value` is classified as a boolean primitive or object.
  57111. *
  57112. * @static
  57113. * @memberOf _
  57114. * @since 0.1.0
  57115. * @category Lang
  57116. * @param {*} value The value to check.
  57117. * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
  57118. * @example
  57119. *
  57120. * _.isBoolean(false);
  57121. * // => true
  57122. *
  57123. * _.isBoolean(null);
  57124. * // => false
  57125. */
  57126. function isBoolean(value) {
  57127. return value === true || value === false ||
  57128. (isObjectLike(value) && baseGetTag(value) == boolTag);
  57129. }
  57130. /**
  57131. * Checks if `value` is a buffer.
  57132. *
  57133. * @static
  57134. * @memberOf _
  57135. * @since 4.3.0
  57136. * @category Lang
  57137. * @param {*} value The value to check.
  57138. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
  57139. * @example
  57140. *
  57141. * _.isBuffer(new Buffer(2));
  57142. * // => true
  57143. *
  57144. * _.isBuffer(new Uint8Array(2));
  57145. * // => false
  57146. */
  57147. var isBuffer = nativeIsBuffer || stubFalse;
  57148. /**
  57149. * Checks if `value` is classified as a `Date` object.
  57150. *
  57151. * @static
  57152. * @memberOf _
  57153. * @since 0.1.0
  57154. * @category Lang
  57155. * @param {*} value The value to check.
  57156. * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
  57157. * @example
  57158. *
  57159. * _.isDate(new Date);
  57160. * // => true
  57161. *
  57162. * _.isDate('Mon April 23 2012');
  57163. * // => false
  57164. */
  57165. var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
  57166. /**
  57167. * Checks if `value` is likely a DOM element.
  57168. *
  57169. * @static
  57170. * @memberOf _
  57171. * @since 0.1.0
  57172. * @category Lang
  57173. * @param {*} value The value to check.
  57174. * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
  57175. * @example
  57176. *
  57177. * _.isElement(document.body);
  57178. * // => true
  57179. *
  57180. * _.isElement('<body>');
  57181. * // => false
  57182. */
  57183. function isElement(value) {
  57184. return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
  57185. }
  57186. /**
  57187. * Checks if `value` is an empty object, collection, map, or set.
  57188. *
  57189. * Objects are considered empty if they have no own enumerable string keyed
  57190. * properties.
  57191. *
  57192. * Array-like values such as `arguments` objects, arrays, buffers, strings, or
  57193. * jQuery-like collections are considered empty if they have a `length` of `0`.
  57194. * Similarly, maps and sets are considered empty if they have a `size` of `0`.
  57195. *
  57196. * @static
  57197. * @memberOf _
  57198. * @since 0.1.0
  57199. * @category Lang
  57200. * @param {*} value The value to check.
  57201. * @returns {boolean} Returns `true` if `value` is empty, else `false`.
  57202. * @example
  57203. *
  57204. * _.isEmpty(null);
  57205. * // => true
  57206. *
  57207. * _.isEmpty(true);
  57208. * // => true
  57209. *
  57210. * _.isEmpty(1);
  57211. * // => true
  57212. *
  57213. * _.isEmpty([1, 2, 3]);
  57214. * // => false
  57215. *
  57216. * _.isEmpty({ 'a': 1 });
  57217. * // => false
  57218. */
  57219. function isEmpty(value) {
  57220. if (value == null) {
  57221. return true;
  57222. }
  57223. if (isArrayLike(value) &&
  57224. (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
  57225. isBuffer(value) || isTypedArray(value) || isArguments(value))) {
  57226. return !value.length;
  57227. }
  57228. var tag = getTag(value);
  57229. if (tag == mapTag || tag == setTag) {
  57230. return !value.size;
  57231. }
  57232. if (isPrototype(value)) {
  57233. return !baseKeys(value).length;
  57234. }
  57235. for (var key in value) {
  57236. if (hasOwnProperty.call(value, key)) {
  57237. return false;
  57238. }
  57239. }
  57240. return true;
  57241. }
  57242. /**
  57243. * Performs a deep comparison between two values to determine if they are
  57244. * equivalent.
  57245. *
  57246. * **Note:** This method supports comparing arrays, array buffers, booleans,
  57247. * date objects, error objects, maps, numbers, `Object` objects, regexes,
  57248. * sets, strings, symbols, and typed arrays. `Object` objects are compared
  57249. * by their own, not inherited, enumerable properties. Functions and DOM
  57250. * nodes are compared by strict equality, i.e. `===`.
  57251. *
  57252. * @static
  57253. * @memberOf _
  57254. * @since 0.1.0
  57255. * @category Lang
  57256. * @param {*} value The value to compare.
  57257. * @param {*} other The other value to compare.
  57258. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  57259. * @example
  57260. *
  57261. * var object = { 'a': 1 };
  57262. * var other = { 'a': 1 };
  57263. *
  57264. * _.isEqual(object, other);
  57265. * // => true
  57266. *
  57267. * object === other;
  57268. * // => false
  57269. */
  57270. function isEqual(value, other) {
  57271. return baseIsEqual(value, other);
  57272. }
  57273. /**
  57274. * This method is like `_.isEqual` except that it accepts `customizer` which
  57275. * is invoked to compare values. If `customizer` returns `undefined`, comparisons
  57276. * are handled by the method instead. The `customizer` is invoked with up to
  57277. * six arguments: (objValue, othValue [, index|key, object, other, stack]).
  57278. *
  57279. * @static
  57280. * @memberOf _
  57281. * @since 4.0.0
  57282. * @category Lang
  57283. * @param {*} value The value to compare.
  57284. * @param {*} other The other value to compare.
  57285. * @param {Function} [customizer] The function to customize comparisons.
  57286. * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  57287. * @example
  57288. *
  57289. * function isGreeting(value) {
  57290. * return /^h(?:i|ello)$/.test(value);
  57291. * }
  57292. *
  57293. * function customizer(objValue, othValue) {
  57294. * if (isGreeting(objValue) && isGreeting(othValue)) {
  57295. * return true;
  57296. * }
  57297. * }
  57298. *
  57299. * var array = ['hello', 'goodbye'];
  57300. * var other = ['hi', 'goodbye'];
  57301. *
  57302. * _.isEqualWith(array, other, customizer);
  57303. * // => true
  57304. */
  57305. function isEqualWith(value, other, customizer) {
  57306. customizer = typeof customizer == 'function' ? customizer : undefined;
  57307. var result = customizer ? customizer(value, other) : undefined;
  57308. return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
  57309. }
  57310. /**
  57311. * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
  57312. * `SyntaxError`, `TypeError`, or `URIError` object.
  57313. *
  57314. * @static
  57315. * @memberOf _
  57316. * @since 3.0.0
  57317. * @category Lang
  57318. * @param {*} value The value to check.
  57319. * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
  57320. * @example
  57321. *
  57322. * _.isError(new Error);
  57323. * // => true
  57324. *
  57325. * _.isError(Error);
  57326. * // => false
  57327. */
  57328. function isError(value) {
  57329. if (!isObjectLike(value)) {
  57330. return false;
  57331. }
  57332. var tag = baseGetTag(value);
  57333. return tag == errorTag || tag == domExcTag ||
  57334. (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
  57335. }
  57336. /**
  57337. * Checks if `value` is a finite primitive number.
  57338. *
  57339. * **Note:** This method is based on
  57340. * [`Number.isFinite`](https://mdn.io/Number/isFinite).
  57341. *
  57342. * @static
  57343. * @memberOf _
  57344. * @since 0.1.0
  57345. * @category Lang
  57346. * @param {*} value The value to check.
  57347. * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
  57348. * @example
  57349. *
  57350. * _.isFinite(3);
  57351. * // => true
  57352. *
  57353. * _.isFinite(Number.MIN_VALUE);
  57354. * // => true
  57355. *
  57356. * _.isFinite(Infinity);
  57357. * // => false
  57358. *
  57359. * _.isFinite('3');
  57360. * // => false
  57361. */
  57362. function isFinite(value) {
  57363. return typeof value == 'number' && nativeIsFinite(value);
  57364. }
  57365. /**
  57366. * Checks if `value` is classified as a `Function` object.
  57367. *
  57368. * @static
  57369. * @memberOf _
  57370. * @since 0.1.0
  57371. * @category Lang
  57372. * @param {*} value The value to check.
  57373. * @returns {boolean} Returns `true` if `value` is a function, else `false`.
  57374. * @example
  57375. *
  57376. * _.isFunction(_);
  57377. * // => true
  57378. *
  57379. * _.isFunction(/abc/);
  57380. * // => false
  57381. */
  57382. function isFunction(value) {
  57383. if (!isObject(value)) {
  57384. return false;
  57385. }
  57386. // The use of `Object#toString` avoids issues with the `typeof` operator
  57387. // in Safari 9 which returns 'object' for typed arrays and other constructors.
  57388. var tag = baseGetTag(value);
  57389. return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
  57390. }
  57391. /**
  57392. * Checks if `value` is an integer.
  57393. *
  57394. * **Note:** This method is based on
  57395. * [`Number.isInteger`](https://mdn.io/Number/isInteger).
  57396. *
  57397. * @static
  57398. * @memberOf _
  57399. * @since 4.0.0
  57400. * @category Lang
  57401. * @param {*} value The value to check.
  57402. * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
  57403. * @example
  57404. *
  57405. * _.isInteger(3);
  57406. * // => true
  57407. *
  57408. * _.isInteger(Number.MIN_VALUE);
  57409. * // => false
  57410. *
  57411. * _.isInteger(Infinity);
  57412. * // => false
  57413. *
  57414. * _.isInteger('3');
  57415. * // => false
  57416. */
  57417. function isInteger(value) {
  57418. return typeof value == 'number' && value == toInteger(value);
  57419. }
  57420. /**
  57421. * Checks if `value` is a valid array-like length.
  57422. *
  57423. * **Note:** This method is loosely based on
  57424. * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
  57425. *
  57426. * @static
  57427. * @memberOf _
  57428. * @since 4.0.0
  57429. * @category Lang
  57430. * @param {*} value The value to check.
  57431. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
  57432. * @example
  57433. *
  57434. * _.isLength(3);
  57435. * // => true
  57436. *
  57437. * _.isLength(Number.MIN_VALUE);
  57438. * // => false
  57439. *
  57440. * _.isLength(Infinity);
  57441. * // => false
  57442. *
  57443. * _.isLength('3');
  57444. * // => false
  57445. */
  57446. function isLength(value) {
  57447. return typeof value == 'number' &&
  57448. value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
  57449. }
  57450. /**
  57451. * Checks if `value` is the
  57452. * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
  57453. * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
  57454. *
  57455. * @static
  57456. * @memberOf _
  57457. * @since 0.1.0
  57458. * @category Lang
  57459. * @param {*} value The value to check.
  57460. * @returns {boolean} Returns `true` if `value` is an object, else `false`.
  57461. * @example
  57462. *
  57463. * _.isObject({});
  57464. * // => true
  57465. *
  57466. * _.isObject([1, 2, 3]);
  57467. * // => true
  57468. *
  57469. * _.isObject(_.noop);
  57470. * // => true
  57471. *
  57472. * _.isObject(null);
  57473. * // => false
  57474. */
  57475. function isObject(value) {
  57476. var type = typeof value;
  57477. return value != null && (type == 'object' || type == 'function');
  57478. }
  57479. /**
  57480. * Checks if `value` is object-like. A value is object-like if it's not `null`
  57481. * and has a `typeof` result of "object".
  57482. *
  57483. * @static
  57484. * @memberOf _
  57485. * @since 4.0.0
  57486. * @category Lang
  57487. * @param {*} value The value to check.
  57488. * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
  57489. * @example
  57490. *
  57491. * _.isObjectLike({});
  57492. * // => true
  57493. *
  57494. * _.isObjectLike([1, 2, 3]);
  57495. * // => true
  57496. *
  57497. * _.isObjectLike(_.noop);
  57498. * // => false
  57499. *
  57500. * _.isObjectLike(null);
  57501. * // => false
  57502. */
  57503. function isObjectLike(value) {
  57504. return value != null && typeof value == 'object';
  57505. }
  57506. /**
  57507. * Checks if `value` is classified as a `Map` object.
  57508. *
  57509. * @static
  57510. * @memberOf _
  57511. * @since 4.3.0
  57512. * @category Lang
  57513. * @param {*} value The value to check.
  57514. * @returns {boolean} Returns `true` if `value` is a map, else `false`.
  57515. * @example
  57516. *
  57517. * _.isMap(new Map);
  57518. * // => true
  57519. *
  57520. * _.isMap(new WeakMap);
  57521. * // => false
  57522. */
  57523. var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
  57524. /**
  57525. * Performs a partial deep comparison between `object` and `source` to
  57526. * determine if `object` contains equivalent property values.
  57527. *
  57528. * **Note:** This method is equivalent to `_.matches` when `source` is
  57529. * partially applied.
  57530. *
  57531. * Partial comparisons will match empty array and empty object `source`
  57532. * values against any array or object value, respectively. See `_.isEqual`
  57533. * for a list of supported value comparisons.
  57534. *
  57535. * @static
  57536. * @memberOf _
  57537. * @since 3.0.0
  57538. * @category Lang
  57539. * @param {Object} object The object to inspect.
  57540. * @param {Object} source The object of property values to match.
  57541. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  57542. * @example
  57543. *
  57544. * var object = { 'a': 1, 'b': 2 };
  57545. *
  57546. * _.isMatch(object, { 'b': 2 });
  57547. * // => true
  57548. *
  57549. * _.isMatch(object, { 'b': 1 });
  57550. * // => false
  57551. */
  57552. function isMatch(object, source) {
  57553. return object === source || baseIsMatch(object, source, getMatchData(source));
  57554. }
  57555. /**
  57556. * This method is like `_.isMatch` except that it accepts `customizer` which
  57557. * is invoked to compare values. If `customizer` returns `undefined`, comparisons
  57558. * are handled by the method instead. The `customizer` is invoked with five
  57559. * arguments: (objValue, srcValue, index|key, object, source).
  57560. *
  57561. * @static
  57562. * @memberOf _
  57563. * @since 4.0.0
  57564. * @category Lang
  57565. * @param {Object} object The object to inspect.
  57566. * @param {Object} source The object of property values to match.
  57567. * @param {Function} [customizer] The function to customize comparisons.
  57568. * @returns {boolean} Returns `true` if `object` is a match, else `false`.
  57569. * @example
  57570. *
  57571. * function isGreeting(value) {
  57572. * return /^h(?:i|ello)$/.test(value);
  57573. * }
  57574. *
  57575. * function customizer(objValue, srcValue) {
  57576. * if (isGreeting(objValue) && isGreeting(srcValue)) {
  57577. * return true;
  57578. * }
  57579. * }
  57580. *
  57581. * var object = { 'greeting': 'hello' };
  57582. * var source = { 'greeting': 'hi' };
  57583. *
  57584. * _.isMatchWith(object, source, customizer);
  57585. * // => true
  57586. */
  57587. function isMatchWith(object, source, customizer) {
  57588. customizer = typeof customizer == 'function' ? customizer : undefined;
  57589. return baseIsMatch(object, source, getMatchData(source), customizer);
  57590. }
  57591. /**
  57592. * Checks if `value` is `NaN`.
  57593. *
  57594. * **Note:** This method is based on
  57595. * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
  57596. * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
  57597. * `undefined` and other non-number values.
  57598. *
  57599. * @static
  57600. * @memberOf _
  57601. * @since 0.1.0
  57602. * @category Lang
  57603. * @param {*} value The value to check.
  57604. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
  57605. * @example
  57606. *
  57607. * _.isNaN(NaN);
  57608. * // => true
  57609. *
  57610. * _.isNaN(new Number(NaN));
  57611. * // => true
  57612. *
  57613. * isNaN(undefined);
  57614. * // => true
  57615. *
  57616. * _.isNaN(undefined);
  57617. * // => false
  57618. */
  57619. function isNaN(value) {
  57620. // An `NaN` primitive is the only value that is not equal to itself.
  57621. // Perform the `toStringTag` check first to avoid errors with some
  57622. // ActiveX objects in IE.
  57623. return isNumber(value) && value != +value;
  57624. }
  57625. /**
  57626. * Checks if `value` is a pristine native function.
  57627. *
  57628. * **Note:** This method can't reliably detect native functions in the presence
  57629. * of the core-js package because core-js circumvents this kind of detection.
  57630. * Despite multiple requests, the core-js maintainer has made it clear: any
  57631. * attempt to fix the detection will be obstructed. As a result, we're left
  57632. * with little choice but to throw an error. Unfortunately, this also affects
  57633. * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
  57634. * which rely on core-js.
  57635. *
  57636. * @static
  57637. * @memberOf _
  57638. * @since 3.0.0
  57639. * @category Lang
  57640. * @param {*} value The value to check.
  57641. * @returns {boolean} Returns `true` if `value` is a native function,
  57642. * else `false`.
  57643. * @example
  57644. *
  57645. * _.isNative(Array.prototype.push);
  57646. * // => true
  57647. *
  57648. * _.isNative(_);
  57649. * // => false
  57650. */
  57651. function isNative(value) {
  57652. if (isMaskable(value)) {
  57653. throw new Error(CORE_ERROR_TEXT);
  57654. }
  57655. return baseIsNative(value);
  57656. }
  57657. /**
  57658. * Checks if `value` is `null`.
  57659. *
  57660. * @static
  57661. * @memberOf _
  57662. * @since 0.1.0
  57663. * @category Lang
  57664. * @param {*} value The value to check.
  57665. * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
  57666. * @example
  57667. *
  57668. * _.isNull(null);
  57669. * // => true
  57670. *
  57671. * _.isNull(void 0);
  57672. * // => false
  57673. */
  57674. function isNull(value) {
  57675. return value === null;
  57676. }
  57677. /**
  57678. * Checks if `value` is `null` or `undefined`.
  57679. *
  57680. * @static
  57681. * @memberOf _
  57682. * @since 4.0.0
  57683. * @category Lang
  57684. * @param {*} value The value to check.
  57685. * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
  57686. * @example
  57687. *
  57688. * _.isNil(null);
  57689. * // => true
  57690. *
  57691. * _.isNil(void 0);
  57692. * // => true
  57693. *
  57694. * _.isNil(NaN);
  57695. * // => false
  57696. */
  57697. function isNil(value) {
  57698. return value == null;
  57699. }
  57700. /**
  57701. * Checks if `value` is classified as a `Number` primitive or object.
  57702. *
  57703. * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
  57704. * classified as numbers, use the `_.isFinite` method.
  57705. *
  57706. * @static
  57707. * @memberOf _
  57708. * @since 0.1.0
  57709. * @category Lang
  57710. * @param {*} value The value to check.
  57711. * @returns {boolean} Returns `true` if `value` is a number, else `false`.
  57712. * @example
  57713. *
  57714. * _.isNumber(3);
  57715. * // => true
  57716. *
  57717. * _.isNumber(Number.MIN_VALUE);
  57718. * // => true
  57719. *
  57720. * _.isNumber(Infinity);
  57721. * // => true
  57722. *
  57723. * _.isNumber('3');
  57724. * // => false
  57725. */
  57726. function isNumber(value) {
  57727. return typeof value == 'number' ||
  57728. (isObjectLike(value) && baseGetTag(value) == numberTag);
  57729. }
  57730. /**
  57731. * Checks if `value` is a plain object, that is, an object created by the
  57732. * `Object` constructor or one with a `[[Prototype]]` of `null`.
  57733. *
  57734. * @static
  57735. * @memberOf _
  57736. * @since 0.8.0
  57737. * @category Lang
  57738. * @param {*} value The value to check.
  57739. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
  57740. * @example
  57741. *
  57742. * function Foo() {
  57743. * this.a = 1;
  57744. * }
  57745. *
  57746. * _.isPlainObject(new Foo);
  57747. * // => false
  57748. *
  57749. * _.isPlainObject([1, 2, 3]);
  57750. * // => false
  57751. *
  57752. * _.isPlainObject({ 'x': 0, 'y': 0 });
  57753. * // => true
  57754. *
  57755. * _.isPlainObject(Object.create(null));
  57756. * // => true
  57757. */
  57758. function isPlainObject(value) {
  57759. if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
  57760. return false;
  57761. }
  57762. var proto = getPrototype(value);
  57763. if (proto === null) {
  57764. return true;
  57765. }
  57766. var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
  57767. return typeof Ctor == 'function' && Ctor instanceof Ctor &&
  57768. funcToString.call(Ctor) == objectCtorString;
  57769. }
  57770. /**
  57771. * Checks if `value` is classified as a `RegExp` object.
  57772. *
  57773. * @static
  57774. * @memberOf _
  57775. * @since 0.1.0
  57776. * @category Lang
  57777. * @param {*} value The value to check.
  57778. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
  57779. * @example
  57780. *
  57781. * _.isRegExp(/abc/);
  57782. * // => true
  57783. *
  57784. * _.isRegExp('/abc/');
  57785. * // => false
  57786. */
  57787. var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
  57788. /**
  57789. * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
  57790. * double precision number which isn't the result of a rounded unsafe integer.
  57791. *
  57792. * **Note:** This method is based on
  57793. * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
  57794. *
  57795. * @static
  57796. * @memberOf _
  57797. * @since 4.0.0
  57798. * @category Lang
  57799. * @param {*} value The value to check.
  57800. * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
  57801. * @example
  57802. *
  57803. * _.isSafeInteger(3);
  57804. * // => true
  57805. *
  57806. * _.isSafeInteger(Number.MIN_VALUE);
  57807. * // => false
  57808. *
  57809. * _.isSafeInteger(Infinity);
  57810. * // => false
  57811. *
  57812. * _.isSafeInteger('3');
  57813. * // => false
  57814. */
  57815. function isSafeInteger(value) {
  57816. return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
  57817. }
  57818. /**
  57819. * Checks if `value` is classified as a `Set` object.
  57820. *
  57821. * @static
  57822. * @memberOf _
  57823. * @since 4.3.0
  57824. * @category Lang
  57825. * @param {*} value The value to check.
  57826. * @returns {boolean} Returns `true` if `value` is a set, else `false`.
  57827. * @example
  57828. *
  57829. * _.isSet(new Set);
  57830. * // => true
  57831. *
  57832. * _.isSet(new WeakSet);
  57833. * // => false
  57834. */
  57835. var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
  57836. /**
  57837. * Checks if `value` is classified as a `String` primitive or object.
  57838. *
  57839. * @static
  57840. * @since 0.1.0
  57841. * @memberOf _
  57842. * @category Lang
  57843. * @param {*} value The value to check.
  57844. * @returns {boolean} Returns `true` if `value` is a string, else `false`.
  57845. * @example
  57846. *
  57847. * _.isString('abc');
  57848. * // => true
  57849. *
  57850. * _.isString(1);
  57851. * // => false
  57852. */
  57853. function isString(value) {
  57854. return typeof value == 'string' ||
  57855. (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
  57856. }
  57857. /**
  57858. * Checks if `value` is classified as a `Symbol` primitive or object.
  57859. *
  57860. * @static
  57861. * @memberOf _
  57862. * @since 4.0.0
  57863. * @category Lang
  57864. * @param {*} value The value to check.
  57865. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
  57866. * @example
  57867. *
  57868. * _.isSymbol(Symbol.iterator);
  57869. * // => true
  57870. *
  57871. * _.isSymbol('abc');
  57872. * // => false
  57873. */
  57874. function isSymbol(value) {
  57875. return typeof value == 'symbol' ||
  57876. (isObjectLike(value) && baseGetTag(value) == symbolTag);
  57877. }
  57878. /**
  57879. * Checks if `value` is classified as a typed array.
  57880. *
  57881. * @static
  57882. * @memberOf _
  57883. * @since 3.0.0
  57884. * @category Lang
  57885. * @param {*} value The value to check.
  57886. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
  57887. * @example
  57888. *
  57889. * _.isTypedArray(new Uint8Array);
  57890. * // => true
  57891. *
  57892. * _.isTypedArray([]);
  57893. * // => false
  57894. */
  57895. var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
  57896. /**
  57897. * Checks if `value` is `undefined`.
  57898. *
  57899. * @static
  57900. * @since 0.1.0
  57901. * @memberOf _
  57902. * @category Lang
  57903. * @param {*} value The value to check.
  57904. * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
  57905. * @example
  57906. *
  57907. * _.isUndefined(void 0);
  57908. * // => true
  57909. *
  57910. * _.isUndefined(null);
  57911. * // => false
  57912. */
  57913. function isUndefined(value) {
  57914. return value === undefined;
  57915. }
  57916. /**
  57917. * Checks if `value` is classified as a `WeakMap` object.
  57918. *
  57919. * @static
  57920. * @memberOf _
  57921. * @since 4.3.0
  57922. * @category Lang
  57923. * @param {*} value The value to check.
  57924. * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
  57925. * @example
  57926. *
  57927. * _.isWeakMap(new WeakMap);
  57928. * // => true
  57929. *
  57930. * _.isWeakMap(new Map);
  57931. * // => false
  57932. */
  57933. function isWeakMap(value) {
  57934. return isObjectLike(value) && getTag(value) == weakMapTag;
  57935. }
  57936. /**
  57937. * Checks if `value` is classified as a `WeakSet` object.
  57938. *
  57939. * @static
  57940. * @memberOf _
  57941. * @since 4.3.0
  57942. * @category Lang
  57943. * @param {*} value The value to check.
  57944. * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
  57945. * @example
  57946. *
  57947. * _.isWeakSet(new WeakSet);
  57948. * // => true
  57949. *
  57950. * _.isWeakSet(new Set);
  57951. * // => false
  57952. */
  57953. function isWeakSet(value) {
  57954. return isObjectLike(value) && baseGetTag(value) == weakSetTag;
  57955. }
  57956. /**
  57957. * Checks if `value` is less than `other`.
  57958. *
  57959. * @static
  57960. * @memberOf _
  57961. * @since 3.9.0
  57962. * @category Lang
  57963. * @param {*} value The value to compare.
  57964. * @param {*} other The other value to compare.
  57965. * @returns {boolean} Returns `true` if `value` is less than `other`,
  57966. * else `false`.
  57967. * @see _.gt
  57968. * @example
  57969. *
  57970. * _.lt(1, 3);
  57971. * // => true
  57972. *
  57973. * _.lt(3, 3);
  57974. * // => false
  57975. *
  57976. * _.lt(3, 1);
  57977. * // => false
  57978. */
  57979. var lt = createRelationalOperation(baseLt);
  57980. /**
  57981. * Checks if `value` is less than or equal to `other`.
  57982. *
  57983. * @static
  57984. * @memberOf _
  57985. * @since 3.9.0
  57986. * @category Lang
  57987. * @param {*} value The value to compare.
  57988. * @param {*} other The other value to compare.
  57989. * @returns {boolean} Returns `true` if `value` is less than or equal to
  57990. * `other`, else `false`.
  57991. * @see _.gte
  57992. * @example
  57993. *
  57994. * _.lte(1, 3);
  57995. * // => true
  57996. *
  57997. * _.lte(3, 3);
  57998. * // => true
  57999. *
  58000. * _.lte(3, 1);
  58001. * // => false
  58002. */
  58003. var lte = createRelationalOperation(function(value, other) {
  58004. return value <= other;
  58005. });
  58006. /**
  58007. * Converts `value` to an array.
  58008. *
  58009. * @static
  58010. * @since 0.1.0
  58011. * @memberOf _
  58012. * @category Lang
  58013. * @param {*} value The value to convert.
  58014. * @returns {Array} Returns the converted array.
  58015. * @example
  58016. *
  58017. * _.toArray({ 'a': 1, 'b': 2 });
  58018. * // => [1, 2]
  58019. *
  58020. * _.toArray('abc');
  58021. * // => ['a', 'b', 'c']
  58022. *
  58023. * _.toArray(1);
  58024. * // => []
  58025. *
  58026. * _.toArray(null);
  58027. * // => []
  58028. */
  58029. function toArray(value) {
  58030. if (!value) {
  58031. return [];
  58032. }
  58033. if (isArrayLike(value)) {
  58034. return isString(value) ? stringToArray(value) : copyArray(value);
  58035. }
  58036. if (symIterator && value[symIterator]) {
  58037. return iteratorToArray(value[symIterator]());
  58038. }
  58039. var tag = getTag(value),
  58040. func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
  58041. return func(value);
  58042. }
  58043. /**
  58044. * Converts `value` to a finite number.
  58045. *
  58046. * @static
  58047. * @memberOf _
  58048. * @since 4.12.0
  58049. * @category Lang
  58050. * @param {*} value The value to convert.
  58051. * @returns {number} Returns the converted number.
  58052. * @example
  58053. *
  58054. * _.toFinite(3.2);
  58055. * // => 3.2
  58056. *
  58057. * _.toFinite(Number.MIN_VALUE);
  58058. * // => 5e-324
  58059. *
  58060. * _.toFinite(Infinity);
  58061. * // => 1.7976931348623157e+308
  58062. *
  58063. * _.toFinite('3.2');
  58064. * // => 3.2
  58065. */
  58066. function toFinite(value) {
  58067. if (!value) {
  58068. return value === 0 ? value : 0;
  58069. }
  58070. value = toNumber(value);
  58071. if (value === INFINITY || value === -INFINITY) {
  58072. var sign = (value < 0 ? -1 : 1);
  58073. return sign * MAX_INTEGER;
  58074. }
  58075. return value === value ? value : 0;
  58076. }
  58077. /**
  58078. * Converts `value` to an integer.
  58079. *
  58080. * **Note:** This method is loosely based on
  58081. * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
  58082. *
  58083. * @static
  58084. * @memberOf _
  58085. * @since 4.0.0
  58086. * @category Lang
  58087. * @param {*} value The value to convert.
  58088. * @returns {number} Returns the converted integer.
  58089. * @example
  58090. *
  58091. * _.toInteger(3.2);
  58092. * // => 3
  58093. *
  58094. * _.toInteger(Number.MIN_VALUE);
  58095. * // => 0
  58096. *
  58097. * _.toInteger(Infinity);
  58098. * // => 1.7976931348623157e+308
  58099. *
  58100. * _.toInteger('3.2');
  58101. * // => 3
  58102. */
  58103. function toInteger(value) {
  58104. var result = toFinite(value),
  58105. remainder = result % 1;
  58106. return result === result ? (remainder ? result - remainder : result) : 0;
  58107. }
  58108. /**
  58109. * Converts `value` to an integer suitable for use as the length of an
  58110. * array-like object.
  58111. *
  58112. * **Note:** This method is based on
  58113. * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
  58114. *
  58115. * @static
  58116. * @memberOf _
  58117. * @since 4.0.0
  58118. * @category Lang
  58119. * @param {*} value The value to convert.
  58120. * @returns {number} Returns the converted integer.
  58121. * @example
  58122. *
  58123. * _.toLength(3.2);
  58124. * // => 3
  58125. *
  58126. * _.toLength(Number.MIN_VALUE);
  58127. * // => 0
  58128. *
  58129. * _.toLength(Infinity);
  58130. * // => 4294967295
  58131. *
  58132. * _.toLength('3.2');
  58133. * // => 3
  58134. */
  58135. function toLength(value) {
  58136. return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
  58137. }
  58138. /**
  58139. * Converts `value` to a number.
  58140. *
  58141. * @static
  58142. * @memberOf _
  58143. * @since 4.0.0
  58144. * @category Lang
  58145. * @param {*} value The value to process.
  58146. * @returns {number} Returns the number.
  58147. * @example
  58148. *
  58149. * _.toNumber(3.2);
  58150. * // => 3.2
  58151. *
  58152. * _.toNumber(Number.MIN_VALUE);
  58153. * // => 5e-324
  58154. *
  58155. * _.toNumber(Infinity);
  58156. * // => Infinity
  58157. *
  58158. * _.toNumber('3.2');
  58159. * // => 3.2
  58160. */
  58161. function toNumber(value) {
  58162. if (typeof value == 'number') {
  58163. return value;
  58164. }
  58165. if (isSymbol(value)) {
  58166. return NAN;
  58167. }
  58168. if (isObject(value)) {
  58169. var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
  58170. value = isObject(other) ? (other + '') : other;
  58171. }
  58172. if (typeof value != 'string') {
  58173. return value === 0 ? value : +value;
  58174. }
  58175. value = baseTrim(value);
  58176. var isBinary = reIsBinary.test(value);
  58177. return (isBinary || reIsOctal.test(value))
  58178. ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
  58179. : (reIsBadHex.test(value) ? NAN : +value);
  58180. }
  58181. /**
  58182. * Converts `value` to a plain object flattening inherited enumerable string
  58183. * keyed properties of `value` to own properties of the plain object.
  58184. *
  58185. * @static
  58186. * @memberOf _
  58187. * @since 3.0.0
  58188. * @category Lang
  58189. * @param {*} value The value to convert.
  58190. * @returns {Object} Returns the converted plain object.
  58191. * @example
  58192. *
  58193. * function Foo() {
  58194. * this.b = 2;
  58195. * }
  58196. *
  58197. * Foo.prototype.c = 3;
  58198. *
  58199. * _.assign({ 'a': 1 }, new Foo);
  58200. * // => { 'a': 1, 'b': 2 }
  58201. *
  58202. * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
  58203. * // => { 'a': 1, 'b': 2, 'c': 3 }
  58204. */
  58205. function toPlainObject(value) {
  58206. return copyObject(value, keysIn(value));
  58207. }
  58208. /**
  58209. * Converts `value` to a safe integer. A safe integer can be compared and
  58210. * represented correctly.
  58211. *
  58212. * @static
  58213. * @memberOf _
  58214. * @since 4.0.0
  58215. * @category Lang
  58216. * @param {*} value The value to convert.
  58217. * @returns {number} Returns the converted integer.
  58218. * @example
  58219. *
  58220. * _.toSafeInteger(3.2);
  58221. * // => 3
  58222. *
  58223. * _.toSafeInteger(Number.MIN_VALUE);
  58224. * // => 0
  58225. *
  58226. * _.toSafeInteger(Infinity);
  58227. * // => 9007199254740991
  58228. *
  58229. * _.toSafeInteger('3.2');
  58230. * // => 3
  58231. */
  58232. function toSafeInteger(value) {
  58233. return value
  58234. ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
  58235. : (value === 0 ? value : 0);
  58236. }
  58237. /**
  58238. * Converts `value` to a string. An empty string is returned for `null`
  58239. * and `undefined` values. The sign of `-0` is preserved.
  58240. *
  58241. * @static
  58242. * @memberOf _
  58243. * @since 4.0.0
  58244. * @category Lang
  58245. * @param {*} value The value to convert.
  58246. * @returns {string} Returns the converted string.
  58247. * @example
  58248. *
  58249. * _.toString(null);
  58250. * // => ''
  58251. *
  58252. * _.toString(-0);
  58253. * // => '-0'
  58254. *
  58255. * _.toString([1, 2, 3]);
  58256. * // => '1,2,3'
  58257. */
  58258. function toString(value) {
  58259. return value == null ? '' : baseToString(value);
  58260. }
  58261. /*------------------------------------------------------------------------*/
  58262. /**
  58263. * Assigns own enumerable string keyed properties of source objects to the
  58264. * destination object. Source objects are applied from left to right.
  58265. * Subsequent sources overwrite property assignments of previous sources.
  58266. *
  58267. * **Note:** This method mutates `object` and is loosely based on
  58268. * [`Object.assign`](https://mdn.io/Object/assign).
  58269. *
  58270. * @static
  58271. * @memberOf _
  58272. * @since 0.10.0
  58273. * @category Object
  58274. * @param {Object} object The destination object.
  58275. * @param {...Object} [sources] The source objects.
  58276. * @returns {Object} Returns `object`.
  58277. * @see _.assignIn
  58278. * @example
  58279. *
  58280. * function Foo() {
  58281. * this.a = 1;
  58282. * }
  58283. *
  58284. * function Bar() {
  58285. * this.c = 3;
  58286. * }
  58287. *
  58288. * Foo.prototype.b = 2;
  58289. * Bar.prototype.d = 4;
  58290. *
  58291. * _.assign({ 'a': 0 }, new Foo, new Bar);
  58292. * // => { 'a': 1, 'c': 3 }
  58293. */
  58294. var assign = createAssigner(function(object, source) {
  58295. if (isPrototype(source) || isArrayLike(source)) {
  58296. copyObject(source, keys(source), object);
  58297. return;
  58298. }
  58299. for (var key in source) {
  58300. if (hasOwnProperty.call(source, key)) {
  58301. assignValue(object, key, source[key]);
  58302. }
  58303. }
  58304. });
  58305. /**
  58306. * This method is like `_.assign` except that it iterates over own and
  58307. * inherited source properties.
  58308. *
  58309. * **Note:** This method mutates `object`.
  58310. *
  58311. * @static
  58312. * @memberOf _
  58313. * @since 4.0.0
  58314. * @alias extend
  58315. * @category Object
  58316. * @param {Object} object The destination object.
  58317. * @param {...Object} [sources] The source objects.
  58318. * @returns {Object} Returns `object`.
  58319. * @see _.assign
  58320. * @example
  58321. *
  58322. * function Foo() {
  58323. * this.a = 1;
  58324. * }
  58325. *
  58326. * function Bar() {
  58327. * this.c = 3;
  58328. * }
  58329. *
  58330. * Foo.prototype.b = 2;
  58331. * Bar.prototype.d = 4;
  58332. *
  58333. * _.assignIn({ 'a': 0 }, new Foo, new Bar);
  58334. * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
  58335. */
  58336. var assignIn = createAssigner(function(object, source) {
  58337. copyObject(source, keysIn(source), object);
  58338. });
  58339. /**
  58340. * This method is like `_.assignIn` except that it accepts `customizer`
  58341. * which is invoked to produce the assigned values. If `customizer` returns
  58342. * `undefined`, assignment is handled by the method instead. The `customizer`
  58343. * is invoked with five arguments: (objValue, srcValue, key, object, source).
  58344. *
  58345. * **Note:** This method mutates `object`.
  58346. *
  58347. * @static
  58348. * @memberOf _
  58349. * @since 4.0.0
  58350. * @alias extendWith
  58351. * @category Object
  58352. * @param {Object} object The destination object.
  58353. * @param {...Object} sources The source objects.
  58354. * @param {Function} [customizer] The function to customize assigned values.
  58355. * @returns {Object} Returns `object`.
  58356. * @see _.assignWith
  58357. * @example
  58358. *
  58359. * function customizer(objValue, srcValue) {
  58360. * return _.isUndefined(objValue) ? srcValue : objValue;
  58361. * }
  58362. *
  58363. * var defaults = _.partialRight(_.assignInWith, customizer);
  58364. *
  58365. * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
  58366. * // => { 'a': 1, 'b': 2 }
  58367. */
  58368. var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
  58369. copyObject(source, keysIn(source), object, customizer);
  58370. });
  58371. /**
  58372. * This method is like `_.assign` except that it accepts `customizer`
  58373. * which is invoked to produce the assigned values. If `customizer` returns
  58374. * `undefined`, assignment is handled by the method instead. The `customizer`
  58375. * is invoked with five arguments: (objValue, srcValue, key, object, source).
  58376. *
  58377. * **Note:** This method mutates `object`.
  58378. *
  58379. * @static
  58380. * @memberOf _
  58381. * @since 4.0.0
  58382. * @category Object
  58383. * @param {Object} object The destination object.
  58384. * @param {...Object} sources The source objects.
  58385. * @param {Function} [customizer] The function to customize assigned values.
  58386. * @returns {Object} Returns `object`.
  58387. * @see _.assignInWith
  58388. * @example
  58389. *
  58390. * function customizer(objValue, srcValue) {
  58391. * return _.isUndefined(objValue) ? srcValue : objValue;
  58392. * }
  58393. *
  58394. * var defaults = _.partialRight(_.assignWith, customizer);
  58395. *
  58396. * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
  58397. * // => { 'a': 1, 'b': 2 }
  58398. */
  58399. var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
  58400. copyObject(source, keys(source), object, customizer);
  58401. });
  58402. /**
  58403. * Creates an array of values corresponding to `paths` of `object`.
  58404. *
  58405. * @static
  58406. * @memberOf _
  58407. * @since 1.0.0
  58408. * @category Object
  58409. * @param {Object} object The object to iterate over.
  58410. * @param {...(string|string[])} [paths] The property paths to pick.
  58411. * @returns {Array} Returns the picked values.
  58412. * @example
  58413. *
  58414. * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
  58415. *
  58416. * _.at(object, ['a[0].b.c', 'a[1]']);
  58417. * // => [3, 4]
  58418. */
  58419. var at = flatRest(baseAt);
  58420. /**
  58421. * Creates an object that inherits from the `prototype` object. If a
  58422. * `properties` object is given, its own enumerable string keyed properties
  58423. * are assigned to the created object.
  58424. *
  58425. * @static
  58426. * @memberOf _
  58427. * @since 2.3.0
  58428. * @category Object
  58429. * @param {Object} prototype The object to inherit from.
  58430. * @param {Object} [properties] The properties to assign to the object.
  58431. * @returns {Object} Returns the new object.
  58432. * @example
  58433. *
  58434. * function Shape() {
  58435. * this.x = 0;
  58436. * this.y = 0;
  58437. * }
  58438. *
  58439. * function Circle() {
  58440. * Shape.call(this);
  58441. * }
  58442. *
  58443. * Circle.prototype = _.create(Shape.prototype, {
  58444. * 'constructor': Circle
  58445. * });
  58446. *
  58447. * var circle = new Circle;
  58448. * circle instanceof Circle;
  58449. * // => true
  58450. *
  58451. * circle instanceof Shape;
  58452. * // => true
  58453. */
  58454. function create(prototype, properties) {
  58455. var result = baseCreate(prototype);
  58456. return properties == null ? result : baseAssign(result, properties);
  58457. }
  58458. /**
  58459. * Assigns own and inherited enumerable string keyed properties of source
  58460. * objects to the destination object for all destination properties that
  58461. * resolve to `undefined`. Source objects are applied from left to right.
  58462. * Once a property is set, additional values of the same property are ignored.
  58463. *
  58464. * **Note:** This method mutates `object`.
  58465. *
  58466. * @static
  58467. * @since 0.1.0
  58468. * @memberOf _
  58469. * @category Object
  58470. * @param {Object} object The destination object.
  58471. * @param {...Object} [sources] The source objects.
  58472. * @returns {Object} Returns `object`.
  58473. * @see _.defaultsDeep
  58474. * @example
  58475. *
  58476. * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
  58477. * // => { 'a': 1, 'b': 2 }
  58478. */
  58479. var defaults = baseRest(function(object, sources) {
  58480. object = Object(object);
  58481. var index = -1;
  58482. var length = sources.length;
  58483. var guard = length > 2 ? sources[2] : undefined;
  58484. if (guard && isIterateeCall(sources[0], sources[1], guard)) {
  58485. length = 1;
  58486. }
  58487. while (++index < length) {
  58488. var source = sources[index];
  58489. var props = keysIn(source);
  58490. var propsIndex = -1;
  58491. var propsLength = props.length;
  58492. while (++propsIndex < propsLength) {
  58493. var key = props[propsIndex];
  58494. var value = object[key];
  58495. if (value === undefined ||
  58496. (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
  58497. object[key] = source[key];
  58498. }
  58499. }
  58500. }
  58501. return object;
  58502. });
  58503. /**
  58504. * This method is like `_.defaults` except that it recursively assigns
  58505. * default properties.
  58506. *
  58507. * **Note:** This method mutates `object`.
  58508. *
  58509. * @static
  58510. * @memberOf _
  58511. * @since 3.10.0
  58512. * @category Object
  58513. * @param {Object} object The destination object.
  58514. * @param {...Object} [sources] The source objects.
  58515. * @returns {Object} Returns `object`.
  58516. * @see _.defaults
  58517. * @example
  58518. *
  58519. * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
  58520. * // => { 'a': { 'b': 2, 'c': 3 } }
  58521. */
  58522. var defaultsDeep = baseRest(function(args) {
  58523. args.push(undefined, customDefaultsMerge);
  58524. return apply(mergeWith, undefined, args);
  58525. });
  58526. /**
  58527. * This method is like `_.find` except that it returns the key of the first
  58528. * element `predicate` returns truthy for instead of the element itself.
  58529. *
  58530. * @static
  58531. * @memberOf _
  58532. * @since 1.1.0
  58533. * @category Object
  58534. * @param {Object} object The object to inspect.
  58535. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  58536. * @returns {string|undefined} Returns the key of the matched element,
  58537. * else `undefined`.
  58538. * @example
  58539. *
  58540. * var users = {
  58541. * 'barney': { 'age': 36, 'active': true },
  58542. * 'fred': { 'age': 40, 'active': false },
  58543. * 'pebbles': { 'age': 1, 'active': true }
  58544. * };
  58545. *
  58546. * _.findKey(users, function(o) { return o.age < 40; });
  58547. * // => 'barney' (iteration order is not guaranteed)
  58548. *
  58549. * // The `_.matches` iteratee shorthand.
  58550. * _.findKey(users, { 'age': 1, 'active': true });
  58551. * // => 'pebbles'
  58552. *
  58553. * // The `_.matchesProperty` iteratee shorthand.
  58554. * _.findKey(users, ['active', false]);
  58555. * // => 'fred'
  58556. *
  58557. * // The `_.property` iteratee shorthand.
  58558. * _.findKey(users, 'active');
  58559. * // => 'barney'
  58560. */
  58561. function findKey(object, predicate) {
  58562. return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
  58563. }
  58564. /**
  58565. * This method is like `_.findKey` except that it iterates over elements of
  58566. * a collection in the opposite order.
  58567. *
  58568. * @static
  58569. * @memberOf _
  58570. * @since 2.0.0
  58571. * @category Object
  58572. * @param {Object} object The object to inspect.
  58573. * @param {Function} [predicate=_.identity] The function invoked per iteration.
  58574. * @returns {string|undefined} Returns the key of the matched element,
  58575. * else `undefined`.
  58576. * @example
  58577. *
  58578. * var users = {
  58579. * 'barney': { 'age': 36, 'active': true },
  58580. * 'fred': { 'age': 40, 'active': false },
  58581. * 'pebbles': { 'age': 1, 'active': true }
  58582. * };
  58583. *
  58584. * _.findLastKey(users, function(o) { return o.age < 40; });
  58585. * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
  58586. *
  58587. * // The `_.matches` iteratee shorthand.
  58588. * _.findLastKey(users, { 'age': 36, 'active': true });
  58589. * // => 'barney'
  58590. *
  58591. * // The `_.matchesProperty` iteratee shorthand.
  58592. * _.findLastKey(users, ['active', false]);
  58593. * // => 'fred'
  58594. *
  58595. * // The `_.property` iteratee shorthand.
  58596. * _.findLastKey(users, 'active');
  58597. * // => 'pebbles'
  58598. */
  58599. function findLastKey(object, predicate) {
  58600. return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
  58601. }
  58602. /**
  58603. * Iterates over own and inherited enumerable string keyed properties of an
  58604. * object and invokes `iteratee` for each property. The iteratee is invoked
  58605. * with three arguments: (value, key, object). Iteratee functions may exit
  58606. * iteration early by explicitly returning `false`.
  58607. *
  58608. * @static
  58609. * @memberOf _
  58610. * @since 0.3.0
  58611. * @category Object
  58612. * @param {Object} object The object to iterate over.
  58613. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  58614. * @returns {Object} Returns `object`.
  58615. * @see _.forInRight
  58616. * @example
  58617. *
  58618. * function Foo() {
  58619. * this.a = 1;
  58620. * this.b = 2;
  58621. * }
  58622. *
  58623. * Foo.prototype.c = 3;
  58624. *
  58625. * _.forIn(new Foo, function(value, key) {
  58626. * console.log(key);
  58627. * });
  58628. * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
  58629. */
  58630. function forIn(object, iteratee) {
  58631. return object == null
  58632. ? object
  58633. : baseFor(object, getIteratee(iteratee, 3), keysIn);
  58634. }
  58635. /**
  58636. * This method is like `_.forIn` except that it iterates over properties of
  58637. * `object` in the opposite order.
  58638. *
  58639. * @static
  58640. * @memberOf _
  58641. * @since 2.0.0
  58642. * @category Object
  58643. * @param {Object} object The object to iterate over.
  58644. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  58645. * @returns {Object} Returns `object`.
  58646. * @see _.forIn
  58647. * @example
  58648. *
  58649. * function Foo() {
  58650. * this.a = 1;
  58651. * this.b = 2;
  58652. * }
  58653. *
  58654. * Foo.prototype.c = 3;
  58655. *
  58656. * _.forInRight(new Foo, function(value, key) {
  58657. * console.log(key);
  58658. * });
  58659. * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
  58660. */
  58661. function forInRight(object, iteratee) {
  58662. return object == null
  58663. ? object
  58664. : baseForRight(object, getIteratee(iteratee, 3), keysIn);
  58665. }
  58666. /**
  58667. * Iterates over own enumerable string keyed properties of an object and
  58668. * invokes `iteratee` for each property. The iteratee is invoked with three
  58669. * arguments: (value, key, object). Iteratee functions may exit iteration
  58670. * early by explicitly returning `false`.
  58671. *
  58672. * @static
  58673. * @memberOf _
  58674. * @since 0.3.0
  58675. * @category Object
  58676. * @param {Object} object The object to iterate over.
  58677. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  58678. * @returns {Object} Returns `object`.
  58679. * @see _.forOwnRight
  58680. * @example
  58681. *
  58682. * function Foo() {
  58683. * this.a = 1;
  58684. * this.b = 2;
  58685. * }
  58686. *
  58687. * Foo.prototype.c = 3;
  58688. *
  58689. * _.forOwn(new Foo, function(value, key) {
  58690. * console.log(key);
  58691. * });
  58692. * // => Logs 'a' then 'b' (iteration order is not guaranteed).
  58693. */
  58694. function forOwn(object, iteratee) {
  58695. return object && baseForOwn(object, getIteratee(iteratee, 3));
  58696. }
  58697. /**
  58698. * This method is like `_.forOwn` except that it iterates over properties of
  58699. * `object` in the opposite order.
  58700. *
  58701. * @static
  58702. * @memberOf _
  58703. * @since 2.0.0
  58704. * @category Object
  58705. * @param {Object} object The object to iterate over.
  58706. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  58707. * @returns {Object} Returns `object`.
  58708. * @see _.forOwn
  58709. * @example
  58710. *
  58711. * function Foo() {
  58712. * this.a = 1;
  58713. * this.b = 2;
  58714. * }
  58715. *
  58716. * Foo.prototype.c = 3;
  58717. *
  58718. * _.forOwnRight(new Foo, function(value, key) {
  58719. * console.log(key);
  58720. * });
  58721. * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
  58722. */
  58723. function forOwnRight(object, iteratee) {
  58724. return object && baseForOwnRight(object, getIteratee(iteratee, 3));
  58725. }
  58726. /**
  58727. * Creates an array of function property names from own enumerable properties
  58728. * of `object`.
  58729. *
  58730. * @static
  58731. * @since 0.1.0
  58732. * @memberOf _
  58733. * @category Object
  58734. * @param {Object} object The object to inspect.
  58735. * @returns {Array} Returns the function names.
  58736. * @see _.functionsIn
  58737. * @example
  58738. *
  58739. * function Foo() {
  58740. * this.a = _.constant('a');
  58741. * this.b = _.constant('b');
  58742. * }
  58743. *
  58744. * Foo.prototype.c = _.constant('c');
  58745. *
  58746. * _.functions(new Foo);
  58747. * // => ['a', 'b']
  58748. */
  58749. function functions(object) {
  58750. return object == null ? [] : baseFunctions(object, keys(object));
  58751. }
  58752. /**
  58753. * Creates an array of function property names from own and inherited
  58754. * enumerable properties of `object`.
  58755. *
  58756. * @static
  58757. * @memberOf _
  58758. * @since 4.0.0
  58759. * @category Object
  58760. * @param {Object} object The object to inspect.
  58761. * @returns {Array} Returns the function names.
  58762. * @see _.functions
  58763. * @example
  58764. *
  58765. * function Foo() {
  58766. * this.a = _.constant('a');
  58767. * this.b = _.constant('b');
  58768. * }
  58769. *
  58770. * Foo.prototype.c = _.constant('c');
  58771. *
  58772. * _.functionsIn(new Foo);
  58773. * // => ['a', 'b', 'c']
  58774. */
  58775. function functionsIn(object) {
  58776. return object == null ? [] : baseFunctions(object, keysIn(object));
  58777. }
  58778. /**
  58779. * Gets the value at `path` of `object`. If the resolved value is
  58780. * `undefined`, the `defaultValue` is returned in its place.
  58781. *
  58782. * @static
  58783. * @memberOf _
  58784. * @since 3.7.0
  58785. * @category Object
  58786. * @param {Object} object The object to query.
  58787. * @param {Array|string} path The path of the property to get.
  58788. * @param {*} [defaultValue] The value returned for `undefined` resolved values.
  58789. * @returns {*} Returns the resolved value.
  58790. * @example
  58791. *
  58792. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  58793. *
  58794. * _.get(object, 'a[0].b.c');
  58795. * // => 3
  58796. *
  58797. * _.get(object, ['a', '0', 'b', 'c']);
  58798. * // => 3
  58799. *
  58800. * _.get(object, 'a.b.c', 'default');
  58801. * // => 'default'
  58802. */
  58803. function get(object, path, defaultValue) {
  58804. var result = object == null ? undefined : baseGet(object, path);
  58805. return result === undefined ? defaultValue : result;
  58806. }
  58807. /**
  58808. * Checks if `path` is a direct property of `object`.
  58809. *
  58810. * @static
  58811. * @since 0.1.0
  58812. * @memberOf _
  58813. * @category Object
  58814. * @param {Object} object The object to query.
  58815. * @param {Array|string} path The path to check.
  58816. * @returns {boolean} Returns `true` if `path` exists, else `false`.
  58817. * @example
  58818. *
  58819. * var object = { 'a': { 'b': 2 } };
  58820. * var other = _.create({ 'a': _.create({ 'b': 2 }) });
  58821. *
  58822. * _.has(object, 'a');
  58823. * // => true
  58824. *
  58825. * _.has(object, 'a.b');
  58826. * // => true
  58827. *
  58828. * _.has(object, ['a', 'b']);
  58829. * // => true
  58830. *
  58831. * _.has(other, 'a');
  58832. * // => false
  58833. */
  58834. function has(object, path) {
  58835. return object != null && hasPath(object, path, baseHas);
  58836. }
  58837. /**
  58838. * Checks if `path` is a direct or inherited property of `object`.
  58839. *
  58840. * @static
  58841. * @memberOf _
  58842. * @since 4.0.0
  58843. * @category Object
  58844. * @param {Object} object The object to query.
  58845. * @param {Array|string} path The path to check.
  58846. * @returns {boolean} Returns `true` if `path` exists, else `false`.
  58847. * @example
  58848. *
  58849. * var object = _.create({ 'a': _.create({ 'b': 2 }) });
  58850. *
  58851. * _.hasIn(object, 'a');
  58852. * // => true
  58853. *
  58854. * _.hasIn(object, 'a.b');
  58855. * // => true
  58856. *
  58857. * _.hasIn(object, ['a', 'b']);
  58858. * // => true
  58859. *
  58860. * _.hasIn(object, 'b');
  58861. * // => false
  58862. */
  58863. function hasIn(object, path) {
  58864. return object != null && hasPath(object, path, baseHasIn);
  58865. }
  58866. /**
  58867. * Creates an object composed of the inverted keys and values of `object`.
  58868. * If `object` contains duplicate values, subsequent values overwrite
  58869. * property assignments of previous values.
  58870. *
  58871. * @static
  58872. * @memberOf _
  58873. * @since 0.7.0
  58874. * @category Object
  58875. * @param {Object} object The object to invert.
  58876. * @returns {Object} Returns the new inverted object.
  58877. * @example
  58878. *
  58879. * var object = { 'a': 1, 'b': 2, 'c': 1 };
  58880. *
  58881. * _.invert(object);
  58882. * // => { '1': 'c', '2': 'b' }
  58883. */
  58884. var invert = createInverter(function(result, value, key) {
  58885. if (value != null &&
  58886. typeof value.toString != 'function') {
  58887. value = nativeObjectToString.call(value);
  58888. }
  58889. result[value] = key;
  58890. }, constant(identity));
  58891. /**
  58892. * This method is like `_.invert` except that the inverted object is generated
  58893. * from the results of running each element of `object` thru `iteratee`. The
  58894. * corresponding inverted value of each inverted key is an array of keys
  58895. * responsible for generating the inverted value. The iteratee is invoked
  58896. * with one argument: (value).
  58897. *
  58898. * @static
  58899. * @memberOf _
  58900. * @since 4.1.0
  58901. * @category Object
  58902. * @param {Object} object The object to invert.
  58903. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  58904. * @returns {Object} Returns the new inverted object.
  58905. * @example
  58906. *
  58907. * var object = { 'a': 1, 'b': 2, 'c': 1 };
  58908. *
  58909. * _.invertBy(object);
  58910. * // => { '1': ['a', 'c'], '2': ['b'] }
  58911. *
  58912. * _.invertBy(object, function(value) {
  58913. * return 'group' + value;
  58914. * });
  58915. * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
  58916. */
  58917. var invertBy = createInverter(function(result, value, key) {
  58918. if (value != null &&
  58919. typeof value.toString != 'function') {
  58920. value = nativeObjectToString.call(value);
  58921. }
  58922. if (hasOwnProperty.call(result, value)) {
  58923. result[value].push(key);
  58924. } else {
  58925. result[value] = [key];
  58926. }
  58927. }, getIteratee);
  58928. /**
  58929. * Invokes the method at `path` of `object`.
  58930. *
  58931. * @static
  58932. * @memberOf _
  58933. * @since 4.0.0
  58934. * @category Object
  58935. * @param {Object} object The object to query.
  58936. * @param {Array|string} path The path of the method to invoke.
  58937. * @param {...*} [args] The arguments to invoke the method with.
  58938. * @returns {*} Returns the result of the invoked method.
  58939. * @example
  58940. *
  58941. * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
  58942. *
  58943. * _.invoke(object, 'a[0].b.c.slice', 1, 3);
  58944. * // => [2, 3]
  58945. */
  58946. var invoke = baseRest(baseInvoke);
  58947. /**
  58948. * Creates an array of the own enumerable property names of `object`.
  58949. *
  58950. * **Note:** Non-object values are coerced to objects. See the
  58951. * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  58952. * for more details.
  58953. *
  58954. * @static
  58955. * @since 0.1.0
  58956. * @memberOf _
  58957. * @category Object
  58958. * @param {Object} object The object to query.
  58959. * @returns {Array} Returns the array of property names.
  58960. * @example
  58961. *
  58962. * function Foo() {
  58963. * this.a = 1;
  58964. * this.b = 2;
  58965. * }
  58966. *
  58967. * Foo.prototype.c = 3;
  58968. *
  58969. * _.keys(new Foo);
  58970. * // => ['a', 'b'] (iteration order is not guaranteed)
  58971. *
  58972. * _.keys('hi');
  58973. * // => ['0', '1']
  58974. */
  58975. function keys(object) {
  58976. return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
  58977. }
  58978. /**
  58979. * Creates an array of the own and inherited enumerable property names of `object`.
  58980. *
  58981. * **Note:** Non-object values are coerced to objects.
  58982. *
  58983. * @static
  58984. * @memberOf _
  58985. * @since 3.0.0
  58986. * @category Object
  58987. * @param {Object} object The object to query.
  58988. * @returns {Array} Returns the array of property names.
  58989. * @example
  58990. *
  58991. * function Foo() {
  58992. * this.a = 1;
  58993. * this.b = 2;
  58994. * }
  58995. *
  58996. * Foo.prototype.c = 3;
  58997. *
  58998. * _.keysIn(new Foo);
  58999. * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
  59000. */
  59001. function keysIn(object) {
  59002. return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
  59003. }
  59004. /**
  59005. * The opposite of `_.mapValues`; this method creates an object with the
  59006. * same values as `object` and keys generated by running each own enumerable
  59007. * string keyed property of `object` thru `iteratee`. The iteratee is invoked
  59008. * with three arguments: (value, key, object).
  59009. *
  59010. * @static
  59011. * @memberOf _
  59012. * @since 3.8.0
  59013. * @category Object
  59014. * @param {Object} object The object to iterate over.
  59015. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  59016. * @returns {Object} Returns the new mapped object.
  59017. * @see _.mapValues
  59018. * @example
  59019. *
  59020. * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
  59021. * return key + value;
  59022. * });
  59023. * // => { 'a1': 1, 'b2': 2 }
  59024. */
  59025. function mapKeys(object, iteratee) {
  59026. var result = {};
  59027. iteratee = getIteratee(iteratee, 3);
  59028. baseForOwn(object, function(value, key, object) {
  59029. baseAssignValue(result, iteratee(value, key, object), value);
  59030. });
  59031. return result;
  59032. }
  59033. /**
  59034. * Creates an object with the same keys as `object` and values generated
  59035. * by running each own enumerable string keyed property of `object` thru
  59036. * `iteratee`. The iteratee is invoked with three arguments:
  59037. * (value, key, object).
  59038. *
  59039. * @static
  59040. * @memberOf _
  59041. * @since 2.4.0
  59042. * @category Object
  59043. * @param {Object} object The object to iterate over.
  59044. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  59045. * @returns {Object} Returns the new mapped object.
  59046. * @see _.mapKeys
  59047. * @example
  59048. *
  59049. * var users = {
  59050. * 'fred': { 'user': 'fred', 'age': 40 },
  59051. * 'pebbles': { 'user': 'pebbles', 'age': 1 }
  59052. * };
  59053. *
  59054. * _.mapValues(users, function(o) { return o.age; });
  59055. * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
  59056. *
  59057. * // The `_.property` iteratee shorthand.
  59058. * _.mapValues(users, 'age');
  59059. * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
  59060. */
  59061. function mapValues(object, iteratee) {
  59062. var result = {};
  59063. iteratee = getIteratee(iteratee, 3);
  59064. baseForOwn(object, function(value, key, object) {
  59065. baseAssignValue(result, key, iteratee(value, key, object));
  59066. });
  59067. return result;
  59068. }
  59069. /**
  59070. * This method is like `_.assign` except that it recursively merges own and
  59071. * inherited enumerable string keyed properties of source objects into the
  59072. * destination object. Source properties that resolve to `undefined` are
  59073. * skipped if a destination value exists. Array and plain object properties
  59074. * are merged recursively. Other objects and value types are overridden by
  59075. * assignment. Source objects are applied from left to right. Subsequent
  59076. * sources overwrite property assignments of previous sources.
  59077. *
  59078. * **Note:** This method mutates `object`.
  59079. *
  59080. * @static
  59081. * @memberOf _
  59082. * @since 0.5.0
  59083. * @category Object
  59084. * @param {Object} object The destination object.
  59085. * @param {...Object} [sources] The source objects.
  59086. * @returns {Object} Returns `object`.
  59087. * @example
  59088. *
  59089. * var object = {
  59090. * 'a': [{ 'b': 2 }, { 'd': 4 }]
  59091. * };
  59092. *
  59093. * var other = {
  59094. * 'a': [{ 'c': 3 }, { 'e': 5 }]
  59095. * };
  59096. *
  59097. * _.merge(object, other);
  59098. * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
  59099. */
  59100. var merge = createAssigner(function(object, source, srcIndex) {
  59101. baseMerge(object, source, srcIndex);
  59102. });
  59103. /**
  59104. * This method is like `_.merge` except that it accepts `customizer` which
  59105. * is invoked to produce the merged values of the destination and source
  59106. * properties. If `customizer` returns `undefined`, merging is handled by the
  59107. * method instead. The `customizer` is invoked with six arguments:
  59108. * (objValue, srcValue, key, object, source, stack).
  59109. *
  59110. * **Note:** This method mutates `object`.
  59111. *
  59112. * @static
  59113. * @memberOf _
  59114. * @since 4.0.0
  59115. * @category Object
  59116. * @param {Object} object The destination object.
  59117. * @param {...Object} sources The source objects.
  59118. * @param {Function} customizer The function to customize assigned values.
  59119. * @returns {Object} Returns `object`.
  59120. * @example
  59121. *
  59122. * function customizer(objValue, srcValue) {
  59123. * if (_.isArray(objValue)) {
  59124. * return objValue.concat(srcValue);
  59125. * }
  59126. * }
  59127. *
  59128. * var object = { 'a': [1], 'b': [2] };
  59129. * var other = { 'a': [3], 'b': [4] };
  59130. *
  59131. * _.mergeWith(object, other, customizer);
  59132. * // => { 'a': [1, 3], 'b': [2, 4] }
  59133. */
  59134. var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
  59135. baseMerge(object, source, srcIndex, customizer);
  59136. });
  59137. /**
  59138. * The opposite of `_.pick`; this method creates an object composed of the
  59139. * own and inherited enumerable property paths of `object` that are not omitted.
  59140. *
  59141. * **Note:** This method is considerably slower than `_.pick`.
  59142. *
  59143. * @static
  59144. * @since 0.1.0
  59145. * @memberOf _
  59146. * @category Object
  59147. * @param {Object} object The source object.
  59148. * @param {...(string|string[])} [paths] The property paths to omit.
  59149. * @returns {Object} Returns the new object.
  59150. * @example
  59151. *
  59152. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  59153. *
  59154. * _.omit(object, ['a', 'c']);
  59155. * // => { 'b': '2' }
  59156. */
  59157. var omit = flatRest(function(object, paths) {
  59158. var result = {};
  59159. if (object == null) {
  59160. return result;
  59161. }
  59162. var isDeep = false;
  59163. paths = arrayMap(paths, function(path) {
  59164. path = castPath(path, object);
  59165. isDeep || (isDeep = path.length > 1);
  59166. return path;
  59167. });
  59168. copyObject(object, getAllKeysIn(object), result);
  59169. if (isDeep) {
  59170. result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
  59171. }
  59172. var length = paths.length;
  59173. while (length--) {
  59174. baseUnset(result, paths[length]);
  59175. }
  59176. return result;
  59177. });
  59178. /**
  59179. * The opposite of `_.pickBy`; this method creates an object composed of
  59180. * the own and inherited enumerable string keyed properties of `object` that
  59181. * `predicate` doesn't return truthy for. The predicate is invoked with two
  59182. * arguments: (value, key).
  59183. *
  59184. * @static
  59185. * @memberOf _
  59186. * @since 4.0.0
  59187. * @category Object
  59188. * @param {Object} object The source object.
  59189. * @param {Function} [predicate=_.identity] The function invoked per property.
  59190. * @returns {Object} Returns the new object.
  59191. * @example
  59192. *
  59193. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  59194. *
  59195. * _.omitBy(object, _.isNumber);
  59196. * // => { 'b': '2' }
  59197. */
  59198. function omitBy(object, predicate) {
  59199. return pickBy(object, negate(getIteratee(predicate)));
  59200. }
  59201. /**
  59202. * Creates an object composed of the picked `object` properties.
  59203. *
  59204. * @static
  59205. * @since 0.1.0
  59206. * @memberOf _
  59207. * @category Object
  59208. * @param {Object} object The source object.
  59209. * @param {...(string|string[])} [paths] The property paths to pick.
  59210. * @returns {Object} Returns the new object.
  59211. * @example
  59212. *
  59213. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  59214. *
  59215. * _.pick(object, ['a', 'c']);
  59216. * // => { 'a': 1, 'c': 3 }
  59217. */
  59218. var pick = flatRest(function(object, paths) {
  59219. return object == null ? {} : basePick(object, paths);
  59220. });
  59221. /**
  59222. * Creates an object composed of the `object` properties `predicate` returns
  59223. * truthy for. The predicate is invoked with two arguments: (value, key).
  59224. *
  59225. * @static
  59226. * @memberOf _
  59227. * @since 4.0.0
  59228. * @category Object
  59229. * @param {Object} object The source object.
  59230. * @param {Function} [predicate=_.identity] The function invoked per property.
  59231. * @returns {Object} Returns the new object.
  59232. * @example
  59233. *
  59234. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  59235. *
  59236. * _.pickBy(object, _.isNumber);
  59237. * // => { 'a': 1, 'c': 3 }
  59238. */
  59239. function pickBy(object, predicate) {
  59240. if (object == null) {
  59241. return {};
  59242. }
  59243. var props = arrayMap(getAllKeysIn(object), function(prop) {
  59244. return [prop];
  59245. });
  59246. predicate = getIteratee(predicate);
  59247. return basePickBy(object, props, function(value, path) {
  59248. return predicate(value, path[0]);
  59249. });
  59250. }
  59251. /**
  59252. * This method is like `_.get` except that if the resolved value is a
  59253. * function it's invoked with the `this` binding of its parent object and
  59254. * its result is returned.
  59255. *
  59256. * @static
  59257. * @since 0.1.0
  59258. * @memberOf _
  59259. * @category Object
  59260. * @param {Object} object The object to query.
  59261. * @param {Array|string} path The path of the property to resolve.
  59262. * @param {*} [defaultValue] The value returned for `undefined` resolved values.
  59263. * @returns {*} Returns the resolved value.
  59264. * @example
  59265. *
  59266. * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
  59267. *
  59268. * _.result(object, 'a[0].b.c1');
  59269. * // => 3
  59270. *
  59271. * _.result(object, 'a[0].b.c2');
  59272. * // => 4
  59273. *
  59274. * _.result(object, 'a[0].b.c3', 'default');
  59275. * // => 'default'
  59276. *
  59277. * _.result(object, 'a[0].b.c3', _.constant('default'));
  59278. * // => 'default'
  59279. */
  59280. function result(object, path, defaultValue) {
  59281. path = castPath(path, object);
  59282. var index = -1,
  59283. length = path.length;
  59284. // Ensure the loop is entered when path is empty.
  59285. if (!length) {
  59286. length = 1;
  59287. object = undefined;
  59288. }
  59289. while (++index < length) {
  59290. var value = object == null ? undefined : object[toKey(path[index])];
  59291. if (value === undefined) {
  59292. index = length;
  59293. value = defaultValue;
  59294. }
  59295. object = isFunction(value) ? value.call(object) : value;
  59296. }
  59297. return object;
  59298. }
  59299. /**
  59300. * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
  59301. * it's created. Arrays are created for missing index properties while objects
  59302. * are created for all other missing properties. Use `_.setWith` to customize
  59303. * `path` creation.
  59304. *
  59305. * **Note:** This method mutates `object`.
  59306. *
  59307. * @static
  59308. * @memberOf _
  59309. * @since 3.7.0
  59310. * @category Object
  59311. * @param {Object} object The object to modify.
  59312. * @param {Array|string} path The path of the property to set.
  59313. * @param {*} value The value to set.
  59314. * @returns {Object} Returns `object`.
  59315. * @example
  59316. *
  59317. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  59318. *
  59319. * _.set(object, 'a[0].b.c', 4);
  59320. * console.log(object.a[0].b.c);
  59321. * // => 4
  59322. *
  59323. * _.set(object, ['x', '0', 'y', 'z'], 5);
  59324. * console.log(object.x[0].y.z);
  59325. * // => 5
  59326. */
  59327. function set(object, path, value) {
  59328. return object == null ? object : baseSet(object, path, value);
  59329. }
  59330. /**
  59331. * This method is like `_.set` except that it accepts `customizer` which is
  59332. * invoked to produce the objects of `path`. If `customizer` returns `undefined`
  59333. * path creation is handled by the method instead. The `customizer` is invoked
  59334. * with three arguments: (nsValue, key, nsObject).
  59335. *
  59336. * **Note:** This method mutates `object`.
  59337. *
  59338. * @static
  59339. * @memberOf _
  59340. * @since 4.0.0
  59341. * @category Object
  59342. * @param {Object} object The object to modify.
  59343. * @param {Array|string} path The path of the property to set.
  59344. * @param {*} value The value to set.
  59345. * @param {Function} [customizer] The function to customize assigned values.
  59346. * @returns {Object} Returns `object`.
  59347. * @example
  59348. *
  59349. * var object = {};
  59350. *
  59351. * _.setWith(object, '[0][1]', 'a', Object);
  59352. * // => { '0': { '1': 'a' } }
  59353. */
  59354. function setWith(object, path, value, customizer) {
  59355. customizer = typeof customizer == 'function' ? customizer : undefined;
  59356. return object == null ? object : baseSet(object, path, value, customizer);
  59357. }
  59358. /**
  59359. * Creates an array of own enumerable string keyed-value pairs for `object`
  59360. * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
  59361. * entries are returned.
  59362. *
  59363. * @static
  59364. * @memberOf _
  59365. * @since 4.0.0
  59366. * @alias entries
  59367. * @category Object
  59368. * @param {Object} object The object to query.
  59369. * @returns {Array} Returns the key-value pairs.
  59370. * @example
  59371. *
  59372. * function Foo() {
  59373. * this.a = 1;
  59374. * this.b = 2;
  59375. * }
  59376. *
  59377. * Foo.prototype.c = 3;
  59378. *
  59379. * _.toPairs(new Foo);
  59380. * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
  59381. */
  59382. var toPairs = createToPairs(keys);
  59383. /**
  59384. * Creates an array of own and inherited enumerable string keyed-value pairs
  59385. * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
  59386. * or set, its entries are returned.
  59387. *
  59388. * @static
  59389. * @memberOf _
  59390. * @since 4.0.0
  59391. * @alias entriesIn
  59392. * @category Object
  59393. * @param {Object} object The object to query.
  59394. * @returns {Array} Returns the key-value pairs.
  59395. * @example
  59396. *
  59397. * function Foo() {
  59398. * this.a = 1;
  59399. * this.b = 2;
  59400. * }
  59401. *
  59402. * Foo.prototype.c = 3;
  59403. *
  59404. * _.toPairsIn(new Foo);
  59405. * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
  59406. */
  59407. var toPairsIn = createToPairs(keysIn);
  59408. /**
  59409. * An alternative to `_.reduce`; this method transforms `object` to a new
  59410. * `accumulator` object which is the result of running each of its own
  59411. * enumerable string keyed properties thru `iteratee`, with each invocation
  59412. * potentially mutating the `accumulator` object. If `accumulator` is not
  59413. * provided, a new object with the same `[[Prototype]]` will be used. The
  59414. * iteratee is invoked with four arguments: (accumulator, value, key, object).
  59415. * Iteratee functions may exit iteration early by explicitly returning `false`.
  59416. *
  59417. * @static
  59418. * @memberOf _
  59419. * @since 1.3.0
  59420. * @category Object
  59421. * @param {Object} object The object to iterate over.
  59422. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  59423. * @param {*} [accumulator] The custom accumulator value.
  59424. * @returns {*} Returns the accumulated value.
  59425. * @example
  59426. *
  59427. * _.transform([2, 3, 4], function(result, n) {
  59428. * result.push(n *= n);
  59429. * return n % 2 == 0;
  59430. * }, []);
  59431. * // => [4, 9]
  59432. *
  59433. * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
  59434. * (result[value] || (result[value] = [])).push(key);
  59435. * }, {});
  59436. * // => { '1': ['a', 'c'], '2': ['b'] }
  59437. */
  59438. function transform(object, iteratee, accumulator) {
  59439. var isArr = isArray(object),
  59440. isArrLike = isArr || isBuffer(object) || isTypedArray(object);
  59441. iteratee = getIteratee(iteratee, 4);
  59442. if (accumulator == null) {
  59443. var Ctor = object && object.constructor;
  59444. if (isArrLike) {
  59445. accumulator = isArr ? new Ctor : [];
  59446. }
  59447. else if (isObject(object)) {
  59448. accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
  59449. }
  59450. else {
  59451. accumulator = {};
  59452. }
  59453. }
  59454. (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
  59455. return iteratee(accumulator, value, index, object);
  59456. });
  59457. return accumulator;
  59458. }
  59459. /**
  59460. * Removes the property at `path` of `object`.
  59461. *
  59462. * **Note:** This method mutates `object`.
  59463. *
  59464. * @static
  59465. * @memberOf _
  59466. * @since 4.0.0
  59467. * @category Object
  59468. * @param {Object} object The object to modify.
  59469. * @param {Array|string} path The path of the property to unset.
  59470. * @returns {boolean} Returns `true` if the property is deleted, else `false`.
  59471. * @example
  59472. *
  59473. * var object = { 'a': [{ 'b': { 'c': 7 } }] };
  59474. * _.unset(object, 'a[0].b.c');
  59475. * // => true
  59476. *
  59477. * console.log(object);
  59478. * // => { 'a': [{ 'b': {} }] };
  59479. *
  59480. * _.unset(object, ['a', '0', 'b', 'c']);
  59481. * // => true
  59482. *
  59483. * console.log(object);
  59484. * // => { 'a': [{ 'b': {} }] };
  59485. */
  59486. function unset(object, path) {
  59487. return object == null ? true : baseUnset(object, path);
  59488. }
  59489. /**
  59490. * This method is like `_.set` except that accepts `updater` to produce the
  59491. * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
  59492. * is invoked with one argument: (value).
  59493. *
  59494. * **Note:** This method mutates `object`.
  59495. *
  59496. * @static
  59497. * @memberOf _
  59498. * @since 4.6.0
  59499. * @category Object
  59500. * @param {Object} object The object to modify.
  59501. * @param {Array|string} path The path of the property to set.
  59502. * @param {Function} updater The function to produce the updated value.
  59503. * @returns {Object} Returns `object`.
  59504. * @example
  59505. *
  59506. * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  59507. *
  59508. * _.update(object, 'a[0].b.c', function(n) { return n * n; });
  59509. * console.log(object.a[0].b.c);
  59510. * // => 9
  59511. *
  59512. * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
  59513. * console.log(object.x[0].y.z);
  59514. * // => 0
  59515. */
  59516. function update(object, path, updater) {
  59517. return object == null ? object : baseUpdate(object, path, castFunction(updater));
  59518. }
  59519. /**
  59520. * This method is like `_.update` except that it accepts `customizer` which is
  59521. * invoked to produce the objects of `path`. If `customizer` returns `undefined`
  59522. * path creation is handled by the method instead. The `customizer` is invoked
  59523. * with three arguments: (nsValue, key, nsObject).
  59524. *
  59525. * **Note:** This method mutates `object`.
  59526. *
  59527. * @static
  59528. * @memberOf _
  59529. * @since 4.6.0
  59530. * @category Object
  59531. * @param {Object} object The object to modify.
  59532. * @param {Array|string} path The path of the property to set.
  59533. * @param {Function} updater The function to produce the updated value.
  59534. * @param {Function} [customizer] The function to customize assigned values.
  59535. * @returns {Object} Returns `object`.
  59536. * @example
  59537. *
  59538. * var object = {};
  59539. *
  59540. * _.updateWith(object, '[0][1]', _.constant('a'), Object);
  59541. * // => { '0': { '1': 'a' } }
  59542. */
  59543. function updateWith(object, path, updater, customizer) {
  59544. customizer = typeof customizer == 'function' ? customizer : undefined;
  59545. return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
  59546. }
  59547. /**
  59548. * Creates an array of the own enumerable string keyed property values of `object`.
  59549. *
  59550. * **Note:** Non-object values are coerced to objects.
  59551. *
  59552. * @static
  59553. * @since 0.1.0
  59554. * @memberOf _
  59555. * @category Object
  59556. * @param {Object} object The object to query.
  59557. * @returns {Array} Returns the array of property values.
  59558. * @example
  59559. *
  59560. * function Foo() {
  59561. * this.a = 1;
  59562. * this.b = 2;
  59563. * }
  59564. *
  59565. * Foo.prototype.c = 3;
  59566. *
  59567. * _.values(new Foo);
  59568. * // => [1, 2] (iteration order is not guaranteed)
  59569. *
  59570. * _.values('hi');
  59571. * // => ['h', 'i']
  59572. */
  59573. function values(object) {
  59574. return object == null ? [] : baseValues(object, keys(object));
  59575. }
  59576. /**
  59577. * Creates an array of the own and inherited enumerable string keyed property
  59578. * values of `object`.
  59579. *
  59580. * **Note:** Non-object values are coerced to objects.
  59581. *
  59582. * @static
  59583. * @memberOf _
  59584. * @since 3.0.0
  59585. * @category Object
  59586. * @param {Object} object The object to query.
  59587. * @returns {Array} Returns the array of property values.
  59588. * @example
  59589. *
  59590. * function Foo() {
  59591. * this.a = 1;
  59592. * this.b = 2;
  59593. * }
  59594. *
  59595. * Foo.prototype.c = 3;
  59596. *
  59597. * _.valuesIn(new Foo);
  59598. * // => [1, 2, 3] (iteration order is not guaranteed)
  59599. */
  59600. function valuesIn(object) {
  59601. return object == null ? [] : baseValues(object, keysIn(object));
  59602. }
  59603. /*------------------------------------------------------------------------*/
  59604. /**
  59605. * Clamps `number` within the inclusive `lower` and `upper` bounds.
  59606. *
  59607. * @static
  59608. * @memberOf _
  59609. * @since 4.0.0
  59610. * @category Number
  59611. * @param {number} number The number to clamp.
  59612. * @param {number} [lower] The lower bound.
  59613. * @param {number} upper The upper bound.
  59614. * @returns {number} Returns the clamped number.
  59615. * @example
  59616. *
  59617. * _.clamp(-10, -5, 5);
  59618. * // => -5
  59619. *
  59620. * _.clamp(10, -5, 5);
  59621. * // => 5
  59622. */
  59623. function clamp(number, lower, upper) {
  59624. if (upper === undefined) {
  59625. upper = lower;
  59626. lower = undefined;
  59627. }
  59628. if (upper !== undefined) {
  59629. upper = toNumber(upper);
  59630. upper = upper === upper ? upper : 0;
  59631. }
  59632. if (lower !== undefined) {
  59633. lower = toNumber(lower);
  59634. lower = lower === lower ? lower : 0;
  59635. }
  59636. return baseClamp(toNumber(number), lower, upper);
  59637. }
  59638. /**
  59639. * Checks if `n` is between `start` and up to, but not including, `end`. If
  59640. * `end` is not specified, it's set to `start` with `start` then set to `0`.
  59641. * If `start` is greater than `end` the params are swapped to support
  59642. * negative ranges.
  59643. *
  59644. * @static
  59645. * @memberOf _
  59646. * @since 3.3.0
  59647. * @category Number
  59648. * @param {number} number The number to check.
  59649. * @param {number} [start=0] The start of the range.
  59650. * @param {number} end The end of the range.
  59651. * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
  59652. * @see _.range, _.rangeRight
  59653. * @example
  59654. *
  59655. * _.inRange(3, 2, 4);
  59656. * // => true
  59657. *
  59658. * _.inRange(4, 8);
  59659. * // => true
  59660. *
  59661. * _.inRange(4, 2);
  59662. * // => false
  59663. *
  59664. * _.inRange(2, 2);
  59665. * // => false
  59666. *
  59667. * _.inRange(1.2, 2);
  59668. * // => true
  59669. *
  59670. * _.inRange(5.2, 4);
  59671. * // => false
  59672. *
  59673. * _.inRange(-3, -2, -6);
  59674. * // => true
  59675. */
  59676. function inRange(number, start, end) {
  59677. start = toFinite(start);
  59678. if (end === undefined) {
  59679. end = start;
  59680. start = 0;
  59681. } else {
  59682. end = toFinite(end);
  59683. }
  59684. number = toNumber(number);
  59685. return baseInRange(number, start, end);
  59686. }
  59687. /**
  59688. * Produces a random number between the inclusive `lower` and `upper` bounds.
  59689. * If only one argument is provided a number between `0` and the given number
  59690. * is returned. If `floating` is `true`, or either `lower` or `upper` are
  59691. * floats, a floating-point number is returned instead of an integer.
  59692. *
  59693. * **Note:** JavaScript follows the IEEE-754 standard for resolving
  59694. * floating-point values which can produce unexpected results.
  59695. *
  59696. * @static
  59697. * @memberOf _
  59698. * @since 0.7.0
  59699. * @category Number
  59700. * @param {number} [lower=0] The lower bound.
  59701. * @param {number} [upper=1] The upper bound.
  59702. * @param {boolean} [floating] Specify returning a floating-point number.
  59703. * @returns {number} Returns the random number.
  59704. * @example
  59705. *
  59706. * _.random(0, 5);
  59707. * // => an integer between 0 and 5
  59708. *
  59709. * _.random(5);
  59710. * // => also an integer between 0 and 5
  59711. *
  59712. * _.random(5, true);
  59713. * // => a floating-point number between 0 and 5
  59714. *
  59715. * _.random(1.2, 5.2);
  59716. * // => a floating-point number between 1.2 and 5.2
  59717. */
  59718. function random(lower, upper, floating) {
  59719. if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
  59720. upper = floating = undefined;
  59721. }
  59722. if (floating === undefined) {
  59723. if (typeof upper == 'boolean') {
  59724. floating = upper;
  59725. upper = undefined;
  59726. }
  59727. else if (typeof lower == 'boolean') {
  59728. floating = lower;
  59729. lower = undefined;
  59730. }
  59731. }
  59732. if (lower === undefined && upper === undefined) {
  59733. lower = 0;
  59734. upper = 1;
  59735. }
  59736. else {
  59737. lower = toFinite(lower);
  59738. if (upper === undefined) {
  59739. upper = lower;
  59740. lower = 0;
  59741. } else {
  59742. upper = toFinite(upper);
  59743. }
  59744. }
  59745. if (lower > upper) {
  59746. var temp = lower;
  59747. lower = upper;
  59748. upper = temp;
  59749. }
  59750. if (floating || lower % 1 || upper % 1) {
  59751. var rand = nativeRandom();
  59752. return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
  59753. }
  59754. return baseRandom(lower, upper);
  59755. }
  59756. /*------------------------------------------------------------------------*/
  59757. /**
  59758. * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
  59759. *
  59760. * @static
  59761. * @memberOf _
  59762. * @since 3.0.0
  59763. * @category String
  59764. * @param {string} [string=''] The string to convert.
  59765. * @returns {string} Returns the camel cased string.
  59766. * @example
  59767. *
  59768. * _.camelCase('Foo Bar');
  59769. * // => 'fooBar'
  59770. *
  59771. * _.camelCase('--foo-bar--');
  59772. * // => 'fooBar'
  59773. *
  59774. * _.camelCase('__FOO_BAR__');
  59775. * // => 'fooBar'
  59776. */
  59777. var camelCase = createCompounder(function(result, word, index) {
  59778. word = word.toLowerCase();
  59779. return result + (index ? capitalize(word) : word);
  59780. });
  59781. /**
  59782. * Converts the first character of `string` to upper case and the remaining
  59783. * to lower case.
  59784. *
  59785. * @static
  59786. * @memberOf _
  59787. * @since 3.0.0
  59788. * @category String
  59789. * @param {string} [string=''] The string to capitalize.
  59790. * @returns {string} Returns the capitalized string.
  59791. * @example
  59792. *
  59793. * _.capitalize('FRED');
  59794. * // => 'Fred'
  59795. */
  59796. function capitalize(string) {
  59797. return upperFirst(toString(string).toLowerCase());
  59798. }
  59799. /**
  59800. * Deburrs `string` by converting
  59801. * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
  59802. * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
  59803. * letters to basic Latin letters and removing
  59804. * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
  59805. *
  59806. * @static
  59807. * @memberOf _
  59808. * @since 3.0.0
  59809. * @category String
  59810. * @param {string} [string=''] The string to deburr.
  59811. * @returns {string} Returns the deburred string.
  59812. * @example
  59813. *
  59814. * _.deburr('déjà vu');
  59815. * // => 'deja vu'
  59816. */
  59817. function deburr(string) {
  59818. string = toString(string);
  59819. return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
  59820. }
  59821. /**
  59822. * Checks if `string` ends with the given target string.
  59823. *
  59824. * @static
  59825. * @memberOf _
  59826. * @since 3.0.0
  59827. * @category String
  59828. * @param {string} [string=''] The string to inspect.
  59829. * @param {string} [target] The string to search for.
  59830. * @param {number} [position=string.length] The position to search up to.
  59831. * @returns {boolean} Returns `true` if `string` ends with `target`,
  59832. * else `false`.
  59833. * @example
  59834. *
  59835. * _.endsWith('abc', 'c');
  59836. * // => true
  59837. *
  59838. * _.endsWith('abc', 'b');
  59839. * // => false
  59840. *
  59841. * _.endsWith('abc', 'b', 2);
  59842. * // => true
  59843. */
  59844. function endsWith(string, target, position) {
  59845. string = toString(string);
  59846. target = baseToString(target);
  59847. var length = string.length;
  59848. position = position === undefined
  59849. ? length
  59850. : baseClamp(toInteger(position), 0, length);
  59851. var end = position;
  59852. position -= target.length;
  59853. return position >= 0 && string.slice(position, end) == target;
  59854. }
  59855. /**
  59856. * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
  59857. * corresponding HTML entities.
  59858. *
  59859. * **Note:** No other characters are escaped. To escape additional
  59860. * characters use a third-party library like [_he_](https://mths.be/he).
  59861. *
  59862. * Though the ">" character is escaped for symmetry, characters like
  59863. * ">" and "/" don't need escaping in HTML and have no special meaning
  59864. * unless they're part of a tag or unquoted attribute value. See
  59865. * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
  59866. * (under "semi-related fun fact") for more details.
  59867. *
  59868. * When working with HTML you should always
  59869. * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
  59870. * XSS vectors.
  59871. *
  59872. * @static
  59873. * @since 0.1.0
  59874. * @memberOf _
  59875. * @category String
  59876. * @param {string} [string=''] The string to escape.
  59877. * @returns {string} Returns the escaped string.
  59878. * @example
  59879. *
  59880. * _.escape('fred, barney, & pebbles');
  59881. * // => 'fred, barney, &amp; pebbles'
  59882. */
  59883. function escape(string) {
  59884. string = toString(string);
  59885. return (string && reHasUnescapedHtml.test(string))
  59886. ? string.replace(reUnescapedHtml, escapeHtmlChar)
  59887. : string;
  59888. }
  59889. /**
  59890. * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
  59891. * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
  59892. *
  59893. * @static
  59894. * @memberOf _
  59895. * @since 3.0.0
  59896. * @category String
  59897. * @param {string} [string=''] The string to escape.
  59898. * @returns {string} Returns the escaped string.
  59899. * @example
  59900. *
  59901. * _.escapeRegExp('[lodash](https://lodash.com/)');
  59902. * // => '\[lodash\]\(https://lodash\.com/\)'
  59903. */
  59904. function escapeRegExp(string) {
  59905. string = toString(string);
  59906. return (string && reHasRegExpChar.test(string))
  59907. ? string.replace(reRegExpChar, '\\$&')
  59908. : string;
  59909. }
  59910. /**
  59911. * Converts `string` to
  59912. * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
  59913. *
  59914. * @static
  59915. * @memberOf _
  59916. * @since 3.0.0
  59917. * @category String
  59918. * @param {string} [string=''] The string to convert.
  59919. * @returns {string} Returns the kebab cased string.
  59920. * @example
  59921. *
  59922. * _.kebabCase('Foo Bar');
  59923. * // => 'foo-bar'
  59924. *
  59925. * _.kebabCase('fooBar');
  59926. * // => 'foo-bar'
  59927. *
  59928. * _.kebabCase('__FOO_BAR__');
  59929. * // => 'foo-bar'
  59930. */
  59931. var kebabCase = createCompounder(function(result, word, index) {
  59932. return result + (index ? '-' : '') + word.toLowerCase();
  59933. });
  59934. /**
  59935. * Converts `string`, as space separated words, to lower case.
  59936. *
  59937. * @static
  59938. * @memberOf _
  59939. * @since 4.0.0
  59940. * @category String
  59941. * @param {string} [string=''] The string to convert.
  59942. * @returns {string} Returns the lower cased string.
  59943. * @example
  59944. *
  59945. * _.lowerCase('--Foo-Bar--');
  59946. * // => 'foo bar'
  59947. *
  59948. * _.lowerCase('fooBar');
  59949. * // => 'foo bar'
  59950. *
  59951. * _.lowerCase('__FOO_BAR__');
  59952. * // => 'foo bar'
  59953. */
  59954. var lowerCase = createCompounder(function(result, word, index) {
  59955. return result + (index ? ' ' : '') + word.toLowerCase();
  59956. });
  59957. /**
  59958. * Converts the first character of `string` to lower case.
  59959. *
  59960. * @static
  59961. * @memberOf _
  59962. * @since 4.0.0
  59963. * @category String
  59964. * @param {string} [string=''] The string to convert.
  59965. * @returns {string} Returns the converted string.
  59966. * @example
  59967. *
  59968. * _.lowerFirst('Fred');
  59969. * // => 'fred'
  59970. *
  59971. * _.lowerFirst('FRED');
  59972. * // => 'fRED'
  59973. */
  59974. var lowerFirst = createCaseFirst('toLowerCase');
  59975. /**
  59976. * Pads `string` on the left and right sides if it's shorter than `length`.
  59977. * Padding characters are truncated if they can't be evenly divided by `length`.
  59978. *
  59979. * @static
  59980. * @memberOf _
  59981. * @since 3.0.0
  59982. * @category String
  59983. * @param {string} [string=''] The string to pad.
  59984. * @param {number} [length=0] The padding length.
  59985. * @param {string} [chars=' '] The string used as padding.
  59986. * @returns {string} Returns the padded string.
  59987. * @example
  59988. *
  59989. * _.pad('abc', 8);
  59990. * // => ' abc '
  59991. *
  59992. * _.pad('abc', 8, '_-');
  59993. * // => '_-abc_-_'
  59994. *
  59995. * _.pad('abc', 3);
  59996. * // => 'abc'
  59997. */
  59998. function pad(string, length, chars) {
  59999. string = toString(string);
  60000. length = toInteger(length);
  60001. var strLength = length ? stringSize(string) : 0;
  60002. if (!length || strLength >= length) {
  60003. return string;
  60004. }
  60005. var mid = (length - strLength) / 2;
  60006. return (
  60007. createPadding(nativeFloor(mid), chars) +
  60008. string +
  60009. createPadding(nativeCeil(mid), chars)
  60010. );
  60011. }
  60012. /**
  60013. * Pads `string` on the right side if it's shorter than `length`. Padding
  60014. * characters are truncated if they exceed `length`.
  60015. *
  60016. * @static
  60017. * @memberOf _
  60018. * @since 4.0.0
  60019. * @category String
  60020. * @param {string} [string=''] The string to pad.
  60021. * @param {number} [length=0] The padding length.
  60022. * @param {string} [chars=' '] The string used as padding.
  60023. * @returns {string} Returns the padded string.
  60024. * @example
  60025. *
  60026. * _.padEnd('abc', 6);
  60027. * // => 'abc '
  60028. *
  60029. * _.padEnd('abc', 6, '_-');
  60030. * // => 'abc_-_'
  60031. *
  60032. * _.padEnd('abc', 3);
  60033. * // => 'abc'
  60034. */
  60035. function padEnd(string, length, chars) {
  60036. string = toString(string);
  60037. length = toInteger(length);
  60038. var strLength = length ? stringSize(string) : 0;
  60039. return (length && strLength < length)
  60040. ? (string + createPadding(length - strLength, chars))
  60041. : string;
  60042. }
  60043. /**
  60044. * Pads `string` on the left side if it's shorter than `length`. Padding
  60045. * characters are truncated if they exceed `length`.
  60046. *
  60047. * @static
  60048. * @memberOf _
  60049. * @since 4.0.0
  60050. * @category String
  60051. * @param {string} [string=''] The string to pad.
  60052. * @param {number} [length=0] The padding length.
  60053. * @param {string} [chars=' '] The string used as padding.
  60054. * @returns {string} Returns the padded string.
  60055. * @example
  60056. *
  60057. * _.padStart('abc', 6);
  60058. * // => ' abc'
  60059. *
  60060. * _.padStart('abc', 6, '_-');
  60061. * // => '_-_abc'
  60062. *
  60063. * _.padStart('abc', 3);
  60064. * // => 'abc'
  60065. */
  60066. function padStart(string, length, chars) {
  60067. string = toString(string);
  60068. length = toInteger(length);
  60069. var strLength = length ? stringSize(string) : 0;
  60070. return (length && strLength < length)
  60071. ? (createPadding(length - strLength, chars) + string)
  60072. : string;
  60073. }
  60074. /**
  60075. * Converts `string` to an integer of the specified radix. If `radix` is
  60076. * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
  60077. * hexadecimal, in which case a `radix` of `16` is used.
  60078. *
  60079. * **Note:** This method aligns with the
  60080. * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
  60081. *
  60082. * @static
  60083. * @memberOf _
  60084. * @since 1.1.0
  60085. * @category String
  60086. * @param {string} string The string to convert.
  60087. * @param {number} [radix=10] The radix to interpret `value` by.
  60088. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  60089. * @returns {number} Returns the converted integer.
  60090. * @example
  60091. *
  60092. * _.parseInt('08');
  60093. * // => 8
  60094. *
  60095. * _.map(['6', '08', '10'], _.parseInt);
  60096. * // => [6, 8, 10]
  60097. */
  60098. function parseInt(string, radix, guard) {
  60099. if (guard || radix == null) {
  60100. radix = 0;
  60101. } else if (radix) {
  60102. radix = +radix;
  60103. }
  60104. return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
  60105. }
  60106. /**
  60107. * Repeats the given string `n` times.
  60108. *
  60109. * @static
  60110. * @memberOf _
  60111. * @since 3.0.0
  60112. * @category String
  60113. * @param {string} [string=''] The string to repeat.
  60114. * @param {number} [n=1] The number of times to repeat the string.
  60115. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  60116. * @returns {string} Returns the repeated string.
  60117. * @example
  60118. *
  60119. * _.repeat('*', 3);
  60120. * // => '***'
  60121. *
  60122. * _.repeat('abc', 2);
  60123. * // => 'abcabc'
  60124. *
  60125. * _.repeat('abc', 0);
  60126. * // => ''
  60127. */
  60128. function repeat(string, n, guard) {
  60129. if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
  60130. n = 1;
  60131. } else {
  60132. n = toInteger(n);
  60133. }
  60134. return baseRepeat(toString(string), n);
  60135. }
  60136. /**
  60137. * Replaces matches for `pattern` in `string` with `replacement`.
  60138. *
  60139. * **Note:** This method is based on
  60140. * [`String#replace`](https://mdn.io/String/replace).
  60141. *
  60142. * @static
  60143. * @memberOf _
  60144. * @since 4.0.0
  60145. * @category String
  60146. * @param {string} [string=''] The string to modify.
  60147. * @param {RegExp|string} pattern The pattern to replace.
  60148. * @param {Function|string} replacement The match replacement.
  60149. * @returns {string} Returns the modified string.
  60150. * @example
  60151. *
  60152. * _.replace('Hi Fred', 'Fred', 'Barney');
  60153. * // => 'Hi Barney'
  60154. */
  60155. function replace() {
  60156. var args = arguments,
  60157. string = toString(args[0]);
  60158. return args.length < 3 ? string : string.replace(args[1], args[2]);
  60159. }
  60160. /**
  60161. * Converts `string` to
  60162. * [snake case](https://en.wikipedia.org/wiki/Snake_case).
  60163. *
  60164. * @static
  60165. * @memberOf _
  60166. * @since 3.0.0
  60167. * @category String
  60168. * @param {string} [string=''] The string to convert.
  60169. * @returns {string} Returns the snake cased string.
  60170. * @example
  60171. *
  60172. * _.snakeCase('Foo Bar');
  60173. * // => 'foo_bar'
  60174. *
  60175. * _.snakeCase('fooBar');
  60176. * // => 'foo_bar'
  60177. *
  60178. * _.snakeCase('--FOO-BAR--');
  60179. * // => 'foo_bar'
  60180. */
  60181. var snakeCase = createCompounder(function(result, word, index) {
  60182. return result + (index ? '_' : '') + word.toLowerCase();
  60183. });
  60184. /**
  60185. * Splits `string` by `separator`.
  60186. *
  60187. * **Note:** This method is based on
  60188. * [`String#split`](https://mdn.io/String/split).
  60189. *
  60190. * @static
  60191. * @memberOf _
  60192. * @since 4.0.0
  60193. * @category String
  60194. * @param {string} [string=''] The string to split.
  60195. * @param {RegExp|string} separator The separator pattern to split by.
  60196. * @param {number} [limit] The length to truncate results to.
  60197. * @returns {Array} Returns the string segments.
  60198. * @example
  60199. *
  60200. * _.split('a-b-c', '-', 2);
  60201. * // => ['a', 'b']
  60202. */
  60203. function split(string, separator, limit) {
  60204. if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
  60205. separator = limit = undefined;
  60206. }
  60207. limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
  60208. if (!limit) {
  60209. return [];
  60210. }
  60211. string = toString(string);
  60212. if (string && (
  60213. typeof separator == 'string' ||
  60214. (separator != null && !isRegExp(separator))
  60215. )) {
  60216. separator = baseToString(separator);
  60217. if (!separator && hasUnicode(string)) {
  60218. return castSlice(stringToArray(string), 0, limit);
  60219. }
  60220. }
  60221. return string.split(separator, limit);
  60222. }
  60223. /**
  60224. * Converts `string` to
  60225. * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
  60226. *
  60227. * @static
  60228. * @memberOf _
  60229. * @since 3.1.0
  60230. * @category String
  60231. * @param {string} [string=''] The string to convert.
  60232. * @returns {string} Returns the start cased string.
  60233. * @example
  60234. *
  60235. * _.startCase('--foo-bar--');
  60236. * // => 'Foo Bar'
  60237. *
  60238. * _.startCase('fooBar');
  60239. * // => 'Foo Bar'
  60240. *
  60241. * _.startCase('__FOO_BAR__');
  60242. * // => 'FOO BAR'
  60243. */
  60244. var startCase = createCompounder(function(result, word, index) {
  60245. return result + (index ? ' ' : '') + upperFirst(word);
  60246. });
  60247. /**
  60248. * Checks if `string` starts with the given target string.
  60249. *
  60250. * @static
  60251. * @memberOf _
  60252. * @since 3.0.0
  60253. * @category String
  60254. * @param {string} [string=''] The string to inspect.
  60255. * @param {string} [target] The string to search for.
  60256. * @param {number} [position=0] The position to search from.
  60257. * @returns {boolean} Returns `true` if `string` starts with `target`,
  60258. * else `false`.
  60259. * @example
  60260. *
  60261. * _.startsWith('abc', 'a');
  60262. * // => true
  60263. *
  60264. * _.startsWith('abc', 'b');
  60265. * // => false
  60266. *
  60267. * _.startsWith('abc', 'b', 1);
  60268. * // => true
  60269. */
  60270. function startsWith(string, target, position) {
  60271. string = toString(string);
  60272. position = position == null
  60273. ? 0
  60274. : baseClamp(toInteger(position), 0, string.length);
  60275. target = baseToString(target);
  60276. return string.slice(position, position + target.length) == target;
  60277. }
  60278. /**
  60279. * Creates a compiled template function that can interpolate data properties
  60280. * in "interpolate" delimiters, HTML-escape interpolated data properties in
  60281. * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
  60282. * properties may be accessed as free variables in the template. If a setting
  60283. * object is given, it takes precedence over `_.templateSettings` values.
  60284. *
  60285. * **Note:** In the development build `_.template` utilizes
  60286. * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
  60287. * for easier debugging.
  60288. *
  60289. * For more information on precompiling templates see
  60290. * [lodash's custom builds documentation](https://lodash.com/custom-builds).
  60291. *
  60292. * For more information on Chrome extension sandboxes see
  60293. * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
  60294. *
  60295. * @static
  60296. * @since 0.1.0
  60297. * @memberOf _
  60298. * @category String
  60299. * @param {string} [string=''] The template string.
  60300. * @param {Object} [options={}] The options object.
  60301. * @param {RegExp} [options.escape=_.templateSettings.escape]
  60302. * The HTML "escape" delimiter.
  60303. * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
  60304. * The "evaluate" delimiter.
  60305. * @param {Object} [options.imports=_.templateSettings.imports]
  60306. * An object to import into the template as free variables.
  60307. * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
  60308. * The "interpolate" delimiter.
  60309. * @param {string} [options.sourceURL='lodash.templateSources[n]']
  60310. * The sourceURL of the compiled template.
  60311. * @param {string} [options.variable='obj']
  60312. * The data object variable name.
  60313. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  60314. * @returns {Function} Returns the compiled template function.
  60315. * @example
  60316. *
  60317. * // Use the "interpolate" delimiter to create a compiled template.
  60318. * var compiled = _.template('hello <%= user %>!');
  60319. * compiled({ 'user': 'fred' });
  60320. * // => 'hello fred!'
  60321. *
  60322. * // Use the HTML "escape" delimiter to escape data property values.
  60323. * var compiled = _.template('<b><%- value %></b>');
  60324. * compiled({ 'value': '<script>' });
  60325. * // => '<b>&lt;script&gt;</b>'
  60326. *
  60327. * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
  60328. * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
  60329. * compiled({ 'users': ['fred', 'barney'] });
  60330. * // => '<li>fred</li><li>barney</li>'
  60331. *
  60332. * // Use the internal `print` function in "evaluate" delimiters.
  60333. * var compiled = _.template('<% print("hello " + user); %>!');
  60334. * compiled({ 'user': 'barney' });
  60335. * // => 'hello barney!'
  60336. *
  60337. * // Use the ES template literal delimiter as an "interpolate" delimiter.
  60338. * // Disable support by replacing the "interpolate" delimiter.
  60339. * var compiled = _.template('hello ${ user }!');
  60340. * compiled({ 'user': 'pebbles' });
  60341. * // => 'hello pebbles!'
  60342. *
  60343. * // Use backslashes to treat delimiters as plain text.
  60344. * var compiled = _.template('<%= "\\<%- value %\\>" %>');
  60345. * compiled({ 'value': 'ignored' });
  60346. * // => '<%- value %>'
  60347. *
  60348. * // Use the `imports` option to import `jQuery` as `jq`.
  60349. * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
  60350. * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
  60351. * compiled({ 'users': ['fred', 'barney'] });
  60352. * // => '<li>fred</li><li>barney</li>'
  60353. *
  60354. * // Use the `sourceURL` option to specify a custom sourceURL for the template.
  60355. * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
  60356. * compiled(data);
  60357. * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
  60358. *
  60359. * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
  60360. * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
  60361. * compiled.source;
  60362. * // => function(data) {
  60363. * // var __t, __p = '';
  60364. * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
  60365. * // return __p;
  60366. * // }
  60367. *
  60368. * // Use custom template delimiters.
  60369. * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
  60370. * var compiled = _.template('hello {{ user }}!');
  60371. * compiled({ 'user': 'mustache' });
  60372. * // => 'hello mustache!'
  60373. *
  60374. * // Use the `source` property to inline compiled templates for meaningful
  60375. * // line numbers in error messages and stack traces.
  60376. * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
  60377. * var JST = {\
  60378. * "main": ' + _.template(mainText).source + '\
  60379. * };\
  60380. * ');
  60381. */
  60382. function template(string, options, guard) {
  60383. // Based on John Resig's `tmpl` implementation
  60384. // (http://ejohn.org/blog/javascript-micro-templating/)
  60385. // and Laura Doktorova's doT.js (https://github.com/olado/doT).
  60386. var settings = lodash.templateSettings;
  60387. if (guard && isIterateeCall(string, options, guard)) {
  60388. options = undefined;
  60389. }
  60390. string = toString(string);
  60391. options = assignInWith({}, options, settings, customDefaultsAssignIn);
  60392. var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
  60393. importsKeys = keys(imports),
  60394. importsValues = baseValues(imports, importsKeys);
  60395. var isEscaping,
  60396. isEvaluating,
  60397. index = 0,
  60398. interpolate = options.interpolate || reNoMatch,
  60399. source = "__p += '";
  60400. // Compile the regexp to match each delimiter.
  60401. var reDelimiters = RegExp(
  60402. (options.escape || reNoMatch).source + '|' +
  60403. interpolate.source + '|' +
  60404. (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
  60405. (options.evaluate || reNoMatch).source + '|$'
  60406. , 'g');
  60407. // Use a sourceURL for easier debugging.
  60408. // The sourceURL gets injected into the source that's eval-ed, so be careful
  60409. // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
  60410. // and escape the comment, thus injecting code that gets evaled.
  60411. var sourceURL = '//# sourceURL=' +
  60412. (hasOwnProperty.call(options, 'sourceURL')
  60413. ? (options.sourceURL + '').replace(/\s/g, ' ')
  60414. : ('lodash.templateSources[' + (++templateCounter) + ']')
  60415. ) + '\n';
  60416. string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
  60417. interpolateValue || (interpolateValue = esTemplateValue);
  60418. // Escape characters that can't be included in string literals.
  60419. source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
  60420. // Replace delimiters with snippets.
  60421. if (escapeValue) {
  60422. isEscaping = true;
  60423. source += "' +\n__e(" + escapeValue + ") +\n'";
  60424. }
  60425. if (evaluateValue) {
  60426. isEvaluating = true;
  60427. source += "';\n" + evaluateValue + ";\n__p += '";
  60428. }
  60429. if (interpolateValue) {
  60430. source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
  60431. }
  60432. index = offset + match.length;
  60433. // The JS engine embedded in Adobe products needs `match` returned in
  60434. // order to produce the correct `offset` value.
  60435. return match;
  60436. });
  60437. source += "';\n";
  60438. // If `variable` is not specified wrap a with-statement around the generated
  60439. // code to add the data object to the top of the scope chain.
  60440. var variable = hasOwnProperty.call(options, 'variable') && options.variable;
  60441. if (!variable) {
  60442. source = 'with (obj) {\n' + source + '\n}\n';
  60443. }
  60444. // Throw an error if a forbidden character was found in `variable`, to prevent
  60445. // potential command injection attacks.
  60446. else if (reForbiddenIdentifierChars.test(variable)) {
  60447. throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
  60448. }
  60449. // Cleanup code by stripping empty strings.
  60450. source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
  60451. .replace(reEmptyStringMiddle, '$1')
  60452. .replace(reEmptyStringTrailing, '$1;');
  60453. // Frame code as the function body.
  60454. source = 'function(' + (variable || 'obj') + ') {\n' +
  60455. (variable
  60456. ? ''
  60457. : 'obj || (obj = {});\n'
  60458. ) +
  60459. "var __t, __p = ''" +
  60460. (isEscaping
  60461. ? ', __e = _.escape'
  60462. : ''
  60463. ) +
  60464. (isEvaluating
  60465. ? ', __j = Array.prototype.join;\n' +
  60466. "function print() { __p += __j.call(arguments, '') }\n"
  60467. : ';\n'
  60468. ) +
  60469. source +
  60470. 'return __p\n}';
  60471. var result = attempt(function() {
  60472. return Function(importsKeys, sourceURL + 'return ' + source)
  60473. .apply(undefined, importsValues);
  60474. });
  60475. // Provide the compiled function's source by its `toString` method or
  60476. // the `source` property as a convenience for inlining compiled templates.
  60477. result.source = source;
  60478. if (isError(result)) {
  60479. throw result;
  60480. }
  60481. return result;
  60482. }
  60483. /**
  60484. * Converts `string`, as a whole, to lower case just like
  60485. * [String#toLowerCase](https://mdn.io/toLowerCase).
  60486. *
  60487. * @static
  60488. * @memberOf _
  60489. * @since 4.0.0
  60490. * @category String
  60491. * @param {string} [string=''] The string to convert.
  60492. * @returns {string} Returns the lower cased string.
  60493. * @example
  60494. *
  60495. * _.toLower('--Foo-Bar--');
  60496. * // => '--foo-bar--'
  60497. *
  60498. * _.toLower('fooBar');
  60499. * // => 'foobar'
  60500. *
  60501. * _.toLower('__FOO_BAR__');
  60502. * // => '__foo_bar__'
  60503. */
  60504. function toLower(value) {
  60505. return toString(value).toLowerCase();
  60506. }
  60507. /**
  60508. * Converts `string`, as a whole, to upper case just like
  60509. * [String#toUpperCase](https://mdn.io/toUpperCase).
  60510. *
  60511. * @static
  60512. * @memberOf _
  60513. * @since 4.0.0
  60514. * @category String
  60515. * @param {string} [string=''] The string to convert.
  60516. * @returns {string} Returns the upper cased string.
  60517. * @example
  60518. *
  60519. * _.toUpper('--foo-bar--');
  60520. * // => '--FOO-BAR--'
  60521. *
  60522. * _.toUpper('fooBar');
  60523. * // => 'FOOBAR'
  60524. *
  60525. * _.toUpper('__foo_bar__');
  60526. * // => '__FOO_BAR__'
  60527. */
  60528. function toUpper(value) {
  60529. return toString(value).toUpperCase();
  60530. }
  60531. /**
  60532. * Removes leading and trailing whitespace or specified characters from `string`.
  60533. *
  60534. * @static
  60535. * @memberOf _
  60536. * @since 3.0.0
  60537. * @category String
  60538. * @param {string} [string=''] The string to trim.
  60539. * @param {string} [chars=whitespace] The characters to trim.
  60540. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  60541. * @returns {string} Returns the trimmed string.
  60542. * @example
  60543. *
  60544. * _.trim(' abc ');
  60545. * // => 'abc'
  60546. *
  60547. * _.trim('-_-abc-_-', '_-');
  60548. * // => 'abc'
  60549. *
  60550. * _.map([' foo ', ' bar '], _.trim);
  60551. * // => ['foo', 'bar']
  60552. */
  60553. function trim(string, chars, guard) {
  60554. string = toString(string);
  60555. if (string && (guard || chars === undefined)) {
  60556. return baseTrim(string);
  60557. }
  60558. if (!string || !(chars = baseToString(chars))) {
  60559. return string;
  60560. }
  60561. var strSymbols = stringToArray(string),
  60562. chrSymbols = stringToArray(chars),
  60563. start = charsStartIndex(strSymbols, chrSymbols),
  60564. end = charsEndIndex(strSymbols, chrSymbols) + 1;
  60565. return castSlice(strSymbols, start, end).join('');
  60566. }
  60567. /**
  60568. * Removes trailing whitespace or specified characters from `string`.
  60569. *
  60570. * @static
  60571. * @memberOf _
  60572. * @since 4.0.0
  60573. * @category String
  60574. * @param {string} [string=''] The string to trim.
  60575. * @param {string} [chars=whitespace] The characters to trim.
  60576. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  60577. * @returns {string} Returns the trimmed string.
  60578. * @example
  60579. *
  60580. * _.trimEnd(' abc ');
  60581. * // => ' abc'
  60582. *
  60583. * _.trimEnd('-_-abc-_-', '_-');
  60584. * // => '-_-abc'
  60585. */
  60586. function trimEnd(string, chars, guard) {
  60587. string = toString(string);
  60588. if (string && (guard || chars === undefined)) {
  60589. return string.slice(0, trimmedEndIndex(string) + 1);
  60590. }
  60591. if (!string || !(chars = baseToString(chars))) {
  60592. return string;
  60593. }
  60594. var strSymbols = stringToArray(string),
  60595. end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
  60596. return castSlice(strSymbols, 0, end).join('');
  60597. }
  60598. /**
  60599. * Removes leading whitespace or specified characters from `string`.
  60600. *
  60601. * @static
  60602. * @memberOf _
  60603. * @since 4.0.0
  60604. * @category String
  60605. * @param {string} [string=''] The string to trim.
  60606. * @param {string} [chars=whitespace] The characters to trim.
  60607. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  60608. * @returns {string} Returns the trimmed string.
  60609. * @example
  60610. *
  60611. * _.trimStart(' abc ');
  60612. * // => 'abc '
  60613. *
  60614. * _.trimStart('-_-abc-_-', '_-');
  60615. * // => 'abc-_-'
  60616. */
  60617. function trimStart(string, chars, guard) {
  60618. string = toString(string);
  60619. if (string && (guard || chars === undefined)) {
  60620. return string.replace(reTrimStart, '');
  60621. }
  60622. if (!string || !(chars = baseToString(chars))) {
  60623. return string;
  60624. }
  60625. var strSymbols = stringToArray(string),
  60626. start = charsStartIndex(strSymbols, stringToArray(chars));
  60627. return castSlice(strSymbols, start).join('');
  60628. }
  60629. /**
  60630. * Truncates `string` if it's longer than the given maximum string length.
  60631. * The last characters of the truncated string are replaced with the omission
  60632. * string which defaults to "...".
  60633. *
  60634. * @static
  60635. * @memberOf _
  60636. * @since 4.0.0
  60637. * @category String
  60638. * @param {string} [string=''] The string to truncate.
  60639. * @param {Object} [options={}] The options object.
  60640. * @param {number} [options.length=30] The maximum string length.
  60641. * @param {string} [options.omission='...'] The string to indicate text is omitted.
  60642. * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
  60643. * @returns {string} Returns the truncated string.
  60644. * @example
  60645. *
  60646. * _.truncate('hi-diddly-ho there, neighborino');
  60647. * // => 'hi-diddly-ho there, neighbo...'
  60648. *
  60649. * _.truncate('hi-diddly-ho there, neighborino', {
  60650. * 'length': 24,
  60651. * 'separator': ' '
  60652. * });
  60653. * // => 'hi-diddly-ho there,...'
  60654. *
  60655. * _.truncate('hi-diddly-ho there, neighborino', {
  60656. * 'length': 24,
  60657. * 'separator': /,? +/
  60658. * });
  60659. * // => 'hi-diddly-ho there...'
  60660. *
  60661. * _.truncate('hi-diddly-ho there, neighborino', {
  60662. * 'omission': ' [...]'
  60663. * });
  60664. * // => 'hi-diddly-ho there, neig [...]'
  60665. */
  60666. function truncate(string, options) {
  60667. var length = DEFAULT_TRUNC_LENGTH,
  60668. omission = DEFAULT_TRUNC_OMISSION;
  60669. if (isObject(options)) {
  60670. var separator = 'separator' in options ? options.separator : separator;
  60671. length = 'length' in options ? toInteger(options.length) : length;
  60672. omission = 'omission' in options ? baseToString(options.omission) : omission;
  60673. }
  60674. string = toString(string);
  60675. var strLength = string.length;
  60676. if (hasUnicode(string)) {
  60677. var strSymbols = stringToArray(string);
  60678. strLength = strSymbols.length;
  60679. }
  60680. if (length >= strLength) {
  60681. return string;
  60682. }
  60683. var end = length - stringSize(omission);
  60684. if (end < 1) {
  60685. return omission;
  60686. }
  60687. var result = strSymbols
  60688. ? castSlice(strSymbols, 0, end).join('')
  60689. : string.slice(0, end);
  60690. if (separator === undefined) {
  60691. return result + omission;
  60692. }
  60693. if (strSymbols) {
  60694. end += (result.length - end);
  60695. }
  60696. if (isRegExp(separator)) {
  60697. if (string.slice(end).search(separator)) {
  60698. var match,
  60699. substring = result;
  60700. if (!separator.global) {
  60701. separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
  60702. }
  60703. separator.lastIndex = 0;
  60704. while ((match = separator.exec(substring))) {
  60705. var newEnd = match.index;
  60706. }
  60707. result = result.slice(0, newEnd === undefined ? end : newEnd);
  60708. }
  60709. } else if (string.indexOf(baseToString(separator), end) != end) {
  60710. var index = result.lastIndexOf(separator);
  60711. if (index > -1) {
  60712. result = result.slice(0, index);
  60713. }
  60714. }
  60715. return result + omission;
  60716. }
  60717. /**
  60718. * The inverse of `_.escape`; this method converts the HTML entities
  60719. * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
  60720. * their corresponding characters.
  60721. *
  60722. * **Note:** No other HTML entities are unescaped. To unescape additional
  60723. * HTML entities use a third-party library like [_he_](https://mths.be/he).
  60724. *
  60725. * @static
  60726. * @memberOf _
  60727. * @since 0.6.0
  60728. * @category String
  60729. * @param {string} [string=''] The string to unescape.
  60730. * @returns {string} Returns the unescaped string.
  60731. * @example
  60732. *
  60733. * _.unescape('fred, barney, &amp; pebbles');
  60734. * // => 'fred, barney, & pebbles'
  60735. */
  60736. function unescape(string) {
  60737. string = toString(string);
  60738. return (string && reHasEscapedHtml.test(string))
  60739. ? string.replace(reEscapedHtml, unescapeHtmlChar)
  60740. : string;
  60741. }
  60742. /**
  60743. * Converts `string`, as space separated words, to upper case.
  60744. *
  60745. * @static
  60746. * @memberOf _
  60747. * @since 4.0.0
  60748. * @category String
  60749. * @param {string} [string=''] The string to convert.
  60750. * @returns {string} Returns the upper cased string.
  60751. * @example
  60752. *
  60753. * _.upperCase('--foo-bar');
  60754. * // => 'FOO BAR'
  60755. *
  60756. * _.upperCase('fooBar');
  60757. * // => 'FOO BAR'
  60758. *
  60759. * _.upperCase('__foo_bar__');
  60760. * // => 'FOO BAR'
  60761. */
  60762. var upperCase = createCompounder(function(result, word, index) {
  60763. return result + (index ? ' ' : '') + word.toUpperCase();
  60764. });
  60765. /**
  60766. * Converts the first character of `string` to upper case.
  60767. *
  60768. * @static
  60769. * @memberOf _
  60770. * @since 4.0.0
  60771. * @category String
  60772. * @param {string} [string=''] The string to convert.
  60773. * @returns {string} Returns the converted string.
  60774. * @example
  60775. *
  60776. * _.upperFirst('fred');
  60777. * // => 'Fred'
  60778. *
  60779. * _.upperFirst('FRED');
  60780. * // => 'FRED'
  60781. */
  60782. var upperFirst = createCaseFirst('toUpperCase');
  60783. /**
  60784. * Splits `string` into an array of its words.
  60785. *
  60786. * @static
  60787. * @memberOf _
  60788. * @since 3.0.0
  60789. * @category String
  60790. * @param {string} [string=''] The string to inspect.
  60791. * @param {RegExp|string} [pattern] The pattern to match words.
  60792. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
  60793. * @returns {Array} Returns the words of `string`.
  60794. * @example
  60795. *
  60796. * _.words('fred, barney, & pebbles');
  60797. * // => ['fred', 'barney', 'pebbles']
  60798. *
  60799. * _.words('fred, barney, & pebbles', /[^, ]+/g);
  60800. * // => ['fred', 'barney', '&', 'pebbles']
  60801. */
  60802. function words(string, pattern, guard) {
  60803. string = toString(string);
  60804. pattern = guard ? undefined : pattern;
  60805. if (pattern === undefined) {
  60806. return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
  60807. }
  60808. return string.match(pattern) || [];
  60809. }
  60810. /*------------------------------------------------------------------------*/
  60811. /**
  60812. * Attempts to invoke `func`, returning either the result or the caught error
  60813. * object. Any additional arguments are provided to `func` when it's invoked.
  60814. *
  60815. * @static
  60816. * @memberOf _
  60817. * @since 3.0.0
  60818. * @category Util
  60819. * @param {Function} func The function to attempt.
  60820. * @param {...*} [args] The arguments to invoke `func` with.
  60821. * @returns {*} Returns the `func` result or error object.
  60822. * @example
  60823. *
  60824. * // Avoid throwing errors for invalid selectors.
  60825. * var elements = _.attempt(function(selector) {
  60826. * return document.querySelectorAll(selector);
  60827. * }, '>_>');
  60828. *
  60829. * if (_.isError(elements)) {
  60830. * elements = [];
  60831. * }
  60832. */
  60833. var attempt = baseRest(function(func, args) {
  60834. try {
  60835. return apply(func, undefined, args);
  60836. } catch (e) {
  60837. return isError(e) ? e : new Error(e);
  60838. }
  60839. });
  60840. /**
  60841. * Binds methods of an object to the object itself, overwriting the existing
  60842. * method.
  60843. *
  60844. * **Note:** This method doesn't set the "length" property of bound functions.
  60845. *
  60846. * @static
  60847. * @since 0.1.0
  60848. * @memberOf _
  60849. * @category Util
  60850. * @param {Object} object The object to bind and assign the bound methods to.
  60851. * @param {...(string|string[])} methodNames The object method names to bind.
  60852. * @returns {Object} Returns `object`.
  60853. * @example
  60854. *
  60855. * var view = {
  60856. * 'label': 'docs',
  60857. * 'click': function() {
  60858. * console.log('clicked ' + this.label);
  60859. * }
  60860. * };
  60861. *
  60862. * _.bindAll(view, ['click']);
  60863. * jQuery(element).on('click', view.click);
  60864. * // => Logs 'clicked docs' when clicked.
  60865. */
  60866. var bindAll = flatRest(function(object, methodNames) {
  60867. arrayEach(methodNames, function(key) {
  60868. key = toKey(key);
  60869. baseAssignValue(object, key, bind(object[key], object));
  60870. });
  60871. return object;
  60872. });
  60873. /**
  60874. * Creates a function that iterates over `pairs` and invokes the corresponding
  60875. * function of the first predicate to return truthy. The predicate-function
  60876. * pairs are invoked with the `this` binding and arguments of the created
  60877. * function.
  60878. *
  60879. * @static
  60880. * @memberOf _
  60881. * @since 4.0.0
  60882. * @category Util
  60883. * @param {Array} pairs The predicate-function pairs.
  60884. * @returns {Function} Returns the new composite function.
  60885. * @example
  60886. *
  60887. * var func = _.cond([
  60888. * [_.matches({ 'a': 1 }), _.constant('matches A')],
  60889. * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
  60890. * [_.stubTrue, _.constant('no match')]
  60891. * ]);
  60892. *
  60893. * func({ 'a': 1, 'b': 2 });
  60894. * // => 'matches A'
  60895. *
  60896. * func({ 'a': 0, 'b': 1 });
  60897. * // => 'matches B'
  60898. *
  60899. * func({ 'a': '1', 'b': '2' });
  60900. * // => 'no match'
  60901. */
  60902. function cond(pairs) {
  60903. var length = pairs == null ? 0 : pairs.length,
  60904. toIteratee = getIteratee();
  60905. pairs = !length ? [] : arrayMap(pairs, function(pair) {
  60906. if (typeof pair[1] != 'function') {
  60907. throw new TypeError(FUNC_ERROR_TEXT);
  60908. }
  60909. return [toIteratee(pair[0]), pair[1]];
  60910. });
  60911. return baseRest(function(args) {
  60912. var index = -1;
  60913. while (++index < length) {
  60914. var pair = pairs[index];
  60915. if (apply(pair[0], this, args)) {
  60916. return apply(pair[1], this, args);
  60917. }
  60918. }
  60919. });
  60920. }
  60921. /**
  60922. * Creates a function that invokes the predicate properties of `source` with
  60923. * the corresponding property values of a given object, returning `true` if
  60924. * all predicates return truthy, else `false`.
  60925. *
  60926. * **Note:** The created function is equivalent to `_.conformsTo` with
  60927. * `source` partially applied.
  60928. *
  60929. * @static
  60930. * @memberOf _
  60931. * @since 4.0.0
  60932. * @category Util
  60933. * @param {Object} source The object of property predicates to conform to.
  60934. * @returns {Function} Returns the new spec function.
  60935. * @example
  60936. *
  60937. * var objects = [
  60938. * { 'a': 2, 'b': 1 },
  60939. * { 'a': 1, 'b': 2 }
  60940. * ];
  60941. *
  60942. * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
  60943. * // => [{ 'a': 1, 'b': 2 }]
  60944. */
  60945. function conforms(source) {
  60946. return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
  60947. }
  60948. /**
  60949. * Creates a function that returns `value`.
  60950. *
  60951. * @static
  60952. * @memberOf _
  60953. * @since 2.4.0
  60954. * @category Util
  60955. * @param {*} value The value to return from the new function.
  60956. * @returns {Function} Returns the new constant function.
  60957. * @example
  60958. *
  60959. * var objects = _.times(2, _.constant({ 'a': 1 }));
  60960. *
  60961. * console.log(objects);
  60962. * // => [{ 'a': 1 }, { 'a': 1 }]
  60963. *
  60964. * console.log(objects[0] === objects[1]);
  60965. * // => true
  60966. */
  60967. function constant(value) {
  60968. return function() {
  60969. return value;
  60970. };
  60971. }
  60972. /**
  60973. * Checks `value` to determine whether a default value should be returned in
  60974. * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
  60975. * or `undefined`.
  60976. *
  60977. * @static
  60978. * @memberOf _
  60979. * @since 4.14.0
  60980. * @category Util
  60981. * @param {*} value The value to check.
  60982. * @param {*} defaultValue The default value.
  60983. * @returns {*} Returns the resolved value.
  60984. * @example
  60985. *
  60986. * _.defaultTo(1, 10);
  60987. * // => 1
  60988. *
  60989. * _.defaultTo(undefined, 10);
  60990. * // => 10
  60991. */
  60992. function defaultTo(value, defaultValue) {
  60993. return (value == null || value !== value) ? defaultValue : value;
  60994. }
  60995. /**
  60996. * Creates a function that returns the result of invoking the given functions
  60997. * with the `this` binding of the created function, where each successive
  60998. * invocation is supplied the return value of the previous.
  60999. *
  61000. * @static
  61001. * @memberOf _
  61002. * @since 3.0.0
  61003. * @category Util
  61004. * @param {...(Function|Function[])} [funcs] The functions to invoke.
  61005. * @returns {Function} Returns the new composite function.
  61006. * @see _.flowRight
  61007. * @example
  61008. *
  61009. * function square(n) {
  61010. * return n * n;
  61011. * }
  61012. *
  61013. * var addSquare = _.flow([_.add, square]);
  61014. * addSquare(1, 2);
  61015. * // => 9
  61016. */
  61017. var flow = createFlow();
  61018. /**
  61019. * This method is like `_.flow` except that it creates a function that
  61020. * invokes the given functions from right to left.
  61021. *
  61022. * @static
  61023. * @since 3.0.0
  61024. * @memberOf _
  61025. * @category Util
  61026. * @param {...(Function|Function[])} [funcs] The functions to invoke.
  61027. * @returns {Function} Returns the new composite function.
  61028. * @see _.flow
  61029. * @example
  61030. *
  61031. * function square(n) {
  61032. * return n * n;
  61033. * }
  61034. *
  61035. * var addSquare = _.flowRight([square, _.add]);
  61036. * addSquare(1, 2);
  61037. * // => 9
  61038. */
  61039. var flowRight = createFlow(true);
  61040. /**
  61041. * This method returns the first argument it receives.
  61042. *
  61043. * @static
  61044. * @since 0.1.0
  61045. * @memberOf _
  61046. * @category Util
  61047. * @param {*} value Any value.
  61048. * @returns {*} Returns `value`.
  61049. * @example
  61050. *
  61051. * var object = { 'a': 1 };
  61052. *
  61053. * console.log(_.identity(object) === object);
  61054. * // => true
  61055. */
  61056. function identity(value) {
  61057. return value;
  61058. }
  61059. /**
  61060. * Creates a function that invokes `func` with the arguments of the created
  61061. * function. If `func` is a property name, the created function returns the
  61062. * property value for a given element. If `func` is an array or object, the
  61063. * created function returns `true` for elements that contain the equivalent
  61064. * source properties, otherwise it returns `false`.
  61065. *
  61066. * @static
  61067. * @since 4.0.0
  61068. * @memberOf _
  61069. * @category Util
  61070. * @param {*} [func=_.identity] The value to convert to a callback.
  61071. * @returns {Function} Returns the callback.
  61072. * @example
  61073. *
  61074. * var users = [
  61075. * { 'user': 'barney', 'age': 36, 'active': true },
  61076. * { 'user': 'fred', 'age': 40, 'active': false }
  61077. * ];
  61078. *
  61079. * // The `_.matches` iteratee shorthand.
  61080. * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
  61081. * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
  61082. *
  61083. * // The `_.matchesProperty` iteratee shorthand.
  61084. * _.filter(users, _.iteratee(['user', 'fred']));
  61085. * // => [{ 'user': 'fred', 'age': 40 }]
  61086. *
  61087. * // The `_.property` iteratee shorthand.
  61088. * _.map(users, _.iteratee('user'));
  61089. * // => ['barney', 'fred']
  61090. *
  61091. * // Create custom iteratee shorthands.
  61092. * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
  61093. * return !_.isRegExp(func) ? iteratee(func) : function(string) {
  61094. * return func.test(string);
  61095. * };
  61096. * });
  61097. *
  61098. * _.filter(['abc', 'def'], /ef/);
  61099. * // => ['def']
  61100. */
  61101. function iteratee(func) {
  61102. return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
  61103. }
  61104. /**
  61105. * Creates a function that performs a partial deep comparison between a given
  61106. * object and `source`, returning `true` if the given object has equivalent
  61107. * property values, else `false`.
  61108. *
  61109. * **Note:** The created function is equivalent to `_.isMatch` with `source`
  61110. * partially applied.
  61111. *
  61112. * Partial comparisons will match empty array and empty object `source`
  61113. * values against any array or object value, respectively. See `_.isEqual`
  61114. * for a list of supported value comparisons.
  61115. *
  61116. * **Note:** Multiple values can be checked by combining several matchers
  61117. * using `_.overSome`
  61118. *
  61119. * @static
  61120. * @memberOf _
  61121. * @since 3.0.0
  61122. * @category Util
  61123. * @param {Object} source The object of property values to match.
  61124. * @returns {Function} Returns the new spec function.
  61125. * @example
  61126. *
  61127. * var objects = [
  61128. * { 'a': 1, 'b': 2, 'c': 3 },
  61129. * { 'a': 4, 'b': 5, 'c': 6 }
  61130. * ];
  61131. *
  61132. * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
  61133. * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
  61134. *
  61135. * // Checking for several possible values
  61136. * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
  61137. * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
  61138. */
  61139. function matches(source) {
  61140. return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
  61141. }
  61142. /**
  61143. * Creates a function that performs a partial deep comparison between the
  61144. * value at `path` of a given object to `srcValue`, returning `true` if the
  61145. * object value is equivalent, else `false`.
  61146. *
  61147. * **Note:** Partial comparisons will match empty array and empty object
  61148. * `srcValue` values against any array or object value, respectively. See
  61149. * `_.isEqual` for a list of supported value comparisons.
  61150. *
  61151. * **Note:** Multiple values can be checked by combining several matchers
  61152. * using `_.overSome`
  61153. *
  61154. * @static
  61155. * @memberOf _
  61156. * @since 3.2.0
  61157. * @category Util
  61158. * @param {Array|string} path The path of the property to get.
  61159. * @param {*} srcValue The value to match.
  61160. * @returns {Function} Returns the new spec function.
  61161. * @example
  61162. *
  61163. * var objects = [
  61164. * { 'a': 1, 'b': 2, 'c': 3 },
  61165. * { 'a': 4, 'b': 5, 'c': 6 }
  61166. * ];
  61167. *
  61168. * _.find(objects, _.matchesProperty('a', 4));
  61169. * // => { 'a': 4, 'b': 5, 'c': 6 }
  61170. *
  61171. * // Checking for several possible values
  61172. * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
  61173. * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
  61174. */
  61175. function matchesProperty(path, srcValue) {
  61176. return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
  61177. }
  61178. /**
  61179. * Creates a function that invokes the method at `path` of a given object.
  61180. * Any additional arguments are provided to the invoked method.
  61181. *
  61182. * @static
  61183. * @memberOf _
  61184. * @since 3.7.0
  61185. * @category Util
  61186. * @param {Array|string} path The path of the method to invoke.
  61187. * @param {...*} [args] The arguments to invoke the method with.
  61188. * @returns {Function} Returns the new invoker function.
  61189. * @example
  61190. *
  61191. * var objects = [
  61192. * { 'a': { 'b': _.constant(2) } },
  61193. * { 'a': { 'b': _.constant(1) } }
  61194. * ];
  61195. *
  61196. * _.map(objects, _.method('a.b'));
  61197. * // => [2, 1]
  61198. *
  61199. * _.map(objects, _.method(['a', 'b']));
  61200. * // => [2, 1]
  61201. */
  61202. var method = baseRest(function(path, args) {
  61203. return function(object) {
  61204. return baseInvoke(object, path, args);
  61205. };
  61206. });
  61207. /**
  61208. * The opposite of `_.method`; this method creates a function that invokes
  61209. * the method at a given path of `object`. Any additional arguments are
  61210. * provided to the invoked method.
  61211. *
  61212. * @static
  61213. * @memberOf _
  61214. * @since 3.7.0
  61215. * @category Util
  61216. * @param {Object} object The object to query.
  61217. * @param {...*} [args] The arguments to invoke the method with.
  61218. * @returns {Function} Returns the new invoker function.
  61219. * @example
  61220. *
  61221. * var array = _.times(3, _.constant),
  61222. * object = { 'a': array, 'b': array, 'c': array };
  61223. *
  61224. * _.map(['a[2]', 'c[0]'], _.methodOf(object));
  61225. * // => [2, 0]
  61226. *
  61227. * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
  61228. * // => [2, 0]
  61229. */
  61230. var methodOf = baseRest(function(object, args) {
  61231. return function(path) {
  61232. return baseInvoke(object, path, args);
  61233. };
  61234. });
  61235. /**
  61236. * Adds all own enumerable string keyed function properties of a source
  61237. * object to the destination object. If `object` is a function, then methods
  61238. * are added to its prototype as well.
  61239. *
  61240. * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
  61241. * avoid conflicts caused by modifying the original.
  61242. *
  61243. * @static
  61244. * @since 0.1.0
  61245. * @memberOf _
  61246. * @category Util
  61247. * @param {Function|Object} [object=lodash] The destination object.
  61248. * @param {Object} source The object of functions to add.
  61249. * @param {Object} [options={}] The options object.
  61250. * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
  61251. * @returns {Function|Object} Returns `object`.
  61252. * @example
  61253. *
  61254. * function vowels(string) {
  61255. * return _.filter(string, function(v) {
  61256. * return /[aeiou]/i.test(v);
  61257. * });
  61258. * }
  61259. *
  61260. * _.mixin({ 'vowels': vowels });
  61261. * _.vowels('fred');
  61262. * // => ['e']
  61263. *
  61264. * _('fred').vowels().value();
  61265. * // => ['e']
  61266. *
  61267. * _.mixin({ 'vowels': vowels }, { 'chain': false });
  61268. * _('fred').vowels();
  61269. * // => ['e']
  61270. */
  61271. function mixin(object, source, options) {
  61272. var props = keys(source),
  61273. methodNames = baseFunctions(source, props);
  61274. if (options == null &&
  61275. !(isObject(source) && (methodNames.length || !props.length))) {
  61276. options = source;
  61277. source = object;
  61278. object = this;
  61279. methodNames = baseFunctions(source, keys(source));
  61280. }
  61281. var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
  61282. isFunc = isFunction(object);
  61283. arrayEach(methodNames, function(methodName) {
  61284. var func = source[methodName];
  61285. object[methodName] = func;
  61286. if (isFunc) {
  61287. object.prototype[methodName] = function() {
  61288. var chainAll = this.__chain__;
  61289. if (chain || chainAll) {
  61290. var result = object(this.__wrapped__),
  61291. actions = result.__actions__ = copyArray(this.__actions__);
  61292. actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
  61293. result.__chain__ = chainAll;
  61294. return result;
  61295. }
  61296. return func.apply(object, arrayPush([this.value()], arguments));
  61297. };
  61298. }
  61299. });
  61300. return object;
  61301. }
  61302. /**
  61303. * Reverts the `_` variable to its previous value and returns a reference to
  61304. * the `lodash` function.
  61305. *
  61306. * @static
  61307. * @since 0.1.0
  61308. * @memberOf _
  61309. * @category Util
  61310. * @returns {Function} Returns the `lodash` function.
  61311. * @example
  61312. *
  61313. * var lodash = _.noConflict();
  61314. */
  61315. function noConflict() {
  61316. if (root._ === this) {
  61317. root._ = oldDash;
  61318. }
  61319. return this;
  61320. }
  61321. /**
  61322. * This method returns `undefined`.
  61323. *
  61324. * @static
  61325. * @memberOf _
  61326. * @since 2.3.0
  61327. * @category Util
  61328. * @example
  61329. *
  61330. * _.times(2, _.noop);
  61331. * // => [undefined, undefined]
  61332. */
  61333. function noop() {
  61334. // No operation performed.
  61335. }
  61336. /**
  61337. * Creates a function that gets the argument at index `n`. If `n` is negative,
  61338. * the nth argument from the end is returned.
  61339. *
  61340. * @static
  61341. * @memberOf _
  61342. * @since 4.0.0
  61343. * @category Util
  61344. * @param {number} [n=0] The index of the argument to return.
  61345. * @returns {Function} Returns the new pass-thru function.
  61346. * @example
  61347. *
  61348. * var func = _.nthArg(1);
  61349. * func('a', 'b', 'c', 'd');
  61350. * // => 'b'
  61351. *
  61352. * var func = _.nthArg(-2);
  61353. * func('a', 'b', 'c', 'd');
  61354. * // => 'c'
  61355. */
  61356. function nthArg(n) {
  61357. n = toInteger(n);
  61358. return baseRest(function(args) {
  61359. return baseNth(args, n);
  61360. });
  61361. }
  61362. /**
  61363. * Creates a function that invokes `iteratees` with the arguments it receives
  61364. * and returns their results.
  61365. *
  61366. * @static
  61367. * @memberOf _
  61368. * @since 4.0.0
  61369. * @category Util
  61370. * @param {...(Function|Function[])} [iteratees=[_.identity]]
  61371. * The iteratees to invoke.
  61372. * @returns {Function} Returns the new function.
  61373. * @example
  61374. *
  61375. * var func = _.over([Math.max, Math.min]);
  61376. *
  61377. * func(1, 2, 3, 4);
  61378. * // => [4, 1]
  61379. */
  61380. var over = createOver(arrayMap);
  61381. /**
  61382. * Creates a function that checks if **all** of the `predicates` return
  61383. * truthy when invoked with the arguments it receives.
  61384. *
  61385. * Following shorthands are possible for providing predicates.
  61386. * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
  61387. * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
  61388. *
  61389. * @static
  61390. * @memberOf _
  61391. * @since 4.0.0
  61392. * @category Util
  61393. * @param {...(Function|Function[])} [predicates=[_.identity]]
  61394. * The predicates to check.
  61395. * @returns {Function} Returns the new function.
  61396. * @example
  61397. *
  61398. * var func = _.overEvery([Boolean, isFinite]);
  61399. *
  61400. * func('1');
  61401. * // => true
  61402. *
  61403. * func(null);
  61404. * // => false
  61405. *
  61406. * func(NaN);
  61407. * // => false
  61408. */
  61409. var overEvery = createOver(arrayEvery);
  61410. /**
  61411. * Creates a function that checks if **any** of the `predicates` return
  61412. * truthy when invoked with the arguments it receives.
  61413. *
  61414. * Following shorthands are possible for providing predicates.
  61415. * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
  61416. * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
  61417. *
  61418. * @static
  61419. * @memberOf _
  61420. * @since 4.0.0
  61421. * @category Util
  61422. * @param {...(Function|Function[])} [predicates=[_.identity]]
  61423. * The predicates to check.
  61424. * @returns {Function} Returns the new function.
  61425. * @example
  61426. *
  61427. * var func = _.overSome([Boolean, isFinite]);
  61428. *
  61429. * func('1');
  61430. * // => true
  61431. *
  61432. * func(null);
  61433. * // => true
  61434. *
  61435. * func(NaN);
  61436. * // => false
  61437. *
  61438. * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
  61439. * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
  61440. */
  61441. var overSome = createOver(arraySome);
  61442. /**
  61443. * Creates a function that returns the value at `path` of a given object.
  61444. *
  61445. * @static
  61446. * @memberOf _
  61447. * @since 2.4.0
  61448. * @category Util
  61449. * @param {Array|string} path The path of the property to get.
  61450. * @returns {Function} Returns the new accessor function.
  61451. * @example
  61452. *
  61453. * var objects = [
  61454. * { 'a': { 'b': 2 } },
  61455. * { 'a': { 'b': 1 } }
  61456. * ];
  61457. *
  61458. * _.map(objects, _.property('a.b'));
  61459. * // => [2, 1]
  61460. *
  61461. * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
  61462. * // => [1, 2]
  61463. */
  61464. function property(path) {
  61465. return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
  61466. }
  61467. /**
  61468. * The opposite of `_.property`; this method creates a function that returns
  61469. * the value at a given path of `object`.
  61470. *
  61471. * @static
  61472. * @memberOf _
  61473. * @since 3.0.0
  61474. * @category Util
  61475. * @param {Object} object The object to query.
  61476. * @returns {Function} Returns the new accessor function.
  61477. * @example
  61478. *
  61479. * var array = [0, 1, 2],
  61480. * object = { 'a': array, 'b': array, 'c': array };
  61481. *
  61482. * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
  61483. * // => [2, 0]
  61484. *
  61485. * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
  61486. * // => [2, 0]
  61487. */
  61488. function propertyOf(object) {
  61489. return function(path) {
  61490. return object == null ? undefined : baseGet(object, path);
  61491. };
  61492. }
  61493. /**
  61494. * Creates an array of numbers (positive and/or negative) progressing from
  61495. * `start` up to, but not including, `end`. A step of `-1` is used if a negative
  61496. * `start` is specified without an `end` or `step`. If `end` is not specified,
  61497. * it's set to `start` with `start` then set to `0`.
  61498. *
  61499. * **Note:** JavaScript follows the IEEE-754 standard for resolving
  61500. * floating-point values which can produce unexpected results.
  61501. *
  61502. * @static
  61503. * @since 0.1.0
  61504. * @memberOf _
  61505. * @category Util
  61506. * @param {number} [start=0] The start of the range.
  61507. * @param {number} end The end of the range.
  61508. * @param {number} [step=1] The value to increment or decrement by.
  61509. * @returns {Array} Returns the range of numbers.
  61510. * @see _.inRange, _.rangeRight
  61511. * @example
  61512. *
  61513. * _.range(4);
  61514. * // => [0, 1, 2, 3]
  61515. *
  61516. * _.range(-4);
  61517. * // => [0, -1, -2, -3]
  61518. *
  61519. * _.range(1, 5);
  61520. * // => [1, 2, 3, 4]
  61521. *
  61522. * _.range(0, 20, 5);
  61523. * // => [0, 5, 10, 15]
  61524. *
  61525. * _.range(0, -4, -1);
  61526. * // => [0, -1, -2, -3]
  61527. *
  61528. * _.range(1, 4, 0);
  61529. * // => [1, 1, 1]
  61530. *
  61531. * _.range(0);
  61532. * // => []
  61533. */
  61534. var range = createRange();
  61535. /**
  61536. * This method is like `_.range` except that it populates values in
  61537. * descending order.
  61538. *
  61539. * @static
  61540. * @memberOf _
  61541. * @since 4.0.0
  61542. * @category Util
  61543. * @param {number} [start=0] The start of the range.
  61544. * @param {number} end The end of the range.
  61545. * @param {number} [step=1] The value to increment or decrement by.
  61546. * @returns {Array} Returns the range of numbers.
  61547. * @see _.inRange, _.range
  61548. * @example
  61549. *
  61550. * _.rangeRight(4);
  61551. * // => [3, 2, 1, 0]
  61552. *
  61553. * _.rangeRight(-4);
  61554. * // => [-3, -2, -1, 0]
  61555. *
  61556. * _.rangeRight(1, 5);
  61557. * // => [4, 3, 2, 1]
  61558. *
  61559. * _.rangeRight(0, 20, 5);
  61560. * // => [15, 10, 5, 0]
  61561. *
  61562. * _.rangeRight(0, -4, -1);
  61563. * // => [-3, -2, -1, 0]
  61564. *
  61565. * _.rangeRight(1, 4, 0);
  61566. * // => [1, 1, 1]
  61567. *
  61568. * _.rangeRight(0);
  61569. * // => []
  61570. */
  61571. var rangeRight = createRange(true);
  61572. /**
  61573. * This method returns a new empty array.
  61574. *
  61575. * @static
  61576. * @memberOf _
  61577. * @since 4.13.0
  61578. * @category Util
  61579. * @returns {Array} Returns the new empty array.
  61580. * @example
  61581. *
  61582. * var arrays = _.times(2, _.stubArray);
  61583. *
  61584. * console.log(arrays);
  61585. * // => [[], []]
  61586. *
  61587. * console.log(arrays[0] === arrays[1]);
  61588. * // => false
  61589. */
  61590. function stubArray() {
  61591. return [];
  61592. }
  61593. /**
  61594. * This method returns `false`.
  61595. *
  61596. * @static
  61597. * @memberOf _
  61598. * @since 4.13.0
  61599. * @category Util
  61600. * @returns {boolean} Returns `false`.
  61601. * @example
  61602. *
  61603. * _.times(2, _.stubFalse);
  61604. * // => [false, false]
  61605. */
  61606. function stubFalse() {
  61607. return false;
  61608. }
  61609. /**
  61610. * This method returns a new empty object.
  61611. *
  61612. * @static
  61613. * @memberOf _
  61614. * @since 4.13.0
  61615. * @category Util
  61616. * @returns {Object} Returns the new empty object.
  61617. * @example
  61618. *
  61619. * var objects = _.times(2, _.stubObject);
  61620. *
  61621. * console.log(objects);
  61622. * // => [{}, {}]
  61623. *
  61624. * console.log(objects[0] === objects[1]);
  61625. * // => false
  61626. */
  61627. function stubObject() {
  61628. return {};
  61629. }
  61630. /**
  61631. * This method returns an empty string.
  61632. *
  61633. * @static
  61634. * @memberOf _
  61635. * @since 4.13.0
  61636. * @category Util
  61637. * @returns {string} Returns the empty string.
  61638. * @example
  61639. *
  61640. * _.times(2, _.stubString);
  61641. * // => ['', '']
  61642. */
  61643. function stubString() {
  61644. return '';
  61645. }
  61646. /**
  61647. * This method returns `true`.
  61648. *
  61649. * @static
  61650. * @memberOf _
  61651. * @since 4.13.0
  61652. * @category Util
  61653. * @returns {boolean} Returns `true`.
  61654. * @example
  61655. *
  61656. * _.times(2, _.stubTrue);
  61657. * // => [true, true]
  61658. */
  61659. function stubTrue() {
  61660. return true;
  61661. }
  61662. /**
  61663. * Invokes the iteratee `n` times, returning an array of the results of
  61664. * each invocation. The iteratee is invoked with one argument; (index).
  61665. *
  61666. * @static
  61667. * @since 0.1.0
  61668. * @memberOf _
  61669. * @category Util
  61670. * @param {number} n The number of times to invoke `iteratee`.
  61671. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  61672. * @returns {Array} Returns the array of results.
  61673. * @example
  61674. *
  61675. * _.times(3, String);
  61676. * // => ['0', '1', '2']
  61677. *
  61678. * _.times(4, _.constant(0));
  61679. * // => [0, 0, 0, 0]
  61680. */
  61681. function times(n, iteratee) {
  61682. n = toInteger(n);
  61683. if (n < 1 || n > MAX_SAFE_INTEGER) {
  61684. return [];
  61685. }
  61686. var index = MAX_ARRAY_LENGTH,
  61687. length = nativeMin(n, MAX_ARRAY_LENGTH);
  61688. iteratee = getIteratee(iteratee);
  61689. n -= MAX_ARRAY_LENGTH;
  61690. var result = baseTimes(length, iteratee);
  61691. while (++index < n) {
  61692. iteratee(index);
  61693. }
  61694. return result;
  61695. }
  61696. /**
  61697. * Converts `value` to a property path array.
  61698. *
  61699. * @static
  61700. * @memberOf _
  61701. * @since 4.0.0
  61702. * @category Util
  61703. * @param {*} value The value to convert.
  61704. * @returns {Array} Returns the new property path array.
  61705. * @example
  61706. *
  61707. * _.toPath('a.b.c');
  61708. * // => ['a', 'b', 'c']
  61709. *
  61710. * _.toPath('a[0].b.c');
  61711. * // => ['a', '0', 'b', 'c']
  61712. */
  61713. function toPath(value) {
  61714. if (isArray(value)) {
  61715. return arrayMap(value, toKey);
  61716. }
  61717. return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
  61718. }
  61719. /**
  61720. * Generates a unique ID. If `prefix` is given, the ID is appended to it.
  61721. *
  61722. * @static
  61723. * @since 0.1.0
  61724. * @memberOf _
  61725. * @category Util
  61726. * @param {string} [prefix=''] The value to prefix the ID with.
  61727. * @returns {string} Returns the unique ID.
  61728. * @example
  61729. *
  61730. * _.uniqueId('contact_');
  61731. * // => 'contact_104'
  61732. *
  61733. * _.uniqueId();
  61734. * // => '105'
  61735. */
  61736. function uniqueId(prefix) {
  61737. var id = ++idCounter;
  61738. return toString(prefix) + id;
  61739. }
  61740. /*------------------------------------------------------------------------*/
  61741. /**
  61742. * Adds two numbers.
  61743. *
  61744. * @static
  61745. * @memberOf _
  61746. * @since 3.4.0
  61747. * @category Math
  61748. * @param {number} augend The first number in an addition.
  61749. * @param {number} addend The second number in an addition.
  61750. * @returns {number} Returns the total.
  61751. * @example
  61752. *
  61753. * _.add(6, 4);
  61754. * // => 10
  61755. */
  61756. var add = createMathOperation(function(augend, addend) {
  61757. return augend + addend;
  61758. }, 0);
  61759. /**
  61760. * Computes `number` rounded up to `precision`.
  61761. *
  61762. * @static
  61763. * @memberOf _
  61764. * @since 3.10.0
  61765. * @category Math
  61766. * @param {number} number The number to round up.
  61767. * @param {number} [precision=0] The precision to round up to.
  61768. * @returns {number} Returns the rounded up number.
  61769. * @example
  61770. *
  61771. * _.ceil(4.006);
  61772. * // => 5
  61773. *
  61774. * _.ceil(6.004, 2);
  61775. * // => 6.01
  61776. *
  61777. * _.ceil(6040, -2);
  61778. * // => 6100
  61779. */
  61780. var ceil = createRound('ceil');
  61781. /**
  61782. * Divide two numbers.
  61783. *
  61784. * @static
  61785. * @memberOf _
  61786. * @since 4.7.0
  61787. * @category Math
  61788. * @param {number} dividend The first number in a division.
  61789. * @param {number} divisor The second number in a division.
  61790. * @returns {number} Returns the quotient.
  61791. * @example
  61792. *
  61793. * _.divide(6, 4);
  61794. * // => 1.5
  61795. */
  61796. var divide = createMathOperation(function(dividend, divisor) {
  61797. return dividend / divisor;
  61798. }, 1);
  61799. /**
  61800. * Computes `number` rounded down to `precision`.
  61801. *
  61802. * @static
  61803. * @memberOf _
  61804. * @since 3.10.0
  61805. * @category Math
  61806. * @param {number} number The number to round down.
  61807. * @param {number} [precision=0] The precision to round down to.
  61808. * @returns {number} Returns the rounded down number.
  61809. * @example
  61810. *
  61811. * _.floor(4.006);
  61812. * // => 4
  61813. *
  61814. * _.floor(0.046, 2);
  61815. * // => 0.04
  61816. *
  61817. * _.floor(4060, -2);
  61818. * // => 4000
  61819. */
  61820. var floor = createRound('floor');
  61821. /**
  61822. * Computes the maximum value of `array`. If `array` is empty or falsey,
  61823. * `undefined` is returned.
  61824. *
  61825. * @static
  61826. * @since 0.1.0
  61827. * @memberOf _
  61828. * @category Math
  61829. * @param {Array} array The array to iterate over.
  61830. * @returns {*} Returns the maximum value.
  61831. * @example
  61832. *
  61833. * _.max([4, 2, 8, 6]);
  61834. * // => 8
  61835. *
  61836. * _.max([]);
  61837. * // => undefined
  61838. */
  61839. function max(array) {
  61840. return (array && array.length)
  61841. ? baseExtremum(array, identity, baseGt)
  61842. : undefined;
  61843. }
  61844. /**
  61845. * This method is like `_.max` except that it accepts `iteratee` which is
  61846. * invoked for each element in `array` to generate the criterion by which
  61847. * the value is ranked. The iteratee is invoked with one argument: (value).
  61848. *
  61849. * @static
  61850. * @memberOf _
  61851. * @since 4.0.0
  61852. * @category Math
  61853. * @param {Array} array The array to iterate over.
  61854. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  61855. * @returns {*} Returns the maximum value.
  61856. * @example
  61857. *
  61858. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  61859. *
  61860. * _.maxBy(objects, function(o) { return o.n; });
  61861. * // => { 'n': 2 }
  61862. *
  61863. * // The `_.property` iteratee shorthand.
  61864. * _.maxBy(objects, 'n');
  61865. * // => { 'n': 2 }
  61866. */
  61867. function maxBy(array, iteratee) {
  61868. return (array && array.length)
  61869. ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
  61870. : undefined;
  61871. }
  61872. /**
  61873. * Computes the mean of the values in `array`.
  61874. *
  61875. * @static
  61876. * @memberOf _
  61877. * @since 4.0.0
  61878. * @category Math
  61879. * @param {Array} array The array to iterate over.
  61880. * @returns {number} Returns the mean.
  61881. * @example
  61882. *
  61883. * _.mean([4, 2, 8, 6]);
  61884. * // => 5
  61885. */
  61886. function mean(array) {
  61887. return baseMean(array, identity);
  61888. }
  61889. /**
  61890. * This method is like `_.mean` except that it accepts `iteratee` which is
  61891. * invoked for each element in `array` to generate the value to be averaged.
  61892. * The iteratee is invoked with one argument: (value).
  61893. *
  61894. * @static
  61895. * @memberOf _
  61896. * @since 4.7.0
  61897. * @category Math
  61898. * @param {Array} array The array to iterate over.
  61899. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  61900. * @returns {number} Returns the mean.
  61901. * @example
  61902. *
  61903. * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
  61904. *
  61905. * _.meanBy(objects, function(o) { return o.n; });
  61906. * // => 5
  61907. *
  61908. * // The `_.property` iteratee shorthand.
  61909. * _.meanBy(objects, 'n');
  61910. * // => 5
  61911. */
  61912. function meanBy(array, iteratee) {
  61913. return baseMean(array, getIteratee(iteratee, 2));
  61914. }
  61915. /**
  61916. * Computes the minimum value of `array`. If `array` is empty or falsey,
  61917. * `undefined` is returned.
  61918. *
  61919. * @static
  61920. * @since 0.1.0
  61921. * @memberOf _
  61922. * @category Math
  61923. * @param {Array} array The array to iterate over.
  61924. * @returns {*} Returns the minimum value.
  61925. * @example
  61926. *
  61927. * _.min([4, 2, 8, 6]);
  61928. * // => 2
  61929. *
  61930. * _.min([]);
  61931. * // => undefined
  61932. */
  61933. function min(array) {
  61934. return (array && array.length)
  61935. ? baseExtremum(array, identity, baseLt)
  61936. : undefined;
  61937. }
  61938. /**
  61939. * This method is like `_.min` except that it accepts `iteratee` which is
  61940. * invoked for each element in `array` to generate the criterion by which
  61941. * the value is ranked. The iteratee is invoked with one argument: (value).
  61942. *
  61943. * @static
  61944. * @memberOf _
  61945. * @since 4.0.0
  61946. * @category Math
  61947. * @param {Array} array The array to iterate over.
  61948. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  61949. * @returns {*} Returns the minimum value.
  61950. * @example
  61951. *
  61952. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  61953. *
  61954. * _.minBy(objects, function(o) { return o.n; });
  61955. * // => { 'n': 1 }
  61956. *
  61957. * // The `_.property` iteratee shorthand.
  61958. * _.minBy(objects, 'n');
  61959. * // => { 'n': 1 }
  61960. */
  61961. function minBy(array, iteratee) {
  61962. return (array && array.length)
  61963. ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
  61964. : undefined;
  61965. }
  61966. /**
  61967. * Multiply two numbers.
  61968. *
  61969. * @static
  61970. * @memberOf _
  61971. * @since 4.7.0
  61972. * @category Math
  61973. * @param {number} multiplier The first number in a multiplication.
  61974. * @param {number} multiplicand The second number in a multiplication.
  61975. * @returns {number} Returns the product.
  61976. * @example
  61977. *
  61978. * _.multiply(6, 4);
  61979. * // => 24
  61980. */
  61981. var multiply = createMathOperation(function(multiplier, multiplicand) {
  61982. return multiplier * multiplicand;
  61983. }, 1);
  61984. /**
  61985. * Computes `number` rounded to `precision`.
  61986. *
  61987. * @static
  61988. * @memberOf _
  61989. * @since 3.10.0
  61990. * @category Math
  61991. * @param {number} number The number to round.
  61992. * @param {number} [precision=0] The precision to round to.
  61993. * @returns {number} Returns the rounded number.
  61994. * @example
  61995. *
  61996. * _.round(4.006);
  61997. * // => 4
  61998. *
  61999. * _.round(4.006, 2);
  62000. * // => 4.01
  62001. *
  62002. * _.round(4060, -2);
  62003. * // => 4100
  62004. */
  62005. var round = createRound('round');
  62006. /**
  62007. * Subtract two numbers.
  62008. *
  62009. * @static
  62010. * @memberOf _
  62011. * @since 4.0.0
  62012. * @category Math
  62013. * @param {number} minuend The first number in a subtraction.
  62014. * @param {number} subtrahend The second number in a subtraction.
  62015. * @returns {number} Returns the difference.
  62016. * @example
  62017. *
  62018. * _.subtract(6, 4);
  62019. * // => 2
  62020. */
  62021. var subtract = createMathOperation(function(minuend, subtrahend) {
  62022. return minuend - subtrahend;
  62023. }, 0);
  62024. /**
  62025. * Computes the sum of the values in `array`.
  62026. *
  62027. * @static
  62028. * @memberOf _
  62029. * @since 3.4.0
  62030. * @category Math
  62031. * @param {Array} array The array to iterate over.
  62032. * @returns {number} Returns the sum.
  62033. * @example
  62034. *
  62035. * _.sum([4, 2, 8, 6]);
  62036. * // => 20
  62037. */
  62038. function sum(array) {
  62039. return (array && array.length)
  62040. ? baseSum(array, identity)
  62041. : 0;
  62042. }
  62043. /**
  62044. * This method is like `_.sum` except that it accepts `iteratee` which is
  62045. * invoked for each element in `array` to generate the value to be summed.
  62046. * The iteratee is invoked with one argument: (value).
  62047. *
  62048. * @static
  62049. * @memberOf _
  62050. * @since 4.0.0
  62051. * @category Math
  62052. * @param {Array} array The array to iterate over.
  62053. * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
  62054. * @returns {number} Returns the sum.
  62055. * @example
  62056. *
  62057. * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
  62058. *
  62059. * _.sumBy(objects, function(o) { return o.n; });
  62060. * // => 20
  62061. *
  62062. * // The `_.property` iteratee shorthand.
  62063. * _.sumBy(objects, 'n');
  62064. * // => 20
  62065. */
  62066. function sumBy(array, iteratee) {
  62067. return (array && array.length)
  62068. ? baseSum(array, getIteratee(iteratee, 2))
  62069. : 0;
  62070. }
  62071. /*------------------------------------------------------------------------*/
  62072. // Add methods that return wrapped values in chain sequences.
  62073. lodash.after = after;
  62074. lodash.ary = ary;
  62075. lodash.assign = assign;
  62076. lodash.assignIn = assignIn;
  62077. lodash.assignInWith = assignInWith;
  62078. lodash.assignWith = assignWith;
  62079. lodash.at = at;
  62080. lodash.before = before;
  62081. lodash.bind = bind;
  62082. lodash.bindAll = bindAll;
  62083. lodash.bindKey = bindKey;
  62084. lodash.castArray = castArray;
  62085. lodash.chain = chain;
  62086. lodash.chunk = chunk;
  62087. lodash.compact = compact;
  62088. lodash.concat = concat;
  62089. lodash.cond = cond;
  62090. lodash.conforms = conforms;
  62091. lodash.constant = constant;
  62092. lodash.countBy = countBy;
  62093. lodash.create = create;
  62094. lodash.curry = curry;
  62095. lodash.curryRight = curryRight;
  62096. lodash.debounce = debounce;
  62097. lodash.defaults = defaults;
  62098. lodash.defaultsDeep = defaultsDeep;
  62099. lodash.defer = defer;
  62100. lodash.delay = delay;
  62101. lodash.difference = difference;
  62102. lodash.differenceBy = differenceBy;
  62103. lodash.differenceWith = differenceWith;
  62104. lodash.drop = drop;
  62105. lodash.dropRight = dropRight;
  62106. lodash.dropRightWhile = dropRightWhile;
  62107. lodash.dropWhile = dropWhile;
  62108. lodash.fill = fill;
  62109. lodash.filter = filter;
  62110. lodash.flatMap = flatMap;
  62111. lodash.flatMapDeep = flatMapDeep;
  62112. lodash.flatMapDepth = flatMapDepth;
  62113. lodash.flatten = flatten;
  62114. lodash.flattenDeep = flattenDeep;
  62115. lodash.flattenDepth = flattenDepth;
  62116. lodash.flip = flip;
  62117. lodash.flow = flow;
  62118. lodash.flowRight = flowRight;
  62119. lodash.fromPairs = fromPairs;
  62120. lodash.functions = functions;
  62121. lodash.functionsIn = functionsIn;
  62122. lodash.groupBy = groupBy;
  62123. lodash.initial = initial;
  62124. lodash.intersection = intersection;
  62125. lodash.intersectionBy = intersectionBy;
  62126. lodash.intersectionWith = intersectionWith;
  62127. lodash.invert = invert;
  62128. lodash.invertBy = invertBy;
  62129. lodash.invokeMap = invokeMap;
  62130. lodash.iteratee = iteratee;
  62131. lodash.keyBy = keyBy;
  62132. lodash.keys = keys;
  62133. lodash.keysIn = keysIn;
  62134. lodash.map = map;
  62135. lodash.mapKeys = mapKeys;
  62136. lodash.mapValues = mapValues;
  62137. lodash.matches = matches;
  62138. lodash.matchesProperty = matchesProperty;
  62139. lodash.memoize = memoize;
  62140. lodash.merge = merge;
  62141. lodash.mergeWith = mergeWith;
  62142. lodash.method = method;
  62143. lodash.methodOf = methodOf;
  62144. lodash.mixin = mixin;
  62145. lodash.negate = negate;
  62146. lodash.nthArg = nthArg;
  62147. lodash.omit = omit;
  62148. lodash.omitBy = omitBy;
  62149. lodash.once = once;
  62150. lodash.orderBy = orderBy;
  62151. lodash.over = over;
  62152. lodash.overArgs = overArgs;
  62153. lodash.overEvery = overEvery;
  62154. lodash.overSome = overSome;
  62155. lodash.partial = partial;
  62156. lodash.partialRight = partialRight;
  62157. lodash.partition = partition;
  62158. lodash.pick = pick;
  62159. lodash.pickBy = pickBy;
  62160. lodash.property = property;
  62161. lodash.propertyOf = propertyOf;
  62162. lodash.pull = pull;
  62163. lodash.pullAll = pullAll;
  62164. lodash.pullAllBy = pullAllBy;
  62165. lodash.pullAllWith = pullAllWith;
  62166. lodash.pullAt = pullAt;
  62167. lodash.range = range;
  62168. lodash.rangeRight = rangeRight;
  62169. lodash.rearg = rearg;
  62170. lodash.reject = reject;
  62171. lodash.remove = remove;
  62172. lodash.rest = rest;
  62173. lodash.reverse = reverse;
  62174. lodash.sampleSize = sampleSize;
  62175. lodash.set = set;
  62176. lodash.setWith = setWith;
  62177. lodash.shuffle = shuffle;
  62178. lodash.slice = slice;
  62179. lodash.sortBy = sortBy;
  62180. lodash.sortedUniq = sortedUniq;
  62181. lodash.sortedUniqBy = sortedUniqBy;
  62182. lodash.split = split;
  62183. lodash.spread = spread;
  62184. lodash.tail = tail;
  62185. lodash.take = take;
  62186. lodash.takeRight = takeRight;
  62187. lodash.takeRightWhile = takeRightWhile;
  62188. lodash.takeWhile = takeWhile;
  62189. lodash.tap = tap;
  62190. lodash.throttle = throttle;
  62191. lodash.thru = thru;
  62192. lodash.toArray = toArray;
  62193. lodash.toPairs = toPairs;
  62194. lodash.toPairsIn = toPairsIn;
  62195. lodash.toPath = toPath;
  62196. lodash.toPlainObject = toPlainObject;
  62197. lodash.transform = transform;
  62198. lodash.unary = unary;
  62199. lodash.union = union;
  62200. lodash.unionBy = unionBy;
  62201. lodash.unionWith = unionWith;
  62202. lodash.uniq = uniq;
  62203. lodash.uniqBy = uniqBy;
  62204. lodash.uniqWith = uniqWith;
  62205. lodash.unset = unset;
  62206. lodash.unzip = unzip;
  62207. lodash.unzipWith = unzipWith;
  62208. lodash.update = update;
  62209. lodash.updateWith = updateWith;
  62210. lodash.values = values;
  62211. lodash.valuesIn = valuesIn;
  62212. lodash.without = without;
  62213. lodash.words = words;
  62214. lodash.wrap = wrap;
  62215. lodash.xor = xor;
  62216. lodash.xorBy = xorBy;
  62217. lodash.xorWith = xorWith;
  62218. lodash.zip = zip;
  62219. lodash.zipObject = zipObject;
  62220. lodash.zipObjectDeep = zipObjectDeep;
  62221. lodash.zipWith = zipWith;
  62222. // Add aliases.
  62223. lodash.entries = toPairs;
  62224. lodash.entriesIn = toPairsIn;
  62225. lodash.extend = assignIn;
  62226. lodash.extendWith = assignInWith;
  62227. // Add methods to `lodash.prototype`.
  62228. mixin(lodash, lodash);
  62229. /*------------------------------------------------------------------------*/
  62230. // Add methods that return unwrapped values in chain sequences.
  62231. lodash.add = add;
  62232. lodash.attempt = attempt;
  62233. lodash.camelCase = camelCase;
  62234. lodash.capitalize = capitalize;
  62235. lodash.ceil = ceil;
  62236. lodash.clamp = clamp;
  62237. lodash.clone = clone;
  62238. lodash.cloneDeep = cloneDeep;
  62239. lodash.cloneDeepWith = cloneDeepWith;
  62240. lodash.cloneWith = cloneWith;
  62241. lodash.conformsTo = conformsTo;
  62242. lodash.deburr = deburr;
  62243. lodash.defaultTo = defaultTo;
  62244. lodash.divide = divide;
  62245. lodash.endsWith = endsWith;
  62246. lodash.eq = eq;
  62247. lodash.escape = escape;
  62248. lodash.escapeRegExp = escapeRegExp;
  62249. lodash.every = every;
  62250. lodash.find = find;
  62251. lodash.findIndex = findIndex;
  62252. lodash.findKey = findKey;
  62253. lodash.findLast = findLast;
  62254. lodash.findLastIndex = findLastIndex;
  62255. lodash.findLastKey = findLastKey;
  62256. lodash.floor = floor;
  62257. lodash.forEach = forEach;
  62258. lodash.forEachRight = forEachRight;
  62259. lodash.forIn = forIn;
  62260. lodash.forInRight = forInRight;
  62261. lodash.forOwn = forOwn;
  62262. lodash.forOwnRight = forOwnRight;
  62263. lodash.get = get;
  62264. lodash.gt = gt;
  62265. lodash.gte = gte;
  62266. lodash.has = has;
  62267. lodash.hasIn = hasIn;
  62268. lodash.head = head;
  62269. lodash.identity = identity;
  62270. lodash.includes = includes;
  62271. lodash.indexOf = indexOf;
  62272. lodash.inRange = inRange;
  62273. lodash.invoke = invoke;
  62274. lodash.isArguments = isArguments;
  62275. lodash.isArray = isArray;
  62276. lodash.isArrayBuffer = isArrayBuffer;
  62277. lodash.isArrayLike = isArrayLike;
  62278. lodash.isArrayLikeObject = isArrayLikeObject;
  62279. lodash.isBoolean = isBoolean;
  62280. lodash.isBuffer = isBuffer;
  62281. lodash.isDate = isDate;
  62282. lodash.isElement = isElement;
  62283. lodash.isEmpty = isEmpty;
  62284. lodash.isEqual = isEqual;
  62285. lodash.isEqualWith = isEqualWith;
  62286. lodash.isError = isError;
  62287. lodash.isFinite = isFinite;
  62288. lodash.isFunction = isFunction;
  62289. lodash.isInteger = isInteger;
  62290. lodash.isLength = isLength;
  62291. lodash.isMap = isMap;
  62292. lodash.isMatch = isMatch;
  62293. lodash.isMatchWith = isMatchWith;
  62294. lodash.isNaN = isNaN;
  62295. lodash.isNative = isNative;
  62296. lodash.isNil = isNil;
  62297. lodash.isNull = isNull;
  62298. lodash.isNumber = isNumber;
  62299. lodash.isObject = isObject;
  62300. lodash.isObjectLike = isObjectLike;
  62301. lodash.isPlainObject = isPlainObject;
  62302. lodash.isRegExp = isRegExp;
  62303. lodash.isSafeInteger = isSafeInteger;
  62304. lodash.isSet = isSet;
  62305. lodash.isString = isString;
  62306. lodash.isSymbol = isSymbol;
  62307. lodash.isTypedArray = isTypedArray;
  62308. lodash.isUndefined = isUndefined;
  62309. lodash.isWeakMap = isWeakMap;
  62310. lodash.isWeakSet = isWeakSet;
  62311. lodash.join = join;
  62312. lodash.kebabCase = kebabCase;
  62313. lodash.last = last;
  62314. lodash.lastIndexOf = lastIndexOf;
  62315. lodash.lowerCase = lowerCase;
  62316. lodash.lowerFirst = lowerFirst;
  62317. lodash.lt = lt;
  62318. lodash.lte = lte;
  62319. lodash.max = max;
  62320. lodash.maxBy = maxBy;
  62321. lodash.mean = mean;
  62322. lodash.meanBy = meanBy;
  62323. lodash.min = min;
  62324. lodash.minBy = minBy;
  62325. lodash.stubArray = stubArray;
  62326. lodash.stubFalse = stubFalse;
  62327. lodash.stubObject = stubObject;
  62328. lodash.stubString = stubString;
  62329. lodash.stubTrue = stubTrue;
  62330. lodash.multiply = multiply;
  62331. lodash.nth = nth;
  62332. lodash.noConflict = noConflict;
  62333. lodash.noop = noop;
  62334. lodash.now = now;
  62335. lodash.pad = pad;
  62336. lodash.padEnd = padEnd;
  62337. lodash.padStart = padStart;
  62338. lodash.parseInt = parseInt;
  62339. lodash.random = random;
  62340. lodash.reduce = reduce;
  62341. lodash.reduceRight = reduceRight;
  62342. lodash.repeat = repeat;
  62343. lodash.replace = replace;
  62344. lodash.result = result;
  62345. lodash.round = round;
  62346. lodash.runInContext = runInContext;
  62347. lodash.sample = sample;
  62348. lodash.size = size;
  62349. lodash.snakeCase = snakeCase;
  62350. lodash.some = some;
  62351. lodash.sortedIndex = sortedIndex;
  62352. lodash.sortedIndexBy = sortedIndexBy;
  62353. lodash.sortedIndexOf = sortedIndexOf;
  62354. lodash.sortedLastIndex = sortedLastIndex;
  62355. lodash.sortedLastIndexBy = sortedLastIndexBy;
  62356. lodash.sortedLastIndexOf = sortedLastIndexOf;
  62357. lodash.startCase = startCase;
  62358. lodash.startsWith = startsWith;
  62359. lodash.subtract = subtract;
  62360. lodash.sum = sum;
  62361. lodash.sumBy = sumBy;
  62362. lodash.template = template;
  62363. lodash.times = times;
  62364. lodash.toFinite = toFinite;
  62365. lodash.toInteger = toInteger;
  62366. lodash.toLength = toLength;
  62367. lodash.toLower = toLower;
  62368. lodash.toNumber = toNumber;
  62369. lodash.toSafeInteger = toSafeInteger;
  62370. lodash.toString = toString;
  62371. lodash.toUpper = toUpper;
  62372. lodash.trim = trim;
  62373. lodash.trimEnd = trimEnd;
  62374. lodash.trimStart = trimStart;
  62375. lodash.truncate = truncate;
  62376. lodash.unescape = unescape;
  62377. lodash.uniqueId = uniqueId;
  62378. lodash.upperCase = upperCase;
  62379. lodash.upperFirst = upperFirst;
  62380. // Add aliases.
  62381. lodash.each = forEach;
  62382. lodash.eachRight = forEachRight;
  62383. lodash.first = head;
  62384. mixin(lodash, (function() {
  62385. var source = {};
  62386. baseForOwn(lodash, function(func, methodName) {
  62387. if (!hasOwnProperty.call(lodash.prototype, methodName)) {
  62388. source[methodName] = func;
  62389. }
  62390. });
  62391. return source;
  62392. }()), { 'chain': false });
  62393. /*------------------------------------------------------------------------*/
  62394. /**
  62395. * The semantic version number.
  62396. *
  62397. * @static
  62398. * @memberOf _
  62399. * @type {string}
  62400. */
  62401. lodash.VERSION = VERSION;
  62402. // Assign default placeholders.
  62403. arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
  62404. lodash[methodName].placeholder = lodash;
  62405. });
  62406. // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
  62407. arrayEach(['drop', 'take'], function(methodName, index) {
  62408. LazyWrapper.prototype[methodName] = function(n) {
  62409. n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
  62410. var result = (this.__filtered__ && !index)
  62411. ? new LazyWrapper(this)
  62412. : this.clone();
  62413. if (result.__filtered__) {
  62414. result.__takeCount__ = nativeMin(n, result.__takeCount__);
  62415. } else {
  62416. result.__views__.push({
  62417. 'size': nativeMin(n, MAX_ARRAY_LENGTH),
  62418. 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
  62419. });
  62420. }
  62421. return result;
  62422. };
  62423. LazyWrapper.prototype[methodName + 'Right'] = function(n) {
  62424. return this.reverse()[methodName](n).reverse();
  62425. };
  62426. });
  62427. // Add `LazyWrapper` methods that accept an `iteratee` value.
  62428. arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
  62429. var type = index + 1,
  62430. isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
  62431. LazyWrapper.prototype[methodName] = function(iteratee) {
  62432. var result = this.clone();
  62433. result.__iteratees__.push({
  62434. 'iteratee': getIteratee(iteratee, 3),
  62435. 'type': type
  62436. });
  62437. result.__filtered__ = result.__filtered__ || isFilter;
  62438. return result;
  62439. };
  62440. });
  62441. // Add `LazyWrapper` methods for `_.head` and `_.last`.
  62442. arrayEach(['head', 'last'], function(methodName, index) {
  62443. var takeName = 'take' + (index ? 'Right' : '');
  62444. LazyWrapper.prototype[methodName] = function() {
  62445. return this[takeName](1).value()[0];
  62446. };
  62447. });
  62448. // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
  62449. arrayEach(['initial', 'tail'], function(methodName, index) {
  62450. var dropName = 'drop' + (index ? '' : 'Right');
  62451. LazyWrapper.prototype[methodName] = function() {
  62452. return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
  62453. };
  62454. });
  62455. LazyWrapper.prototype.compact = function() {
  62456. return this.filter(identity);
  62457. };
  62458. LazyWrapper.prototype.find = function(predicate) {
  62459. return this.filter(predicate).head();
  62460. };
  62461. LazyWrapper.prototype.findLast = function(predicate) {
  62462. return this.reverse().find(predicate);
  62463. };
  62464. LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
  62465. if (typeof path == 'function') {
  62466. return new LazyWrapper(this);
  62467. }
  62468. return this.map(function(value) {
  62469. return baseInvoke(value, path, args);
  62470. });
  62471. });
  62472. LazyWrapper.prototype.reject = function(predicate) {
  62473. return this.filter(negate(getIteratee(predicate)));
  62474. };
  62475. LazyWrapper.prototype.slice = function(start, end) {
  62476. start = toInteger(start);
  62477. var result = this;
  62478. if (result.__filtered__ && (start > 0 || end < 0)) {
  62479. return new LazyWrapper(result);
  62480. }
  62481. if (start < 0) {
  62482. result = result.takeRight(-start);
  62483. } else if (start) {
  62484. result = result.drop(start);
  62485. }
  62486. if (end !== undefined) {
  62487. end = toInteger(end);
  62488. result = end < 0 ? result.dropRight(-end) : result.take(end - start);
  62489. }
  62490. return result;
  62491. };
  62492. LazyWrapper.prototype.takeRightWhile = function(predicate) {
  62493. return this.reverse().takeWhile(predicate).reverse();
  62494. };
  62495. LazyWrapper.prototype.toArray = function() {
  62496. return this.take(MAX_ARRAY_LENGTH);
  62497. };
  62498. // Add `LazyWrapper` methods to `lodash.prototype`.
  62499. baseForOwn(LazyWrapper.prototype, function(func, methodName) {
  62500. var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
  62501. isTaker = /^(?:head|last)$/.test(methodName),
  62502. lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
  62503. retUnwrapped = isTaker || /^find/.test(methodName);
  62504. if (!lodashFunc) {
  62505. return;
  62506. }
  62507. lodash.prototype[methodName] = function() {
  62508. var value = this.__wrapped__,
  62509. args = isTaker ? [1] : arguments,
  62510. isLazy = value instanceof LazyWrapper,
  62511. iteratee = args[0],
  62512. useLazy = isLazy || isArray(value);
  62513. var interceptor = function(value) {
  62514. var result = lodashFunc.apply(lodash, arrayPush([value], args));
  62515. return (isTaker && chainAll) ? result[0] : result;
  62516. };
  62517. if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
  62518. // Avoid lazy use if the iteratee has a "length" value other than `1`.
  62519. isLazy = useLazy = false;
  62520. }
  62521. var chainAll = this.__chain__,
  62522. isHybrid = !!this.__actions__.length,
  62523. isUnwrapped = retUnwrapped && !chainAll,
  62524. onlyLazy = isLazy && !isHybrid;
  62525. if (!retUnwrapped && useLazy) {
  62526. value = onlyLazy ? value : new LazyWrapper(this);
  62527. var result = func.apply(value, args);
  62528. result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
  62529. return new LodashWrapper(result, chainAll);
  62530. }
  62531. if (isUnwrapped && onlyLazy) {
  62532. return func.apply(this, args);
  62533. }
  62534. result = this.thru(interceptor);
  62535. return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
  62536. };
  62537. });
  62538. // Add `Array` methods to `lodash.prototype`.
  62539. arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
  62540. var func = arrayProto[methodName],
  62541. chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
  62542. retUnwrapped = /^(?:pop|shift)$/.test(methodName);
  62543. lodash.prototype[methodName] = function() {
  62544. var args = arguments;
  62545. if (retUnwrapped && !this.__chain__) {
  62546. var value = this.value();
  62547. return func.apply(isArray(value) ? value : [], args);
  62548. }
  62549. return this[chainName](function(value) {
  62550. return func.apply(isArray(value) ? value : [], args);
  62551. });
  62552. };
  62553. });
  62554. // Map minified method names to their real names.
  62555. baseForOwn(LazyWrapper.prototype, function(func, methodName) {
  62556. var lodashFunc = lodash[methodName];
  62557. if (lodashFunc) {
  62558. var key = lodashFunc.name + '';
  62559. if (!hasOwnProperty.call(realNames, key)) {
  62560. realNames[key] = [];
  62561. }
  62562. realNames[key].push({ 'name': methodName, 'func': lodashFunc });
  62563. }
  62564. });
  62565. realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
  62566. 'name': 'wrapper',
  62567. 'func': undefined
  62568. }];
  62569. // Add methods to `LazyWrapper`.
  62570. LazyWrapper.prototype.clone = lazyClone;
  62571. LazyWrapper.prototype.reverse = lazyReverse;
  62572. LazyWrapper.prototype.value = lazyValue;
  62573. // Add chain sequence methods to the `lodash` wrapper.
  62574. lodash.prototype.at = wrapperAt;
  62575. lodash.prototype.chain = wrapperChain;
  62576. lodash.prototype.commit = wrapperCommit;
  62577. lodash.prototype.next = wrapperNext;
  62578. lodash.prototype.plant = wrapperPlant;
  62579. lodash.prototype.reverse = wrapperReverse;
  62580. lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
  62581. // Add lazy aliases.
  62582. lodash.prototype.first = lodash.prototype.head;
  62583. if (symIterator) {
  62584. lodash.prototype[symIterator] = wrapperToIterator;
  62585. }
  62586. return lodash;
  62587. });
  62588. /*--------------------------------------------------------------------------*/
  62589. // Export lodash.
  62590. var _ = runInContext();
  62591. // Some AMD build optimizers, like r.js, check for condition patterns like:
  62592. if (true) {
  62593. // Expose Lodash on the global object to prevent errors when Lodash is
  62594. // loaded by a script tag in the presence of an AMD loader.
  62595. // See http://requirejs.org/docs/errors.html#mismatch for more details.
  62596. // Use `_.noConflict` to remove Lodash from the global object.
  62597. root._ = _;
  62598. // Define as an anonymous module so, through path mapping, it can be
  62599. // referenced as the "underscore" module.
  62600. !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
  62601. return _;
  62602. }).call(exports, __webpack_require__, exports, module),
  62603. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  62604. }
  62605. // Check for `exports` after `define` in case a build optimizer adds it.
  62606. else {}
  62607. }.call(this));
  62608. /***/ }),
  62609. /***/ 35161:
  62610. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  62611. var arrayMap = __webpack_require__(29932),
  62612. baseIteratee = __webpack_require__(67206),
  62613. baseMap = __webpack_require__(69199),
  62614. isArray = __webpack_require__(1469);
  62615. /**
  62616. * Creates an array of values by running each element in `collection` thru
  62617. * `iteratee`. The iteratee is invoked with three arguments:
  62618. * (value, index|key, collection).
  62619. *
  62620. * Many lodash methods are guarded to work as iteratees for methods like
  62621. * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
  62622. *
  62623. * The guarded methods are:
  62624. * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
  62625. * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
  62626. * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
  62627. * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
  62628. *
  62629. * @static
  62630. * @memberOf _
  62631. * @since 0.1.0
  62632. * @category Collection
  62633. * @param {Array|Object} collection The collection to iterate over.
  62634. * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  62635. * @returns {Array} Returns the new mapped array.
  62636. * @example
  62637. *
  62638. * function square(n) {
  62639. * return n * n;
  62640. * }
  62641. *
  62642. * _.map([4, 8], square);
  62643. * // => [16, 64]
  62644. *
  62645. * _.map({ 'a': 4, 'b': 8 }, square);
  62646. * // => [16, 64] (iteration order is not guaranteed)
  62647. *
  62648. * var users = [
  62649. * { 'user': 'barney' },
  62650. * { 'user': 'fred' }
  62651. * ];
  62652. *
  62653. * // The `_.property` iteratee shorthand.
  62654. * _.map(users, 'user');
  62655. * // => ['barney', 'fred']
  62656. */
  62657. function map(collection, iteratee) {
  62658. var func = isArray(collection) ? arrayMap : baseMap;
  62659. return func(collection, baseIteratee(iteratee, 3));
  62660. }
  62661. module.exports = map;
  62662. /***/ }),
  62663. /***/ 88306:
  62664. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  62665. var MapCache = __webpack_require__(83369);
  62666. /** Error message constants. */
  62667. var FUNC_ERROR_TEXT = 'Expected a function';
  62668. /**
  62669. * Creates a function that memoizes the result of `func`. If `resolver` is
  62670. * provided, it determines the cache key for storing the result based on the
  62671. * arguments provided to the memoized function. By default, the first argument
  62672. * provided to the memoized function is used as the map cache key. The `func`
  62673. * is invoked with the `this` binding of the memoized function.
  62674. *
  62675. * **Note:** The cache is exposed as the `cache` property on the memoized
  62676. * function. Its creation may be customized by replacing the `_.memoize.Cache`
  62677. * constructor with one whose instances implement the
  62678. * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
  62679. * method interface of `clear`, `delete`, `get`, `has`, and `set`.
  62680. *
  62681. * @static
  62682. * @memberOf _
  62683. * @since 0.1.0
  62684. * @category Function
  62685. * @param {Function} func The function to have its output memoized.
  62686. * @param {Function} [resolver] The function to resolve the cache key.
  62687. * @returns {Function} Returns the new memoized function.
  62688. * @example
  62689. *
  62690. * var object = { 'a': 1, 'b': 2 };
  62691. * var other = { 'c': 3, 'd': 4 };
  62692. *
  62693. * var values = _.memoize(_.values);
  62694. * values(object);
  62695. * // => [1, 2]
  62696. *
  62697. * values(other);
  62698. * // => [3, 4]
  62699. *
  62700. * object.a = 2;
  62701. * values(object);
  62702. * // => [1, 2]
  62703. *
  62704. * // Modify the result cache.
  62705. * values.cache.set(object, ['a', 'b']);
  62706. * values(object);
  62707. * // => ['a', 'b']
  62708. *
  62709. * // Replace `_.memoize.Cache`.
  62710. * _.memoize.Cache = WeakMap;
  62711. */
  62712. function memoize(func, resolver) {
  62713. if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
  62714. throw new TypeError(FUNC_ERROR_TEXT);
  62715. }
  62716. var memoized = function() {
  62717. var args = arguments,
  62718. key = resolver ? resolver.apply(this, args) : args[0],
  62719. cache = memoized.cache;
  62720. if (cache.has(key)) {
  62721. return cache.get(key);
  62722. }
  62723. var result = func.apply(this, args);
  62724. memoized.cache = cache.set(key, result) || cache;
  62725. return result;
  62726. };
  62727. memoized.cache = new (memoize.Cache || MapCache);
  62728. return memoized;
  62729. }
  62730. // Expose `MapCache`.
  62731. memoize.Cache = MapCache;
  62732. module.exports = memoize;
  62733. /***/ }),
  62734. /***/ 94885:
  62735. /***/ ((module) => {
  62736. /** Error message constants. */
  62737. var FUNC_ERROR_TEXT = 'Expected a function';
  62738. /**
  62739. * Creates a function that negates the result of the predicate `func`. The
  62740. * `func` predicate is invoked with the `this` binding and arguments of the
  62741. * created function.
  62742. *
  62743. * @static
  62744. * @memberOf _
  62745. * @since 3.0.0
  62746. * @category Function
  62747. * @param {Function} predicate The predicate to negate.
  62748. * @returns {Function} Returns the new negated function.
  62749. * @example
  62750. *
  62751. * function isEven(n) {
  62752. * return n % 2 == 0;
  62753. * }
  62754. *
  62755. * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
  62756. * // => [1, 3, 5]
  62757. */
  62758. function negate(predicate) {
  62759. if (typeof predicate != 'function') {
  62760. throw new TypeError(FUNC_ERROR_TEXT);
  62761. }
  62762. return function() {
  62763. var args = arguments;
  62764. switch (args.length) {
  62765. case 0: return !predicate.call(this);
  62766. case 1: return !predicate.call(this, args[0]);
  62767. case 2: return !predicate.call(this, args[0], args[1]);
  62768. case 3: return !predicate.call(this, args[0], args[1], args[2]);
  62769. }
  62770. return !predicate.apply(this, args);
  62771. };
  62772. }
  62773. module.exports = negate;
  62774. /***/ }),
  62775. /***/ 14176:
  62776. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  62777. var baseIteratee = __webpack_require__(67206),
  62778. negate = __webpack_require__(94885),
  62779. pickBy = __webpack_require__(35937);
  62780. /**
  62781. * The opposite of `_.pickBy`; this method creates an object composed of
  62782. * the own and inherited enumerable string keyed properties of `object` that
  62783. * `predicate` doesn't return truthy for. The predicate is invoked with two
  62784. * arguments: (value, key).
  62785. *
  62786. * @static
  62787. * @memberOf _
  62788. * @since 4.0.0
  62789. * @category Object
  62790. * @param {Object} object The source object.
  62791. * @param {Function} [predicate=_.identity] The function invoked per property.
  62792. * @returns {Object} Returns the new object.
  62793. * @example
  62794. *
  62795. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  62796. *
  62797. * _.omitBy(object, _.isNumber);
  62798. * // => { 'b': '2' }
  62799. */
  62800. function omitBy(object, predicate) {
  62801. return pickBy(object, negate(baseIteratee(predicate)));
  62802. }
  62803. module.exports = omitBy;
  62804. /***/ }),
  62805. /***/ 35937:
  62806. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  62807. var arrayMap = __webpack_require__(29932),
  62808. baseIteratee = __webpack_require__(67206),
  62809. basePickBy = __webpack_require__(63012),
  62810. getAllKeysIn = __webpack_require__(46904);
  62811. /**
  62812. * Creates an object composed of the `object` properties `predicate` returns
  62813. * truthy for. The predicate is invoked with two arguments: (value, key).
  62814. *
  62815. * @static
  62816. * @memberOf _
  62817. * @since 4.0.0
  62818. * @category Object
  62819. * @param {Object} object The source object.
  62820. * @param {Function} [predicate=_.identity] The function invoked per property.
  62821. * @returns {Object} Returns the new object.
  62822. * @example
  62823. *
  62824. * var object = { 'a': 1, 'b': '2', 'c': 3 };
  62825. *
  62826. * _.pickBy(object, _.isNumber);
  62827. * // => { 'a': 1, 'c': 3 }
  62828. */
  62829. function pickBy(object, predicate) {
  62830. if (object == null) {
  62831. return {};
  62832. }
  62833. var props = arrayMap(getAllKeysIn(object), function(prop) {
  62834. return [prop];
  62835. });
  62836. predicate = baseIteratee(predicate);
  62837. return basePickBy(object, props, function(value, path) {
  62838. return predicate(value, path[0]);
  62839. });
  62840. }
  62841. module.exports = pickBy;
  62842. /***/ }),
  62843. /***/ 39601:
  62844. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  62845. var baseProperty = __webpack_require__(40371),
  62846. basePropertyDeep = __webpack_require__(79152),
  62847. isKey = __webpack_require__(15403),
  62848. toKey = __webpack_require__(40327);
  62849. /**
  62850. * Creates a function that returns the value at `path` of a given object.
  62851. *
  62852. * @static
  62853. * @memberOf _
  62854. * @since 2.4.0
  62855. * @category Util
  62856. * @param {Array|string} path The path of the property to get.
  62857. * @returns {Function} Returns the new accessor function.
  62858. * @example
  62859. *
  62860. * var objects = [
  62861. * { 'a': { 'b': 2 } },
  62862. * { 'a': { 'b': 1 } }
  62863. * ];
  62864. *
  62865. * _.map(objects, _.property('a.b'));
  62866. * // => [2, 1]
  62867. *
  62868. * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
  62869. * // => [1, 2]
  62870. */
  62871. function property(path) {
  62872. return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
  62873. }
  62874. module.exports = property;
  62875. /***/ }),
  62876. /***/ 70479:
  62877. /***/ ((module) => {
  62878. /**
  62879. * This method returns a new empty array.
  62880. *
  62881. * @static
  62882. * @memberOf _
  62883. * @since 4.13.0
  62884. * @category Util
  62885. * @returns {Array} Returns the new empty array.
  62886. * @example
  62887. *
  62888. * var arrays = _.times(2, _.stubArray);
  62889. *
  62890. * console.log(arrays);
  62891. * // => [[], []]
  62892. *
  62893. * console.log(arrays[0] === arrays[1]);
  62894. * // => false
  62895. */
  62896. function stubArray() {
  62897. return [];
  62898. }
  62899. module.exports = stubArray;
  62900. /***/ }),
  62901. /***/ 95062:
  62902. /***/ ((module) => {
  62903. /**
  62904. * This method returns `false`.
  62905. *
  62906. * @static
  62907. * @memberOf _
  62908. * @since 4.13.0
  62909. * @category Util
  62910. * @returns {boolean} Returns `false`.
  62911. * @example
  62912. *
  62913. * _.times(2, _.stubFalse);
  62914. * // => [false, false]
  62915. */
  62916. function stubFalse() {
  62917. return false;
  62918. }
  62919. module.exports = stubFalse;
  62920. /***/ }),
  62921. /***/ 79833:
  62922. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  62923. var baseToString = __webpack_require__(80531);
  62924. /**
  62925. * Converts `value` to a string. An empty string is returned for `null`
  62926. * and `undefined` values. The sign of `-0` is preserved.
  62927. *
  62928. * @static
  62929. * @memberOf _
  62930. * @since 4.0.0
  62931. * @category Lang
  62932. * @param {*} value The value to convert.
  62933. * @returns {string} Returns the converted string.
  62934. * @example
  62935. *
  62936. * _.toString(null);
  62937. * // => ''
  62938. *
  62939. * _.toString(-0);
  62940. * // => '-0'
  62941. *
  62942. * _.toString([1, 2, 3]);
  62943. * // => '1,2,3'
  62944. */
  62945. function toString(value) {
  62946. return value == null ? '' : baseToString(value);
  62947. }
  62948. module.exports = toString;
  62949. /***/ }),
  62950. /***/ 62318:
  62951. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  62952. "use strict";
  62953. var inherits = __webpack_require__(35717)
  62954. var HashBase = __webpack_require__(3349)
  62955. var Buffer = (__webpack_require__(89509).Buffer)
  62956. var ARRAY16 = new Array(16)
  62957. function MD5 () {
  62958. HashBase.call(this, 64)
  62959. // state
  62960. this._a = 0x67452301
  62961. this._b = 0xefcdab89
  62962. this._c = 0x98badcfe
  62963. this._d = 0x10325476
  62964. }
  62965. inherits(MD5, HashBase)
  62966. MD5.prototype._update = function () {
  62967. var M = ARRAY16
  62968. for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
  62969. var a = this._a
  62970. var b = this._b
  62971. var c = this._c
  62972. var d = this._d
  62973. a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
  62974. d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
  62975. c = fnF(c, d, a, b, M[2], 0x242070db, 17)
  62976. b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
  62977. a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
  62978. d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
  62979. c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
  62980. b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
  62981. a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
  62982. d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
  62983. c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
  62984. b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
  62985. a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
  62986. d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
  62987. c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
  62988. b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
  62989. a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
  62990. d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
  62991. c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
  62992. b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
  62993. a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
  62994. d = fnG(d, a, b, c, M[10], 0x02441453, 9)
  62995. c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
  62996. b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
  62997. a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
  62998. d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
  62999. c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
  63000. b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
  63001. a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
  63002. d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
  63003. c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
  63004. b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
  63005. a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
  63006. d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
  63007. c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
  63008. b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
  63009. a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
  63010. d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
  63011. c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
  63012. b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
  63013. a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
  63014. d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
  63015. c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
  63016. b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
  63017. a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
  63018. d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
  63019. c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
  63020. b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
  63021. a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
  63022. d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
  63023. c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
  63024. b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
  63025. a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
  63026. d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
  63027. c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
  63028. b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
  63029. a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
  63030. d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
  63031. c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
  63032. b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
  63033. a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
  63034. d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
  63035. c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
  63036. b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
  63037. this._a = (this._a + a) | 0
  63038. this._b = (this._b + b) | 0
  63039. this._c = (this._c + c) | 0
  63040. this._d = (this._d + d) | 0
  63041. }
  63042. MD5.prototype._digest = function () {
  63043. // create padding and handle blocks
  63044. this._block[this._blockOffset++] = 0x80
  63045. if (this._blockOffset > 56) {
  63046. this._block.fill(0, this._blockOffset, 64)
  63047. this._update()
  63048. this._blockOffset = 0
  63049. }
  63050. this._block.fill(0, this._blockOffset, 56)
  63051. this._block.writeUInt32LE(this._length[0], 56)
  63052. this._block.writeUInt32LE(this._length[1], 60)
  63053. this._update()
  63054. // produce result
  63055. var buffer = Buffer.allocUnsafe(16)
  63056. buffer.writeInt32LE(this._a, 0)
  63057. buffer.writeInt32LE(this._b, 4)
  63058. buffer.writeInt32LE(this._c, 8)
  63059. buffer.writeInt32LE(this._d, 12)
  63060. return buffer
  63061. }
  63062. function rotl (x, n) {
  63063. return (x << n) | (x >>> (32 - n))
  63064. }
  63065. function fnF (a, b, c, d, m, k, s) {
  63066. return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
  63067. }
  63068. function fnG (a, b, c, d, m, k, s) {
  63069. return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
  63070. }
  63071. function fnH (a, b, c, d, m, k, s) {
  63072. return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
  63073. }
  63074. function fnI (a, b, c, d, m, k, s) {
  63075. return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
  63076. }
  63077. module.exports = MD5
  63078. /***/ }),
  63079. /***/ 63047:
  63080. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  63081. var bn = __webpack_require__(96240);
  63082. var brorand = __webpack_require__(29931);
  63083. function MillerRabin(rand) {
  63084. this.rand = rand || new brorand.Rand();
  63085. }
  63086. module.exports = MillerRabin;
  63087. MillerRabin.create = function create(rand) {
  63088. return new MillerRabin(rand);
  63089. };
  63090. MillerRabin.prototype._randbelow = function _randbelow(n) {
  63091. var len = n.bitLength();
  63092. var min_bytes = Math.ceil(len / 8);
  63093. // Generage random bytes until a number less than n is found.
  63094. // This ensures that 0..n-1 have an equal probability of being selected.
  63095. do
  63096. var a = new bn(this.rand.generate(min_bytes));
  63097. while (a.cmp(n) >= 0);
  63098. return a;
  63099. };
  63100. MillerRabin.prototype._randrange = function _randrange(start, stop) {
  63101. // Generate a random number greater than or equal to start and less than stop.
  63102. var size = stop.sub(start);
  63103. return start.add(this._randbelow(size));
  63104. };
  63105. MillerRabin.prototype.test = function test(n, k, cb) {
  63106. var len = n.bitLength();
  63107. var red = bn.mont(n);
  63108. var rone = new bn(1).toRed(red);
  63109. if (!k)
  63110. k = Math.max(1, (len / 48) | 0);
  63111. // Find d and s, (n - 1) = (2 ^ s) * d;
  63112. var n1 = n.subn(1);
  63113. for (var s = 0; !n1.testn(s); s++) {}
  63114. var d = n.shrn(s);
  63115. var rn1 = n1.toRed(red);
  63116. var prime = true;
  63117. for (; k > 0; k--) {
  63118. var a = this._randrange(new bn(2), n1);
  63119. if (cb)
  63120. cb(a);
  63121. var x = a.toRed(red).redPow(d);
  63122. if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
  63123. continue;
  63124. for (var i = 1; i < s; i++) {
  63125. x = x.redSqr();
  63126. if (x.cmp(rone) === 0)
  63127. return false;
  63128. if (x.cmp(rn1) === 0)
  63129. break;
  63130. }
  63131. if (i === s)
  63132. return false;
  63133. }
  63134. return prime;
  63135. };
  63136. MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
  63137. var len = n.bitLength();
  63138. var red = bn.mont(n);
  63139. var rone = new bn(1).toRed(red);
  63140. if (!k)
  63141. k = Math.max(1, (len / 48) | 0);
  63142. // Find d and s, (n - 1) = (2 ^ s) * d;
  63143. var n1 = n.subn(1);
  63144. for (var s = 0; !n1.testn(s); s++) {}
  63145. var d = n.shrn(s);
  63146. var rn1 = n1.toRed(red);
  63147. for (; k > 0; k--) {
  63148. var a = this._randrange(new bn(2), n1);
  63149. var g = n.gcd(a);
  63150. if (g.cmpn(1) !== 0)
  63151. return g;
  63152. var x = a.toRed(red).redPow(d);
  63153. if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
  63154. continue;
  63155. for (var i = 1; i < s; i++) {
  63156. x = x.redSqr();
  63157. if (x.cmp(rone) === 0)
  63158. return x.fromRed().subn(1).gcd(n);
  63159. if (x.cmp(rn1) === 0)
  63160. break;
  63161. }
  63162. if (i === s) {
  63163. x = x.redSqr();
  63164. return x.fromRed().subn(1).gcd(n);
  63165. }
  63166. }
  63167. return false;
  63168. };
  63169. /***/ }),
  63170. /***/ 96240:
  63171. /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
  63172. /* module decorator */ module = __webpack_require__.nmd(module);
  63173. (function (module, exports) {
  63174. 'use strict';
  63175. // Utils
  63176. function assert (val, msg) {
  63177. if (!val) throw new Error(msg || 'Assertion failed');
  63178. }
  63179. // Could use `inherits` module, but don't want to move from single file
  63180. // architecture yet.
  63181. function inherits (ctor, superCtor) {
  63182. ctor.super_ = superCtor;
  63183. var TempCtor = function () {};
  63184. TempCtor.prototype = superCtor.prototype;
  63185. ctor.prototype = new TempCtor();
  63186. ctor.prototype.constructor = ctor;
  63187. }
  63188. // BN
  63189. function BN (number, base, endian) {
  63190. if (BN.isBN(number)) {
  63191. return number;
  63192. }
  63193. this.negative = 0;
  63194. this.words = null;
  63195. this.length = 0;
  63196. // Reduction context
  63197. this.red = null;
  63198. if (number !== null) {
  63199. if (base === 'le' || base === 'be') {
  63200. endian = base;
  63201. base = 10;
  63202. }
  63203. this._init(number || 0, base || 10, endian || 'be');
  63204. }
  63205. }
  63206. if (typeof module === 'object') {
  63207. module.exports = BN;
  63208. } else {
  63209. exports.BN = BN;
  63210. }
  63211. BN.BN = BN;
  63212. BN.wordSize = 26;
  63213. var Buffer;
  63214. try {
  63215. if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {
  63216. Buffer = window.Buffer;
  63217. } else {
  63218. Buffer = (__webpack_require__(56619).Buffer);
  63219. }
  63220. } catch (e) {
  63221. }
  63222. BN.isBN = function isBN (num) {
  63223. if (num instanceof BN) {
  63224. return true;
  63225. }
  63226. return num !== null && typeof num === 'object' &&
  63227. num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
  63228. };
  63229. BN.max = function max (left, right) {
  63230. if (left.cmp(right) > 0) return left;
  63231. return right;
  63232. };
  63233. BN.min = function min (left, right) {
  63234. if (left.cmp(right) < 0) return left;
  63235. return right;
  63236. };
  63237. BN.prototype._init = function init (number, base, endian) {
  63238. if (typeof number === 'number') {
  63239. return this._initNumber(number, base, endian);
  63240. }
  63241. if (typeof number === 'object') {
  63242. return this._initArray(number, base, endian);
  63243. }
  63244. if (base === 'hex') {
  63245. base = 16;
  63246. }
  63247. assert(base === (base | 0) && base >= 2 && base <= 36);
  63248. number = number.toString().replace(/\s+/g, '');
  63249. var start = 0;
  63250. if (number[0] === '-') {
  63251. start++;
  63252. this.negative = 1;
  63253. }
  63254. if (start < number.length) {
  63255. if (base === 16) {
  63256. this._parseHex(number, start, endian);
  63257. } else {
  63258. this._parseBase(number, base, start);
  63259. if (endian === 'le') {
  63260. this._initArray(this.toArray(), base, endian);
  63261. }
  63262. }
  63263. }
  63264. };
  63265. BN.prototype._initNumber = function _initNumber (number, base, endian) {
  63266. if (number < 0) {
  63267. this.negative = 1;
  63268. number = -number;
  63269. }
  63270. if (number < 0x4000000) {
  63271. this.words = [ number & 0x3ffffff ];
  63272. this.length = 1;
  63273. } else if (number < 0x10000000000000) {
  63274. this.words = [
  63275. number & 0x3ffffff,
  63276. (number / 0x4000000) & 0x3ffffff
  63277. ];
  63278. this.length = 2;
  63279. } else {
  63280. assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
  63281. this.words = [
  63282. number & 0x3ffffff,
  63283. (number / 0x4000000) & 0x3ffffff,
  63284. 1
  63285. ];
  63286. this.length = 3;
  63287. }
  63288. if (endian !== 'le') return;
  63289. // Reverse the bytes
  63290. this._initArray(this.toArray(), base, endian);
  63291. };
  63292. BN.prototype._initArray = function _initArray (number, base, endian) {
  63293. // Perhaps a Uint8Array
  63294. assert(typeof number.length === 'number');
  63295. if (number.length <= 0) {
  63296. this.words = [ 0 ];
  63297. this.length = 1;
  63298. return this;
  63299. }
  63300. this.length = Math.ceil(number.length / 3);
  63301. this.words = new Array(this.length);
  63302. for (var i = 0; i < this.length; i++) {
  63303. this.words[i] = 0;
  63304. }
  63305. var j, w;
  63306. var off = 0;
  63307. if (endian === 'be') {
  63308. for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
  63309. w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
  63310. this.words[j] |= (w << off) & 0x3ffffff;
  63311. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  63312. off += 24;
  63313. if (off >= 26) {
  63314. off -= 26;
  63315. j++;
  63316. }
  63317. }
  63318. } else if (endian === 'le') {
  63319. for (i = 0, j = 0; i < number.length; i += 3) {
  63320. w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
  63321. this.words[j] |= (w << off) & 0x3ffffff;
  63322. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  63323. off += 24;
  63324. if (off >= 26) {
  63325. off -= 26;
  63326. j++;
  63327. }
  63328. }
  63329. }
  63330. return this.strip();
  63331. };
  63332. function parseHex4Bits (string, index) {
  63333. var c = string.charCodeAt(index);
  63334. // 'A' - 'F'
  63335. if (c >= 65 && c <= 70) {
  63336. return c - 55;
  63337. // 'a' - 'f'
  63338. } else if (c >= 97 && c <= 102) {
  63339. return c - 87;
  63340. // '0' - '9'
  63341. } else {
  63342. return (c - 48) & 0xf;
  63343. }
  63344. }
  63345. function parseHexByte (string, lowerBound, index) {
  63346. var r = parseHex4Bits(string, index);
  63347. if (index - 1 >= lowerBound) {
  63348. r |= parseHex4Bits(string, index - 1) << 4;
  63349. }
  63350. return r;
  63351. }
  63352. BN.prototype._parseHex = function _parseHex (number, start, endian) {
  63353. // Create possibly bigger array to ensure that it fits the number
  63354. this.length = Math.ceil((number.length - start) / 6);
  63355. this.words = new Array(this.length);
  63356. for (var i = 0; i < this.length; i++) {
  63357. this.words[i] = 0;
  63358. }
  63359. // 24-bits chunks
  63360. var off = 0;
  63361. var j = 0;
  63362. var w;
  63363. if (endian === 'be') {
  63364. for (i = number.length - 1; i >= start; i -= 2) {
  63365. w = parseHexByte(number, start, i) << off;
  63366. this.words[j] |= w & 0x3ffffff;
  63367. if (off >= 18) {
  63368. off -= 18;
  63369. j += 1;
  63370. this.words[j] |= w >>> 26;
  63371. } else {
  63372. off += 8;
  63373. }
  63374. }
  63375. } else {
  63376. var parseLength = number.length - start;
  63377. for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {
  63378. w = parseHexByte(number, start, i) << off;
  63379. this.words[j] |= w & 0x3ffffff;
  63380. if (off >= 18) {
  63381. off -= 18;
  63382. j += 1;
  63383. this.words[j] |= w >>> 26;
  63384. } else {
  63385. off += 8;
  63386. }
  63387. }
  63388. }
  63389. this.strip();
  63390. };
  63391. function parseBase (str, start, end, mul) {
  63392. var r = 0;
  63393. var len = Math.min(str.length, end);
  63394. for (var i = start; i < len; i++) {
  63395. var c = str.charCodeAt(i) - 48;
  63396. r *= mul;
  63397. // 'a'
  63398. if (c >= 49) {
  63399. r += c - 49 + 0xa;
  63400. // 'A'
  63401. } else if (c >= 17) {
  63402. r += c - 17 + 0xa;
  63403. // '0' - '9'
  63404. } else {
  63405. r += c;
  63406. }
  63407. }
  63408. return r;
  63409. }
  63410. BN.prototype._parseBase = function _parseBase (number, base, start) {
  63411. // Initialize as zero
  63412. this.words = [ 0 ];
  63413. this.length = 1;
  63414. // Find length of limb in base
  63415. for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
  63416. limbLen++;
  63417. }
  63418. limbLen--;
  63419. limbPow = (limbPow / base) | 0;
  63420. var total = number.length - start;
  63421. var mod = total % limbLen;
  63422. var end = Math.min(total, total - mod) + start;
  63423. var word = 0;
  63424. for (var i = start; i < end; i += limbLen) {
  63425. word = parseBase(number, i, i + limbLen, base);
  63426. this.imuln(limbPow);
  63427. if (this.words[0] + word < 0x4000000) {
  63428. this.words[0] += word;
  63429. } else {
  63430. this._iaddn(word);
  63431. }
  63432. }
  63433. if (mod !== 0) {
  63434. var pow = 1;
  63435. word = parseBase(number, i, number.length, base);
  63436. for (i = 0; i < mod; i++) {
  63437. pow *= base;
  63438. }
  63439. this.imuln(pow);
  63440. if (this.words[0] + word < 0x4000000) {
  63441. this.words[0] += word;
  63442. } else {
  63443. this._iaddn(word);
  63444. }
  63445. }
  63446. this.strip();
  63447. };
  63448. BN.prototype.copy = function copy (dest) {
  63449. dest.words = new Array(this.length);
  63450. for (var i = 0; i < this.length; i++) {
  63451. dest.words[i] = this.words[i];
  63452. }
  63453. dest.length = this.length;
  63454. dest.negative = this.negative;
  63455. dest.red = this.red;
  63456. };
  63457. BN.prototype.clone = function clone () {
  63458. var r = new BN(null);
  63459. this.copy(r);
  63460. return r;
  63461. };
  63462. BN.prototype._expand = function _expand (size) {
  63463. while (this.length < size) {
  63464. this.words[this.length++] = 0;
  63465. }
  63466. return this;
  63467. };
  63468. // Remove leading `0` from `this`
  63469. BN.prototype.strip = function strip () {
  63470. while (this.length > 1 && this.words[this.length - 1] === 0) {
  63471. this.length--;
  63472. }
  63473. return this._normSign();
  63474. };
  63475. BN.prototype._normSign = function _normSign () {
  63476. // -0 = 0
  63477. if (this.length === 1 && this.words[0] === 0) {
  63478. this.negative = 0;
  63479. }
  63480. return this;
  63481. };
  63482. BN.prototype.inspect = function inspect () {
  63483. return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  63484. };
  63485. /*
  63486. var zeros = [];
  63487. var groupSizes = [];
  63488. var groupBases = [];
  63489. var s = '';
  63490. var i = -1;
  63491. while (++i < BN.wordSize) {
  63492. zeros[i] = s;
  63493. s += '0';
  63494. }
  63495. groupSizes[0] = 0;
  63496. groupSizes[1] = 0;
  63497. groupBases[0] = 0;
  63498. groupBases[1] = 0;
  63499. var base = 2 - 1;
  63500. while (++base < 36 + 1) {
  63501. var groupSize = 0;
  63502. var groupBase = 1;
  63503. while (groupBase < (1 << BN.wordSize) / base) {
  63504. groupBase *= base;
  63505. groupSize += 1;
  63506. }
  63507. groupSizes[base] = groupSize;
  63508. groupBases[base] = groupBase;
  63509. }
  63510. */
  63511. var zeros = [
  63512. '',
  63513. '0',
  63514. '00',
  63515. '000',
  63516. '0000',
  63517. '00000',
  63518. '000000',
  63519. '0000000',
  63520. '00000000',
  63521. '000000000',
  63522. '0000000000',
  63523. '00000000000',
  63524. '000000000000',
  63525. '0000000000000',
  63526. '00000000000000',
  63527. '000000000000000',
  63528. '0000000000000000',
  63529. '00000000000000000',
  63530. '000000000000000000',
  63531. '0000000000000000000',
  63532. '00000000000000000000',
  63533. '000000000000000000000',
  63534. '0000000000000000000000',
  63535. '00000000000000000000000',
  63536. '000000000000000000000000',
  63537. '0000000000000000000000000'
  63538. ];
  63539. var groupSizes = [
  63540. 0, 0,
  63541. 25, 16, 12, 11, 10, 9, 8,
  63542. 8, 7, 7, 7, 7, 6, 6,
  63543. 6, 6, 6, 6, 6, 5, 5,
  63544. 5, 5, 5, 5, 5, 5, 5,
  63545. 5, 5, 5, 5, 5, 5, 5
  63546. ];
  63547. var groupBases = [
  63548. 0, 0,
  63549. 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
  63550. 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
  63551. 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
  63552. 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
  63553. 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
  63554. ];
  63555. BN.prototype.toString = function toString (base, padding) {
  63556. base = base || 10;
  63557. padding = padding | 0 || 1;
  63558. var out;
  63559. if (base === 16 || base === 'hex') {
  63560. out = '';
  63561. var off = 0;
  63562. var carry = 0;
  63563. for (var i = 0; i < this.length; i++) {
  63564. var w = this.words[i];
  63565. var word = (((w << off) | carry) & 0xffffff).toString(16);
  63566. carry = (w >>> (24 - off)) & 0xffffff;
  63567. if (carry !== 0 || i !== this.length - 1) {
  63568. out = zeros[6 - word.length] + word + out;
  63569. } else {
  63570. out = word + out;
  63571. }
  63572. off += 2;
  63573. if (off >= 26) {
  63574. off -= 26;
  63575. i--;
  63576. }
  63577. }
  63578. if (carry !== 0) {
  63579. out = carry.toString(16) + out;
  63580. }
  63581. while (out.length % padding !== 0) {
  63582. out = '0' + out;
  63583. }
  63584. if (this.negative !== 0) {
  63585. out = '-' + out;
  63586. }
  63587. return out;
  63588. }
  63589. if (base === (base | 0) && base >= 2 && base <= 36) {
  63590. // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
  63591. var groupSize = groupSizes[base];
  63592. // var groupBase = Math.pow(base, groupSize);
  63593. var groupBase = groupBases[base];
  63594. out = '';
  63595. var c = this.clone();
  63596. c.negative = 0;
  63597. while (!c.isZero()) {
  63598. var r = c.modn(groupBase).toString(base);
  63599. c = c.idivn(groupBase);
  63600. if (!c.isZero()) {
  63601. out = zeros[groupSize - r.length] + r + out;
  63602. } else {
  63603. out = r + out;
  63604. }
  63605. }
  63606. if (this.isZero()) {
  63607. out = '0' + out;
  63608. }
  63609. while (out.length % padding !== 0) {
  63610. out = '0' + out;
  63611. }
  63612. if (this.negative !== 0) {
  63613. out = '-' + out;
  63614. }
  63615. return out;
  63616. }
  63617. assert(false, 'Base should be between 2 and 36');
  63618. };
  63619. BN.prototype.toNumber = function toNumber () {
  63620. var ret = this.words[0];
  63621. if (this.length === 2) {
  63622. ret += this.words[1] * 0x4000000;
  63623. } else if (this.length === 3 && this.words[2] === 0x01) {
  63624. // NOTE: at this stage it is known that the top bit is set
  63625. ret += 0x10000000000000 + (this.words[1] * 0x4000000);
  63626. } else if (this.length > 2) {
  63627. assert(false, 'Number can only safely store up to 53 bits');
  63628. }
  63629. return (this.negative !== 0) ? -ret : ret;
  63630. };
  63631. BN.prototype.toJSON = function toJSON () {
  63632. return this.toString(16);
  63633. };
  63634. BN.prototype.toBuffer = function toBuffer (endian, length) {
  63635. assert(typeof Buffer !== 'undefined');
  63636. return this.toArrayLike(Buffer, endian, length);
  63637. };
  63638. BN.prototype.toArray = function toArray (endian, length) {
  63639. return this.toArrayLike(Array, endian, length);
  63640. };
  63641. BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
  63642. var byteLength = this.byteLength();
  63643. var reqLength = length || Math.max(1, byteLength);
  63644. assert(byteLength <= reqLength, 'byte array longer than desired length');
  63645. assert(reqLength > 0, 'Requested array length <= 0');
  63646. this.strip();
  63647. var littleEndian = endian === 'le';
  63648. var res = new ArrayType(reqLength);
  63649. var b, i;
  63650. var q = this.clone();
  63651. if (!littleEndian) {
  63652. // Assume big-endian
  63653. for (i = 0; i < reqLength - byteLength; i++) {
  63654. res[i] = 0;
  63655. }
  63656. for (i = 0; !q.isZero(); i++) {
  63657. b = q.andln(0xff);
  63658. q.iushrn(8);
  63659. res[reqLength - i - 1] = b;
  63660. }
  63661. } else {
  63662. for (i = 0; !q.isZero(); i++) {
  63663. b = q.andln(0xff);
  63664. q.iushrn(8);
  63665. res[i] = b;
  63666. }
  63667. for (; i < reqLength; i++) {
  63668. res[i] = 0;
  63669. }
  63670. }
  63671. return res;
  63672. };
  63673. if (Math.clz32) {
  63674. BN.prototype._countBits = function _countBits (w) {
  63675. return 32 - Math.clz32(w);
  63676. };
  63677. } else {
  63678. BN.prototype._countBits = function _countBits (w) {
  63679. var t = w;
  63680. var r = 0;
  63681. if (t >= 0x1000) {
  63682. r += 13;
  63683. t >>>= 13;
  63684. }
  63685. if (t >= 0x40) {
  63686. r += 7;
  63687. t >>>= 7;
  63688. }
  63689. if (t >= 0x8) {
  63690. r += 4;
  63691. t >>>= 4;
  63692. }
  63693. if (t >= 0x02) {
  63694. r += 2;
  63695. t >>>= 2;
  63696. }
  63697. return r + t;
  63698. };
  63699. }
  63700. BN.prototype._zeroBits = function _zeroBits (w) {
  63701. // Short-cut
  63702. if (w === 0) return 26;
  63703. var t = w;
  63704. var r = 0;
  63705. if ((t & 0x1fff) === 0) {
  63706. r += 13;
  63707. t >>>= 13;
  63708. }
  63709. if ((t & 0x7f) === 0) {
  63710. r += 7;
  63711. t >>>= 7;
  63712. }
  63713. if ((t & 0xf) === 0) {
  63714. r += 4;
  63715. t >>>= 4;
  63716. }
  63717. if ((t & 0x3) === 0) {
  63718. r += 2;
  63719. t >>>= 2;
  63720. }
  63721. if ((t & 0x1) === 0) {
  63722. r++;
  63723. }
  63724. return r;
  63725. };
  63726. // Return number of used bits in a BN
  63727. BN.prototype.bitLength = function bitLength () {
  63728. var w = this.words[this.length - 1];
  63729. var hi = this._countBits(w);
  63730. return (this.length - 1) * 26 + hi;
  63731. };
  63732. function toBitArray (num) {
  63733. var w = new Array(num.bitLength());
  63734. for (var bit = 0; bit < w.length; bit++) {
  63735. var off = (bit / 26) | 0;
  63736. var wbit = bit % 26;
  63737. w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
  63738. }
  63739. return w;
  63740. }
  63741. // Number of trailing zero bits
  63742. BN.prototype.zeroBits = function zeroBits () {
  63743. if (this.isZero()) return 0;
  63744. var r = 0;
  63745. for (var i = 0; i < this.length; i++) {
  63746. var b = this._zeroBits(this.words[i]);
  63747. r += b;
  63748. if (b !== 26) break;
  63749. }
  63750. return r;
  63751. };
  63752. BN.prototype.byteLength = function byteLength () {
  63753. return Math.ceil(this.bitLength() / 8);
  63754. };
  63755. BN.prototype.toTwos = function toTwos (width) {
  63756. if (this.negative !== 0) {
  63757. return this.abs().inotn(width).iaddn(1);
  63758. }
  63759. return this.clone();
  63760. };
  63761. BN.prototype.fromTwos = function fromTwos (width) {
  63762. if (this.testn(width - 1)) {
  63763. return this.notn(width).iaddn(1).ineg();
  63764. }
  63765. return this.clone();
  63766. };
  63767. BN.prototype.isNeg = function isNeg () {
  63768. return this.negative !== 0;
  63769. };
  63770. // Return negative clone of `this`
  63771. BN.prototype.neg = function neg () {
  63772. return this.clone().ineg();
  63773. };
  63774. BN.prototype.ineg = function ineg () {
  63775. if (!this.isZero()) {
  63776. this.negative ^= 1;
  63777. }
  63778. return this;
  63779. };
  63780. // Or `num` with `this` in-place
  63781. BN.prototype.iuor = function iuor (num) {
  63782. while (this.length < num.length) {
  63783. this.words[this.length++] = 0;
  63784. }
  63785. for (var i = 0; i < num.length; i++) {
  63786. this.words[i] = this.words[i] | num.words[i];
  63787. }
  63788. return this.strip();
  63789. };
  63790. BN.prototype.ior = function ior (num) {
  63791. assert((this.negative | num.negative) === 0);
  63792. return this.iuor(num);
  63793. };
  63794. // Or `num` with `this`
  63795. BN.prototype.or = function or (num) {
  63796. if (this.length > num.length) return this.clone().ior(num);
  63797. return num.clone().ior(this);
  63798. };
  63799. BN.prototype.uor = function uor (num) {
  63800. if (this.length > num.length) return this.clone().iuor(num);
  63801. return num.clone().iuor(this);
  63802. };
  63803. // And `num` with `this` in-place
  63804. BN.prototype.iuand = function iuand (num) {
  63805. // b = min-length(num, this)
  63806. var b;
  63807. if (this.length > num.length) {
  63808. b = num;
  63809. } else {
  63810. b = this;
  63811. }
  63812. for (var i = 0; i < b.length; i++) {
  63813. this.words[i] = this.words[i] & num.words[i];
  63814. }
  63815. this.length = b.length;
  63816. return this.strip();
  63817. };
  63818. BN.prototype.iand = function iand (num) {
  63819. assert((this.negative | num.negative) === 0);
  63820. return this.iuand(num);
  63821. };
  63822. // And `num` with `this`
  63823. BN.prototype.and = function and (num) {
  63824. if (this.length > num.length) return this.clone().iand(num);
  63825. return num.clone().iand(this);
  63826. };
  63827. BN.prototype.uand = function uand (num) {
  63828. if (this.length > num.length) return this.clone().iuand(num);
  63829. return num.clone().iuand(this);
  63830. };
  63831. // Xor `num` with `this` in-place
  63832. BN.prototype.iuxor = function iuxor (num) {
  63833. // a.length > b.length
  63834. var a;
  63835. var b;
  63836. if (this.length > num.length) {
  63837. a = this;
  63838. b = num;
  63839. } else {
  63840. a = num;
  63841. b = this;
  63842. }
  63843. for (var i = 0; i < b.length; i++) {
  63844. this.words[i] = a.words[i] ^ b.words[i];
  63845. }
  63846. if (this !== a) {
  63847. for (; i < a.length; i++) {
  63848. this.words[i] = a.words[i];
  63849. }
  63850. }
  63851. this.length = a.length;
  63852. return this.strip();
  63853. };
  63854. BN.prototype.ixor = function ixor (num) {
  63855. assert((this.negative | num.negative) === 0);
  63856. return this.iuxor(num);
  63857. };
  63858. // Xor `num` with `this`
  63859. BN.prototype.xor = function xor (num) {
  63860. if (this.length > num.length) return this.clone().ixor(num);
  63861. return num.clone().ixor(this);
  63862. };
  63863. BN.prototype.uxor = function uxor (num) {
  63864. if (this.length > num.length) return this.clone().iuxor(num);
  63865. return num.clone().iuxor(this);
  63866. };
  63867. // Not ``this`` with ``width`` bitwidth
  63868. BN.prototype.inotn = function inotn (width) {
  63869. assert(typeof width === 'number' && width >= 0);
  63870. var bytesNeeded = Math.ceil(width / 26) | 0;
  63871. var bitsLeft = width % 26;
  63872. // Extend the buffer with leading zeroes
  63873. this._expand(bytesNeeded);
  63874. if (bitsLeft > 0) {
  63875. bytesNeeded--;
  63876. }
  63877. // Handle complete words
  63878. for (var i = 0; i < bytesNeeded; i++) {
  63879. this.words[i] = ~this.words[i] & 0x3ffffff;
  63880. }
  63881. // Handle the residue
  63882. if (bitsLeft > 0) {
  63883. this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
  63884. }
  63885. // And remove leading zeroes
  63886. return this.strip();
  63887. };
  63888. BN.prototype.notn = function notn (width) {
  63889. return this.clone().inotn(width);
  63890. };
  63891. // Set `bit` of `this`
  63892. BN.prototype.setn = function setn (bit, val) {
  63893. assert(typeof bit === 'number' && bit >= 0);
  63894. var off = (bit / 26) | 0;
  63895. var wbit = bit % 26;
  63896. this._expand(off + 1);
  63897. if (val) {
  63898. this.words[off] = this.words[off] | (1 << wbit);
  63899. } else {
  63900. this.words[off] = this.words[off] & ~(1 << wbit);
  63901. }
  63902. return this.strip();
  63903. };
  63904. // Add `num` to `this` in-place
  63905. BN.prototype.iadd = function iadd (num) {
  63906. var r;
  63907. // negative + positive
  63908. if (this.negative !== 0 && num.negative === 0) {
  63909. this.negative = 0;
  63910. r = this.isub(num);
  63911. this.negative ^= 1;
  63912. return this._normSign();
  63913. // positive + negative
  63914. } else if (this.negative === 0 && num.negative !== 0) {
  63915. num.negative = 0;
  63916. r = this.isub(num);
  63917. num.negative = 1;
  63918. return r._normSign();
  63919. }
  63920. // a.length > b.length
  63921. var a, b;
  63922. if (this.length > num.length) {
  63923. a = this;
  63924. b = num;
  63925. } else {
  63926. a = num;
  63927. b = this;
  63928. }
  63929. var carry = 0;
  63930. for (var i = 0; i < b.length; i++) {
  63931. r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
  63932. this.words[i] = r & 0x3ffffff;
  63933. carry = r >>> 26;
  63934. }
  63935. for (; carry !== 0 && i < a.length; i++) {
  63936. r = (a.words[i] | 0) + carry;
  63937. this.words[i] = r & 0x3ffffff;
  63938. carry = r >>> 26;
  63939. }
  63940. this.length = a.length;
  63941. if (carry !== 0) {
  63942. this.words[this.length] = carry;
  63943. this.length++;
  63944. // Copy the rest of the words
  63945. } else if (a !== this) {
  63946. for (; i < a.length; i++) {
  63947. this.words[i] = a.words[i];
  63948. }
  63949. }
  63950. return this;
  63951. };
  63952. // Add `num` to `this`
  63953. BN.prototype.add = function add (num) {
  63954. var res;
  63955. if (num.negative !== 0 && this.negative === 0) {
  63956. num.negative = 0;
  63957. res = this.sub(num);
  63958. num.negative ^= 1;
  63959. return res;
  63960. } else if (num.negative === 0 && this.negative !== 0) {
  63961. this.negative = 0;
  63962. res = num.sub(this);
  63963. this.negative = 1;
  63964. return res;
  63965. }
  63966. if (this.length > num.length) return this.clone().iadd(num);
  63967. return num.clone().iadd(this);
  63968. };
  63969. // Subtract `num` from `this` in-place
  63970. BN.prototype.isub = function isub (num) {
  63971. // this - (-num) = this + num
  63972. if (num.negative !== 0) {
  63973. num.negative = 0;
  63974. var r = this.iadd(num);
  63975. num.negative = 1;
  63976. return r._normSign();
  63977. // -this - num = -(this + num)
  63978. } else if (this.negative !== 0) {
  63979. this.negative = 0;
  63980. this.iadd(num);
  63981. this.negative = 1;
  63982. return this._normSign();
  63983. }
  63984. // At this point both numbers are positive
  63985. var cmp = this.cmp(num);
  63986. // Optimization - zeroify
  63987. if (cmp === 0) {
  63988. this.negative = 0;
  63989. this.length = 1;
  63990. this.words[0] = 0;
  63991. return this;
  63992. }
  63993. // a > b
  63994. var a, b;
  63995. if (cmp > 0) {
  63996. a = this;
  63997. b = num;
  63998. } else {
  63999. a = num;
  64000. b = this;
  64001. }
  64002. var carry = 0;
  64003. for (var i = 0; i < b.length; i++) {
  64004. r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
  64005. carry = r >> 26;
  64006. this.words[i] = r & 0x3ffffff;
  64007. }
  64008. for (; carry !== 0 && i < a.length; i++) {
  64009. r = (a.words[i] | 0) + carry;
  64010. carry = r >> 26;
  64011. this.words[i] = r & 0x3ffffff;
  64012. }
  64013. // Copy rest of the words
  64014. if (carry === 0 && i < a.length && a !== this) {
  64015. for (; i < a.length; i++) {
  64016. this.words[i] = a.words[i];
  64017. }
  64018. }
  64019. this.length = Math.max(this.length, i);
  64020. if (a !== this) {
  64021. this.negative = 1;
  64022. }
  64023. return this.strip();
  64024. };
  64025. // Subtract `num` from `this`
  64026. BN.prototype.sub = function sub (num) {
  64027. return this.clone().isub(num);
  64028. };
  64029. function smallMulTo (self, num, out) {
  64030. out.negative = num.negative ^ self.negative;
  64031. var len = (self.length + num.length) | 0;
  64032. out.length = len;
  64033. len = (len - 1) | 0;
  64034. // Peel one iteration (compiler can't do it, because of code complexity)
  64035. var a = self.words[0] | 0;
  64036. var b = num.words[0] | 0;
  64037. var r = a * b;
  64038. var lo = r & 0x3ffffff;
  64039. var carry = (r / 0x4000000) | 0;
  64040. out.words[0] = lo;
  64041. for (var k = 1; k < len; k++) {
  64042. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  64043. // note that ncarry could be >= 0x3ffffff
  64044. var ncarry = carry >>> 26;
  64045. var rword = carry & 0x3ffffff;
  64046. var maxJ = Math.min(k, num.length - 1);
  64047. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  64048. var i = (k - j) | 0;
  64049. a = self.words[i] | 0;
  64050. b = num.words[j] | 0;
  64051. r = a * b + rword;
  64052. ncarry += (r / 0x4000000) | 0;
  64053. rword = r & 0x3ffffff;
  64054. }
  64055. out.words[k] = rword | 0;
  64056. carry = ncarry | 0;
  64057. }
  64058. if (carry !== 0) {
  64059. out.words[k] = carry | 0;
  64060. } else {
  64061. out.length--;
  64062. }
  64063. return out.strip();
  64064. }
  64065. // TODO(indutny): it may be reasonable to omit it for users who don't need
  64066. // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
  64067. // multiplication (like elliptic secp256k1).
  64068. var comb10MulTo = function comb10MulTo (self, num, out) {
  64069. var a = self.words;
  64070. var b = num.words;
  64071. var o = out.words;
  64072. var c = 0;
  64073. var lo;
  64074. var mid;
  64075. var hi;
  64076. var a0 = a[0] | 0;
  64077. var al0 = a0 & 0x1fff;
  64078. var ah0 = a0 >>> 13;
  64079. var a1 = a[1] | 0;
  64080. var al1 = a1 & 0x1fff;
  64081. var ah1 = a1 >>> 13;
  64082. var a2 = a[2] | 0;
  64083. var al2 = a2 & 0x1fff;
  64084. var ah2 = a2 >>> 13;
  64085. var a3 = a[3] | 0;
  64086. var al3 = a3 & 0x1fff;
  64087. var ah3 = a3 >>> 13;
  64088. var a4 = a[4] | 0;
  64089. var al4 = a4 & 0x1fff;
  64090. var ah4 = a4 >>> 13;
  64091. var a5 = a[5] | 0;
  64092. var al5 = a5 & 0x1fff;
  64093. var ah5 = a5 >>> 13;
  64094. var a6 = a[6] | 0;
  64095. var al6 = a6 & 0x1fff;
  64096. var ah6 = a6 >>> 13;
  64097. var a7 = a[7] | 0;
  64098. var al7 = a7 & 0x1fff;
  64099. var ah7 = a7 >>> 13;
  64100. var a8 = a[8] | 0;
  64101. var al8 = a8 & 0x1fff;
  64102. var ah8 = a8 >>> 13;
  64103. var a9 = a[9] | 0;
  64104. var al9 = a9 & 0x1fff;
  64105. var ah9 = a9 >>> 13;
  64106. var b0 = b[0] | 0;
  64107. var bl0 = b0 & 0x1fff;
  64108. var bh0 = b0 >>> 13;
  64109. var b1 = b[1] | 0;
  64110. var bl1 = b1 & 0x1fff;
  64111. var bh1 = b1 >>> 13;
  64112. var b2 = b[2] | 0;
  64113. var bl2 = b2 & 0x1fff;
  64114. var bh2 = b2 >>> 13;
  64115. var b3 = b[3] | 0;
  64116. var bl3 = b3 & 0x1fff;
  64117. var bh3 = b3 >>> 13;
  64118. var b4 = b[4] | 0;
  64119. var bl4 = b4 & 0x1fff;
  64120. var bh4 = b4 >>> 13;
  64121. var b5 = b[5] | 0;
  64122. var bl5 = b5 & 0x1fff;
  64123. var bh5 = b5 >>> 13;
  64124. var b6 = b[6] | 0;
  64125. var bl6 = b6 & 0x1fff;
  64126. var bh6 = b6 >>> 13;
  64127. var b7 = b[7] | 0;
  64128. var bl7 = b7 & 0x1fff;
  64129. var bh7 = b7 >>> 13;
  64130. var b8 = b[8] | 0;
  64131. var bl8 = b8 & 0x1fff;
  64132. var bh8 = b8 >>> 13;
  64133. var b9 = b[9] | 0;
  64134. var bl9 = b9 & 0x1fff;
  64135. var bh9 = b9 >>> 13;
  64136. out.negative = self.negative ^ num.negative;
  64137. out.length = 19;
  64138. /* k = 0 */
  64139. lo = Math.imul(al0, bl0);
  64140. mid = Math.imul(al0, bh0);
  64141. mid = (mid + Math.imul(ah0, bl0)) | 0;
  64142. hi = Math.imul(ah0, bh0);
  64143. var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64144. c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
  64145. w0 &= 0x3ffffff;
  64146. /* k = 1 */
  64147. lo = Math.imul(al1, bl0);
  64148. mid = Math.imul(al1, bh0);
  64149. mid = (mid + Math.imul(ah1, bl0)) | 0;
  64150. hi = Math.imul(ah1, bh0);
  64151. lo = (lo + Math.imul(al0, bl1)) | 0;
  64152. mid = (mid + Math.imul(al0, bh1)) | 0;
  64153. mid = (mid + Math.imul(ah0, bl1)) | 0;
  64154. hi = (hi + Math.imul(ah0, bh1)) | 0;
  64155. var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64156. c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
  64157. w1 &= 0x3ffffff;
  64158. /* k = 2 */
  64159. lo = Math.imul(al2, bl0);
  64160. mid = Math.imul(al2, bh0);
  64161. mid = (mid + Math.imul(ah2, bl0)) | 0;
  64162. hi = Math.imul(ah2, bh0);
  64163. lo = (lo + Math.imul(al1, bl1)) | 0;
  64164. mid = (mid + Math.imul(al1, bh1)) | 0;
  64165. mid = (mid + Math.imul(ah1, bl1)) | 0;
  64166. hi = (hi + Math.imul(ah1, bh1)) | 0;
  64167. lo = (lo + Math.imul(al0, bl2)) | 0;
  64168. mid = (mid + Math.imul(al0, bh2)) | 0;
  64169. mid = (mid + Math.imul(ah0, bl2)) | 0;
  64170. hi = (hi + Math.imul(ah0, bh2)) | 0;
  64171. var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64172. c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
  64173. w2 &= 0x3ffffff;
  64174. /* k = 3 */
  64175. lo = Math.imul(al3, bl0);
  64176. mid = Math.imul(al3, bh0);
  64177. mid = (mid + Math.imul(ah3, bl0)) | 0;
  64178. hi = Math.imul(ah3, bh0);
  64179. lo = (lo + Math.imul(al2, bl1)) | 0;
  64180. mid = (mid + Math.imul(al2, bh1)) | 0;
  64181. mid = (mid + Math.imul(ah2, bl1)) | 0;
  64182. hi = (hi + Math.imul(ah2, bh1)) | 0;
  64183. lo = (lo + Math.imul(al1, bl2)) | 0;
  64184. mid = (mid + Math.imul(al1, bh2)) | 0;
  64185. mid = (mid + Math.imul(ah1, bl2)) | 0;
  64186. hi = (hi + Math.imul(ah1, bh2)) | 0;
  64187. lo = (lo + Math.imul(al0, bl3)) | 0;
  64188. mid = (mid + Math.imul(al0, bh3)) | 0;
  64189. mid = (mid + Math.imul(ah0, bl3)) | 0;
  64190. hi = (hi + Math.imul(ah0, bh3)) | 0;
  64191. var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64192. c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
  64193. w3 &= 0x3ffffff;
  64194. /* k = 4 */
  64195. lo = Math.imul(al4, bl0);
  64196. mid = Math.imul(al4, bh0);
  64197. mid = (mid + Math.imul(ah4, bl0)) | 0;
  64198. hi = Math.imul(ah4, bh0);
  64199. lo = (lo + Math.imul(al3, bl1)) | 0;
  64200. mid = (mid + Math.imul(al3, bh1)) | 0;
  64201. mid = (mid + Math.imul(ah3, bl1)) | 0;
  64202. hi = (hi + Math.imul(ah3, bh1)) | 0;
  64203. lo = (lo + Math.imul(al2, bl2)) | 0;
  64204. mid = (mid + Math.imul(al2, bh2)) | 0;
  64205. mid = (mid + Math.imul(ah2, bl2)) | 0;
  64206. hi = (hi + Math.imul(ah2, bh2)) | 0;
  64207. lo = (lo + Math.imul(al1, bl3)) | 0;
  64208. mid = (mid + Math.imul(al1, bh3)) | 0;
  64209. mid = (mid + Math.imul(ah1, bl3)) | 0;
  64210. hi = (hi + Math.imul(ah1, bh3)) | 0;
  64211. lo = (lo + Math.imul(al0, bl4)) | 0;
  64212. mid = (mid + Math.imul(al0, bh4)) | 0;
  64213. mid = (mid + Math.imul(ah0, bl4)) | 0;
  64214. hi = (hi + Math.imul(ah0, bh4)) | 0;
  64215. var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64216. c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
  64217. w4 &= 0x3ffffff;
  64218. /* k = 5 */
  64219. lo = Math.imul(al5, bl0);
  64220. mid = Math.imul(al5, bh0);
  64221. mid = (mid + Math.imul(ah5, bl0)) | 0;
  64222. hi = Math.imul(ah5, bh0);
  64223. lo = (lo + Math.imul(al4, bl1)) | 0;
  64224. mid = (mid + Math.imul(al4, bh1)) | 0;
  64225. mid = (mid + Math.imul(ah4, bl1)) | 0;
  64226. hi = (hi + Math.imul(ah4, bh1)) | 0;
  64227. lo = (lo + Math.imul(al3, bl2)) | 0;
  64228. mid = (mid + Math.imul(al3, bh2)) | 0;
  64229. mid = (mid + Math.imul(ah3, bl2)) | 0;
  64230. hi = (hi + Math.imul(ah3, bh2)) | 0;
  64231. lo = (lo + Math.imul(al2, bl3)) | 0;
  64232. mid = (mid + Math.imul(al2, bh3)) | 0;
  64233. mid = (mid + Math.imul(ah2, bl3)) | 0;
  64234. hi = (hi + Math.imul(ah2, bh3)) | 0;
  64235. lo = (lo + Math.imul(al1, bl4)) | 0;
  64236. mid = (mid + Math.imul(al1, bh4)) | 0;
  64237. mid = (mid + Math.imul(ah1, bl4)) | 0;
  64238. hi = (hi + Math.imul(ah1, bh4)) | 0;
  64239. lo = (lo + Math.imul(al0, bl5)) | 0;
  64240. mid = (mid + Math.imul(al0, bh5)) | 0;
  64241. mid = (mid + Math.imul(ah0, bl5)) | 0;
  64242. hi = (hi + Math.imul(ah0, bh5)) | 0;
  64243. var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64244. c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
  64245. w5 &= 0x3ffffff;
  64246. /* k = 6 */
  64247. lo = Math.imul(al6, bl0);
  64248. mid = Math.imul(al6, bh0);
  64249. mid = (mid + Math.imul(ah6, bl0)) | 0;
  64250. hi = Math.imul(ah6, bh0);
  64251. lo = (lo + Math.imul(al5, bl1)) | 0;
  64252. mid = (mid + Math.imul(al5, bh1)) | 0;
  64253. mid = (mid + Math.imul(ah5, bl1)) | 0;
  64254. hi = (hi + Math.imul(ah5, bh1)) | 0;
  64255. lo = (lo + Math.imul(al4, bl2)) | 0;
  64256. mid = (mid + Math.imul(al4, bh2)) | 0;
  64257. mid = (mid + Math.imul(ah4, bl2)) | 0;
  64258. hi = (hi + Math.imul(ah4, bh2)) | 0;
  64259. lo = (lo + Math.imul(al3, bl3)) | 0;
  64260. mid = (mid + Math.imul(al3, bh3)) | 0;
  64261. mid = (mid + Math.imul(ah3, bl3)) | 0;
  64262. hi = (hi + Math.imul(ah3, bh3)) | 0;
  64263. lo = (lo + Math.imul(al2, bl4)) | 0;
  64264. mid = (mid + Math.imul(al2, bh4)) | 0;
  64265. mid = (mid + Math.imul(ah2, bl4)) | 0;
  64266. hi = (hi + Math.imul(ah2, bh4)) | 0;
  64267. lo = (lo + Math.imul(al1, bl5)) | 0;
  64268. mid = (mid + Math.imul(al1, bh5)) | 0;
  64269. mid = (mid + Math.imul(ah1, bl5)) | 0;
  64270. hi = (hi + Math.imul(ah1, bh5)) | 0;
  64271. lo = (lo + Math.imul(al0, bl6)) | 0;
  64272. mid = (mid + Math.imul(al0, bh6)) | 0;
  64273. mid = (mid + Math.imul(ah0, bl6)) | 0;
  64274. hi = (hi + Math.imul(ah0, bh6)) | 0;
  64275. var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64276. c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
  64277. w6 &= 0x3ffffff;
  64278. /* k = 7 */
  64279. lo = Math.imul(al7, bl0);
  64280. mid = Math.imul(al7, bh0);
  64281. mid = (mid + Math.imul(ah7, bl0)) | 0;
  64282. hi = Math.imul(ah7, bh0);
  64283. lo = (lo + Math.imul(al6, bl1)) | 0;
  64284. mid = (mid + Math.imul(al6, bh1)) | 0;
  64285. mid = (mid + Math.imul(ah6, bl1)) | 0;
  64286. hi = (hi + Math.imul(ah6, bh1)) | 0;
  64287. lo = (lo + Math.imul(al5, bl2)) | 0;
  64288. mid = (mid + Math.imul(al5, bh2)) | 0;
  64289. mid = (mid + Math.imul(ah5, bl2)) | 0;
  64290. hi = (hi + Math.imul(ah5, bh2)) | 0;
  64291. lo = (lo + Math.imul(al4, bl3)) | 0;
  64292. mid = (mid + Math.imul(al4, bh3)) | 0;
  64293. mid = (mid + Math.imul(ah4, bl3)) | 0;
  64294. hi = (hi + Math.imul(ah4, bh3)) | 0;
  64295. lo = (lo + Math.imul(al3, bl4)) | 0;
  64296. mid = (mid + Math.imul(al3, bh4)) | 0;
  64297. mid = (mid + Math.imul(ah3, bl4)) | 0;
  64298. hi = (hi + Math.imul(ah3, bh4)) | 0;
  64299. lo = (lo + Math.imul(al2, bl5)) | 0;
  64300. mid = (mid + Math.imul(al2, bh5)) | 0;
  64301. mid = (mid + Math.imul(ah2, bl5)) | 0;
  64302. hi = (hi + Math.imul(ah2, bh5)) | 0;
  64303. lo = (lo + Math.imul(al1, bl6)) | 0;
  64304. mid = (mid + Math.imul(al1, bh6)) | 0;
  64305. mid = (mid + Math.imul(ah1, bl6)) | 0;
  64306. hi = (hi + Math.imul(ah1, bh6)) | 0;
  64307. lo = (lo + Math.imul(al0, bl7)) | 0;
  64308. mid = (mid + Math.imul(al0, bh7)) | 0;
  64309. mid = (mid + Math.imul(ah0, bl7)) | 0;
  64310. hi = (hi + Math.imul(ah0, bh7)) | 0;
  64311. var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64312. c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
  64313. w7 &= 0x3ffffff;
  64314. /* k = 8 */
  64315. lo = Math.imul(al8, bl0);
  64316. mid = Math.imul(al8, bh0);
  64317. mid = (mid + Math.imul(ah8, bl0)) | 0;
  64318. hi = Math.imul(ah8, bh0);
  64319. lo = (lo + Math.imul(al7, bl1)) | 0;
  64320. mid = (mid + Math.imul(al7, bh1)) | 0;
  64321. mid = (mid + Math.imul(ah7, bl1)) | 0;
  64322. hi = (hi + Math.imul(ah7, bh1)) | 0;
  64323. lo = (lo + Math.imul(al6, bl2)) | 0;
  64324. mid = (mid + Math.imul(al6, bh2)) | 0;
  64325. mid = (mid + Math.imul(ah6, bl2)) | 0;
  64326. hi = (hi + Math.imul(ah6, bh2)) | 0;
  64327. lo = (lo + Math.imul(al5, bl3)) | 0;
  64328. mid = (mid + Math.imul(al5, bh3)) | 0;
  64329. mid = (mid + Math.imul(ah5, bl3)) | 0;
  64330. hi = (hi + Math.imul(ah5, bh3)) | 0;
  64331. lo = (lo + Math.imul(al4, bl4)) | 0;
  64332. mid = (mid + Math.imul(al4, bh4)) | 0;
  64333. mid = (mid + Math.imul(ah4, bl4)) | 0;
  64334. hi = (hi + Math.imul(ah4, bh4)) | 0;
  64335. lo = (lo + Math.imul(al3, bl5)) | 0;
  64336. mid = (mid + Math.imul(al3, bh5)) | 0;
  64337. mid = (mid + Math.imul(ah3, bl5)) | 0;
  64338. hi = (hi + Math.imul(ah3, bh5)) | 0;
  64339. lo = (lo + Math.imul(al2, bl6)) | 0;
  64340. mid = (mid + Math.imul(al2, bh6)) | 0;
  64341. mid = (mid + Math.imul(ah2, bl6)) | 0;
  64342. hi = (hi + Math.imul(ah2, bh6)) | 0;
  64343. lo = (lo + Math.imul(al1, bl7)) | 0;
  64344. mid = (mid + Math.imul(al1, bh7)) | 0;
  64345. mid = (mid + Math.imul(ah1, bl7)) | 0;
  64346. hi = (hi + Math.imul(ah1, bh7)) | 0;
  64347. lo = (lo + Math.imul(al0, bl8)) | 0;
  64348. mid = (mid + Math.imul(al0, bh8)) | 0;
  64349. mid = (mid + Math.imul(ah0, bl8)) | 0;
  64350. hi = (hi + Math.imul(ah0, bh8)) | 0;
  64351. var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64352. c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
  64353. w8 &= 0x3ffffff;
  64354. /* k = 9 */
  64355. lo = Math.imul(al9, bl0);
  64356. mid = Math.imul(al9, bh0);
  64357. mid = (mid + Math.imul(ah9, bl0)) | 0;
  64358. hi = Math.imul(ah9, bh0);
  64359. lo = (lo + Math.imul(al8, bl1)) | 0;
  64360. mid = (mid + Math.imul(al8, bh1)) | 0;
  64361. mid = (mid + Math.imul(ah8, bl1)) | 0;
  64362. hi = (hi + Math.imul(ah8, bh1)) | 0;
  64363. lo = (lo + Math.imul(al7, bl2)) | 0;
  64364. mid = (mid + Math.imul(al7, bh2)) | 0;
  64365. mid = (mid + Math.imul(ah7, bl2)) | 0;
  64366. hi = (hi + Math.imul(ah7, bh2)) | 0;
  64367. lo = (lo + Math.imul(al6, bl3)) | 0;
  64368. mid = (mid + Math.imul(al6, bh3)) | 0;
  64369. mid = (mid + Math.imul(ah6, bl3)) | 0;
  64370. hi = (hi + Math.imul(ah6, bh3)) | 0;
  64371. lo = (lo + Math.imul(al5, bl4)) | 0;
  64372. mid = (mid + Math.imul(al5, bh4)) | 0;
  64373. mid = (mid + Math.imul(ah5, bl4)) | 0;
  64374. hi = (hi + Math.imul(ah5, bh4)) | 0;
  64375. lo = (lo + Math.imul(al4, bl5)) | 0;
  64376. mid = (mid + Math.imul(al4, bh5)) | 0;
  64377. mid = (mid + Math.imul(ah4, bl5)) | 0;
  64378. hi = (hi + Math.imul(ah4, bh5)) | 0;
  64379. lo = (lo + Math.imul(al3, bl6)) | 0;
  64380. mid = (mid + Math.imul(al3, bh6)) | 0;
  64381. mid = (mid + Math.imul(ah3, bl6)) | 0;
  64382. hi = (hi + Math.imul(ah3, bh6)) | 0;
  64383. lo = (lo + Math.imul(al2, bl7)) | 0;
  64384. mid = (mid + Math.imul(al2, bh7)) | 0;
  64385. mid = (mid + Math.imul(ah2, bl7)) | 0;
  64386. hi = (hi + Math.imul(ah2, bh7)) | 0;
  64387. lo = (lo + Math.imul(al1, bl8)) | 0;
  64388. mid = (mid + Math.imul(al1, bh8)) | 0;
  64389. mid = (mid + Math.imul(ah1, bl8)) | 0;
  64390. hi = (hi + Math.imul(ah1, bh8)) | 0;
  64391. lo = (lo + Math.imul(al0, bl9)) | 0;
  64392. mid = (mid + Math.imul(al0, bh9)) | 0;
  64393. mid = (mid + Math.imul(ah0, bl9)) | 0;
  64394. hi = (hi + Math.imul(ah0, bh9)) | 0;
  64395. var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64396. c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
  64397. w9 &= 0x3ffffff;
  64398. /* k = 10 */
  64399. lo = Math.imul(al9, bl1);
  64400. mid = Math.imul(al9, bh1);
  64401. mid = (mid + Math.imul(ah9, bl1)) | 0;
  64402. hi = Math.imul(ah9, bh1);
  64403. lo = (lo + Math.imul(al8, bl2)) | 0;
  64404. mid = (mid + Math.imul(al8, bh2)) | 0;
  64405. mid = (mid + Math.imul(ah8, bl2)) | 0;
  64406. hi = (hi + Math.imul(ah8, bh2)) | 0;
  64407. lo = (lo + Math.imul(al7, bl3)) | 0;
  64408. mid = (mid + Math.imul(al7, bh3)) | 0;
  64409. mid = (mid + Math.imul(ah7, bl3)) | 0;
  64410. hi = (hi + Math.imul(ah7, bh3)) | 0;
  64411. lo = (lo + Math.imul(al6, bl4)) | 0;
  64412. mid = (mid + Math.imul(al6, bh4)) | 0;
  64413. mid = (mid + Math.imul(ah6, bl4)) | 0;
  64414. hi = (hi + Math.imul(ah6, bh4)) | 0;
  64415. lo = (lo + Math.imul(al5, bl5)) | 0;
  64416. mid = (mid + Math.imul(al5, bh5)) | 0;
  64417. mid = (mid + Math.imul(ah5, bl5)) | 0;
  64418. hi = (hi + Math.imul(ah5, bh5)) | 0;
  64419. lo = (lo + Math.imul(al4, bl6)) | 0;
  64420. mid = (mid + Math.imul(al4, bh6)) | 0;
  64421. mid = (mid + Math.imul(ah4, bl6)) | 0;
  64422. hi = (hi + Math.imul(ah4, bh6)) | 0;
  64423. lo = (lo + Math.imul(al3, bl7)) | 0;
  64424. mid = (mid + Math.imul(al3, bh7)) | 0;
  64425. mid = (mid + Math.imul(ah3, bl7)) | 0;
  64426. hi = (hi + Math.imul(ah3, bh7)) | 0;
  64427. lo = (lo + Math.imul(al2, bl8)) | 0;
  64428. mid = (mid + Math.imul(al2, bh8)) | 0;
  64429. mid = (mid + Math.imul(ah2, bl8)) | 0;
  64430. hi = (hi + Math.imul(ah2, bh8)) | 0;
  64431. lo = (lo + Math.imul(al1, bl9)) | 0;
  64432. mid = (mid + Math.imul(al1, bh9)) | 0;
  64433. mid = (mid + Math.imul(ah1, bl9)) | 0;
  64434. hi = (hi + Math.imul(ah1, bh9)) | 0;
  64435. var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64436. c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
  64437. w10 &= 0x3ffffff;
  64438. /* k = 11 */
  64439. lo = Math.imul(al9, bl2);
  64440. mid = Math.imul(al9, bh2);
  64441. mid = (mid + Math.imul(ah9, bl2)) | 0;
  64442. hi = Math.imul(ah9, bh2);
  64443. lo = (lo + Math.imul(al8, bl3)) | 0;
  64444. mid = (mid + Math.imul(al8, bh3)) | 0;
  64445. mid = (mid + Math.imul(ah8, bl3)) | 0;
  64446. hi = (hi + Math.imul(ah8, bh3)) | 0;
  64447. lo = (lo + Math.imul(al7, bl4)) | 0;
  64448. mid = (mid + Math.imul(al7, bh4)) | 0;
  64449. mid = (mid + Math.imul(ah7, bl4)) | 0;
  64450. hi = (hi + Math.imul(ah7, bh4)) | 0;
  64451. lo = (lo + Math.imul(al6, bl5)) | 0;
  64452. mid = (mid + Math.imul(al6, bh5)) | 0;
  64453. mid = (mid + Math.imul(ah6, bl5)) | 0;
  64454. hi = (hi + Math.imul(ah6, bh5)) | 0;
  64455. lo = (lo + Math.imul(al5, bl6)) | 0;
  64456. mid = (mid + Math.imul(al5, bh6)) | 0;
  64457. mid = (mid + Math.imul(ah5, bl6)) | 0;
  64458. hi = (hi + Math.imul(ah5, bh6)) | 0;
  64459. lo = (lo + Math.imul(al4, bl7)) | 0;
  64460. mid = (mid + Math.imul(al4, bh7)) | 0;
  64461. mid = (mid + Math.imul(ah4, bl7)) | 0;
  64462. hi = (hi + Math.imul(ah4, bh7)) | 0;
  64463. lo = (lo + Math.imul(al3, bl8)) | 0;
  64464. mid = (mid + Math.imul(al3, bh8)) | 0;
  64465. mid = (mid + Math.imul(ah3, bl8)) | 0;
  64466. hi = (hi + Math.imul(ah3, bh8)) | 0;
  64467. lo = (lo + Math.imul(al2, bl9)) | 0;
  64468. mid = (mid + Math.imul(al2, bh9)) | 0;
  64469. mid = (mid + Math.imul(ah2, bl9)) | 0;
  64470. hi = (hi + Math.imul(ah2, bh9)) | 0;
  64471. var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64472. c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
  64473. w11 &= 0x3ffffff;
  64474. /* k = 12 */
  64475. lo = Math.imul(al9, bl3);
  64476. mid = Math.imul(al9, bh3);
  64477. mid = (mid + Math.imul(ah9, bl3)) | 0;
  64478. hi = Math.imul(ah9, bh3);
  64479. lo = (lo + Math.imul(al8, bl4)) | 0;
  64480. mid = (mid + Math.imul(al8, bh4)) | 0;
  64481. mid = (mid + Math.imul(ah8, bl4)) | 0;
  64482. hi = (hi + Math.imul(ah8, bh4)) | 0;
  64483. lo = (lo + Math.imul(al7, bl5)) | 0;
  64484. mid = (mid + Math.imul(al7, bh5)) | 0;
  64485. mid = (mid + Math.imul(ah7, bl5)) | 0;
  64486. hi = (hi + Math.imul(ah7, bh5)) | 0;
  64487. lo = (lo + Math.imul(al6, bl6)) | 0;
  64488. mid = (mid + Math.imul(al6, bh6)) | 0;
  64489. mid = (mid + Math.imul(ah6, bl6)) | 0;
  64490. hi = (hi + Math.imul(ah6, bh6)) | 0;
  64491. lo = (lo + Math.imul(al5, bl7)) | 0;
  64492. mid = (mid + Math.imul(al5, bh7)) | 0;
  64493. mid = (mid + Math.imul(ah5, bl7)) | 0;
  64494. hi = (hi + Math.imul(ah5, bh7)) | 0;
  64495. lo = (lo + Math.imul(al4, bl8)) | 0;
  64496. mid = (mid + Math.imul(al4, bh8)) | 0;
  64497. mid = (mid + Math.imul(ah4, bl8)) | 0;
  64498. hi = (hi + Math.imul(ah4, bh8)) | 0;
  64499. lo = (lo + Math.imul(al3, bl9)) | 0;
  64500. mid = (mid + Math.imul(al3, bh9)) | 0;
  64501. mid = (mid + Math.imul(ah3, bl9)) | 0;
  64502. hi = (hi + Math.imul(ah3, bh9)) | 0;
  64503. var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64504. c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
  64505. w12 &= 0x3ffffff;
  64506. /* k = 13 */
  64507. lo = Math.imul(al9, bl4);
  64508. mid = Math.imul(al9, bh4);
  64509. mid = (mid + Math.imul(ah9, bl4)) | 0;
  64510. hi = Math.imul(ah9, bh4);
  64511. lo = (lo + Math.imul(al8, bl5)) | 0;
  64512. mid = (mid + Math.imul(al8, bh5)) | 0;
  64513. mid = (mid + Math.imul(ah8, bl5)) | 0;
  64514. hi = (hi + Math.imul(ah8, bh5)) | 0;
  64515. lo = (lo + Math.imul(al7, bl6)) | 0;
  64516. mid = (mid + Math.imul(al7, bh6)) | 0;
  64517. mid = (mid + Math.imul(ah7, bl6)) | 0;
  64518. hi = (hi + Math.imul(ah7, bh6)) | 0;
  64519. lo = (lo + Math.imul(al6, bl7)) | 0;
  64520. mid = (mid + Math.imul(al6, bh7)) | 0;
  64521. mid = (mid + Math.imul(ah6, bl7)) | 0;
  64522. hi = (hi + Math.imul(ah6, bh7)) | 0;
  64523. lo = (lo + Math.imul(al5, bl8)) | 0;
  64524. mid = (mid + Math.imul(al5, bh8)) | 0;
  64525. mid = (mid + Math.imul(ah5, bl8)) | 0;
  64526. hi = (hi + Math.imul(ah5, bh8)) | 0;
  64527. lo = (lo + Math.imul(al4, bl9)) | 0;
  64528. mid = (mid + Math.imul(al4, bh9)) | 0;
  64529. mid = (mid + Math.imul(ah4, bl9)) | 0;
  64530. hi = (hi + Math.imul(ah4, bh9)) | 0;
  64531. var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64532. c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
  64533. w13 &= 0x3ffffff;
  64534. /* k = 14 */
  64535. lo = Math.imul(al9, bl5);
  64536. mid = Math.imul(al9, bh5);
  64537. mid = (mid + Math.imul(ah9, bl5)) | 0;
  64538. hi = Math.imul(ah9, bh5);
  64539. lo = (lo + Math.imul(al8, bl6)) | 0;
  64540. mid = (mid + Math.imul(al8, bh6)) | 0;
  64541. mid = (mid + Math.imul(ah8, bl6)) | 0;
  64542. hi = (hi + Math.imul(ah8, bh6)) | 0;
  64543. lo = (lo + Math.imul(al7, bl7)) | 0;
  64544. mid = (mid + Math.imul(al7, bh7)) | 0;
  64545. mid = (mid + Math.imul(ah7, bl7)) | 0;
  64546. hi = (hi + Math.imul(ah7, bh7)) | 0;
  64547. lo = (lo + Math.imul(al6, bl8)) | 0;
  64548. mid = (mid + Math.imul(al6, bh8)) | 0;
  64549. mid = (mid + Math.imul(ah6, bl8)) | 0;
  64550. hi = (hi + Math.imul(ah6, bh8)) | 0;
  64551. lo = (lo + Math.imul(al5, bl9)) | 0;
  64552. mid = (mid + Math.imul(al5, bh9)) | 0;
  64553. mid = (mid + Math.imul(ah5, bl9)) | 0;
  64554. hi = (hi + Math.imul(ah5, bh9)) | 0;
  64555. var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64556. c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
  64557. w14 &= 0x3ffffff;
  64558. /* k = 15 */
  64559. lo = Math.imul(al9, bl6);
  64560. mid = Math.imul(al9, bh6);
  64561. mid = (mid + Math.imul(ah9, bl6)) | 0;
  64562. hi = Math.imul(ah9, bh6);
  64563. lo = (lo + Math.imul(al8, bl7)) | 0;
  64564. mid = (mid + Math.imul(al8, bh7)) | 0;
  64565. mid = (mid + Math.imul(ah8, bl7)) | 0;
  64566. hi = (hi + Math.imul(ah8, bh7)) | 0;
  64567. lo = (lo + Math.imul(al7, bl8)) | 0;
  64568. mid = (mid + Math.imul(al7, bh8)) | 0;
  64569. mid = (mid + Math.imul(ah7, bl8)) | 0;
  64570. hi = (hi + Math.imul(ah7, bh8)) | 0;
  64571. lo = (lo + Math.imul(al6, bl9)) | 0;
  64572. mid = (mid + Math.imul(al6, bh9)) | 0;
  64573. mid = (mid + Math.imul(ah6, bl9)) | 0;
  64574. hi = (hi + Math.imul(ah6, bh9)) | 0;
  64575. var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64576. c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
  64577. w15 &= 0x3ffffff;
  64578. /* k = 16 */
  64579. lo = Math.imul(al9, bl7);
  64580. mid = Math.imul(al9, bh7);
  64581. mid = (mid + Math.imul(ah9, bl7)) | 0;
  64582. hi = Math.imul(ah9, bh7);
  64583. lo = (lo + Math.imul(al8, bl8)) | 0;
  64584. mid = (mid + Math.imul(al8, bh8)) | 0;
  64585. mid = (mid + Math.imul(ah8, bl8)) | 0;
  64586. hi = (hi + Math.imul(ah8, bh8)) | 0;
  64587. lo = (lo + Math.imul(al7, bl9)) | 0;
  64588. mid = (mid + Math.imul(al7, bh9)) | 0;
  64589. mid = (mid + Math.imul(ah7, bl9)) | 0;
  64590. hi = (hi + Math.imul(ah7, bh9)) | 0;
  64591. var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64592. c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
  64593. w16 &= 0x3ffffff;
  64594. /* k = 17 */
  64595. lo = Math.imul(al9, bl8);
  64596. mid = Math.imul(al9, bh8);
  64597. mid = (mid + Math.imul(ah9, bl8)) | 0;
  64598. hi = Math.imul(ah9, bh8);
  64599. lo = (lo + Math.imul(al8, bl9)) | 0;
  64600. mid = (mid + Math.imul(al8, bh9)) | 0;
  64601. mid = (mid + Math.imul(ah8, bl9)) | 0;
  64602. hi = (hi + Math.imul(ah8, bh9)) | 0;
  64603. var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64604. c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
  64605. w17 &= 0x3ffffff;
  64606. /* k = 18 */
  64607. lo = Math.imul(al9, bl9);
  64608. mid = Math.imul(al9, bh9);
  64609. mid = (mid + Math.imul(ah9, bl9)) | 0;
  64610. hi = Math.imul(ah9, bh9);
  64611. var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  64612. c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
  64613. w18 &= 0x3ffffff;
  64614. o[0] = w0;
  64615. o[1] = w1;
  64616. o[2] = w2;
  64617. o[3] = w3;
  64618. o[4] = w4;
  64619. o[5] = w5;
  64620. o[6] = w6;
  64621. o[7] = w7;
  64622. o[8] = w8;
  64623. o[9] = w9;
  64624. o[10] = w10;
  64625. o[11] = w11;
  64626. o[12] = w12;
  64627. o[13] = w13;
  64628. o[14] = w14;
  64629. o[15] = w15;
  64630. o[16] = w16;
  64631. o[17] = w17;
  64632. o[18] = w18;
  64633. if (c !== 0) {
  64634. o[19] = c;
  64635. out.length++;
  64636. }
  64637. return out;
  64638. };
  64639. // Polyfill comb
  64640. if (!Math.imul) {
  64641. comb10MulTo = smallMulTo;
  64642. }
  64643. function bigMulTo (self, num, out) {
  64644. out.negative = num.negative ^ self.negative;
  64645. out.length = self.length + num.length;
  64646. var carry = 0;
  64647. var hncarry = 0;
  64648. for (var k = 0; k < out.length - 1; k++) {
  64649. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  64650. // note that ncarry could be >= 0x3ffffff
  64651. var ncarry = hncarry;
  64652. hncarry = 0;
  64653. var rword = carry & 0x3ffffff;
  64654. var maxJ = Math.min(k, num.length - 1);
  64655. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  64656. var i = k - j;
  64657. var a = self.words[i] | 0;
  64658. var b = num.words[j] | 0;
  64659. var r = a * b;
  64660. var lo = r & 0x3ffffff;
  64661. ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
  64662. lo = (lo + rword) | 0;
  64663. rword = lo & 0x3ffffff;
  64664. ncarry = (ncarry + (lo >>> 26)) | 0;
  64665. hncarry += ncarry >>> 26;
  64666. ncarry &= 0x3ffffff;
  64667. }
  64668. out.words[k] = rword;
  64669. carry = ncarry;
  64670. ncarry = hncarry;
  64671. }
  64672. if (carry !== 0) {
  64673. out.words[k] = carry;
  64674. } else {
  64675. out.length--;
  64676. }
  64677. return out.strip();
  64678. }
  64679. function jumboMulTo (self, num, out) {
  64680. var fftm = new FFTM();
  64681. return fftm.mulp(self, num, out);
  64682. }
  64683. BN.prototype.mulTo = function mulTo (num, out) {
  64684. var res;
  64685. var len = this.length + num.length;
  64686. if (this.length === 10 && num.length === 10) {
  64687. res = comb10MulTo(this, num, out);
  64688. } else if (len < 63) {
  64689. res = smallMulTo(this, num, out);
  64690. } else if (len < 1024) {
  64691. res = bigMulTo(this, num, out);
  64692. } else {
  64693. res = jumboMulTo(this, num, out);
  64694. }
  64695. return res;
  64696. };
  64697. // Cooley-Tukey algorithm for FFT
  64698. // slightly revisited to rely on looping instead of recursion
  64699. function FFTM (x, y) {
  64700. this.x = x;
  64701. this.y = y;
  64702. }
  64703. FFTM.prototype.makeRBT = function makeRBT (N) {
  64704. var t = new Array(N);
  64705. var l = BN.prototype._countBits(N) - 1;
  64706. for (var i = 0; i < N; i++) {
  64707. t[i] = this.revBin(i, l, N);
  64708. }
  64709. return t;
  64710. };
  64711. // Returns binary-reversed representation of `x`
  64712. FFTM.prototype.revBin = function revBin (x, l, N) {
  64713. if (x === 0 || x === N - 1) return x;
  64714. var rb = 0;
  64715. for (var i = 0; i < l; i++) {
  64716. rb |= (x & 1) << (l - i - 1);
  64717. x >>= 1;
  64718. }
  64719. return rb;
  64720. };
  64721. // Performs "tweedling" phase, therefore 'emulating'
  64722. // behaviour of the recursive algorithm
  64723. FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
  64724. for (var i = 0; i < N; i++) {
  64725. rtws[i] = rws[rbt[i]];
  64726. itws[i] = iws[rbt[i]];
  64727. }
  64728. };
  64729. FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
  64730. this.permute(rbt, rws, iws, rtws, itws, N);
  64731. for (var s = 1; s < N; s <<= 1) {
  64732. var l = s << 1;
  64733. var rtwdf = Math.cos(2 * Math.PI / l);
  64734. var itwdf = Math.sin(2 * Math.PI / l);
  64735. for (var p = 0; p < N; p += l) {
  64736. var rtwdf_ = rtwdf;
  64737. var itwdf_ = itwdf;
  64738. for (var j = 0; j < s; j++) {
  64739. var re = rtws[p + j];
  64740. var ie = itws[p + j];
  64741. var ro = rtws[p + j + s];
  64742. var io = itws[p + j + s];
  64743. var rx = rtwdf_ * ro - itwdf_ * io;
  64744. io = rtwdf_ * io + itwdf_ * ro;
  64745. ro = rx;
  64746. rtws[p + j] = re + ro;
  64747. itws[p + j] = ie + io;
  64748. rtws[p + j + s] = re - ro;
  64749. itws[p + j + s] = ie - io;
  64750. /* jshint maxdepth : false */
  64751. if (j !== l) {
  64752. rx = rtwdf * rtwdf_ - itwdf * itwdf_;
  64753. itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
  64754. rtwdf_ = rx;
  64755. }
  64756. }
  64757. }
  64758. }
  64759. };
  64760. FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
  64761. var N = Math.max(m, n) | 1;
  64762. var odd = N & 1;
  64763. var i = 0;
  64764. for (N = N / 2 | 0; N; N = N >>> 1) {
  64765. i++;
  64766. }
  64767. return 1 << i + 1 + odd;
  64768. };
  64769. FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
  64770. if (N <= 1) return;
  64771. for (var i = 0; i < N / 2; i++) {
  64772. var t = rws[i];
  64773. rws[i] = rws[N - i - 1];
  64774. rws[N - i - 1] = t;
  64775. t = iws[i];
  64776. iws[i] = -iws[N - i - 1];
  64777. iws[N - i - 1] = -t;
  64778. }
  64779. };
  64780. FFTM.prototype.normalize13b = function normalize13b (ws, N) {
  64781. var carry = 0;
  64782. for (var i = 0; i < N / 2; i++) {
  64783. var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
  64784. Math.round(ws[2 * i] / N) +
  64785. carry;
  64786. ws[i] = w & 0x3ffffff;
  64787. if (w < 0x4000000) {
  64788. carry = 0;
  64789. } else {
  64790. carry = w / 0x4000000 | 0;
  64791. }
  64792. }
  64793. return ws;
  64794. };
  64795. FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
  64796. var carry = 0;
  64797. for (var i = 0; i < len; i++) {
  64798. carry = carry + (ws[i] | 0);
  64799. rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
  64800. rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
  64801. }
  64802. // Pad with zeroes
  64803. for (i = 2 * len; i < N; ++i) {
  64804. rws[i] = 0;
  64805. }
  64806. assert(carry === 0);
  64807. assert((carry & ~0x1fff) === 0);
  64808. };
  64809. FFTM.prototype.stub = function stub (N) {
  64810. var ph = new Array(N);
  64811. for (var i = 0; i < N; i++) {
  64812. ph[i] = 0;
  64813. }
  64814. return ph;
  64815. };
  64816. FFTM.prototype.mulp = function mulp (x, y, out) {
  64817. var N = 2 * this.guessLen13b(x.length, y.length);
  64818. var rbt = this.makeRBT(N);
  64819. var _ = this.stub(N);
  64820. var rws = new Array(N);
  64821. var rwst = new Array(N);
  64822. var iwst = new Array(N);
  64823. var nrws = new Array(N);
  64824. var nrwst = new Array(N);
  64825. var niwst = new Array(N);
  64826. var rmws = out.words;
  64827. rmws.length = N;
  64828. this.convert13b(x.words, x.length, rws, N);
  64829. this.convert13b(y.words, y.length, nrws, N);
  64830. this.transform(rws, _, rwst, iwst, N, rbt);
  64831. this.transform(nrws, _, nrwst, niwst, N, rbt);
  64832. for (var i = 0; i < N; i++) {
  64833. var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
  64834. iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
  64835. rwst[i] = rx;
  64836. }
  64837. this.conjugate(rwst, iwst, N);
  64838. this.transform(rwst, iwst, rmws, _, N, rbt);
  64839. this.conjugate(rmws, _, N);
  64840. this.normalize13b(rmws, N);
  64841. out.negative = x.negative ^ y.negative;
  64842. out.length = x.length + y.length;
  64843. return out.strip();
  64844. };
  64845. // Multiply `this` by `num`
  64846. BN.prototype.mul = function mul (num) {
  64847. var out = new BN(null);
  64848. out.words = new Array(this.length + num.length);
  64849. return this.mulTo(num, out);
  64850. };
  64851. // Multiply employing FFT
  64852. BN.prototype.mulf = function mulf (num) {
  64853. var out = new BN(null);
  64854. out.words = new Array(this.length + num.length);
  64855. return jumboMulTo(this, num, out);
  64856. };
  64857. // In-place Multiplication
  64858. BN.prototype.imul = function imul (num) {
  64859. return this.clone().mulTo(num, this);
  64860. };
  64861. BN.prototype.imuln = function imuln (num) {
  64862. assert(typeof num === 'number');
  64863. assert(num < 0x4000000);
  64864. // Carry
  64865. var carry = 0;
  64866. for (var i = 0; i < this.length; i++) {
  64867. var w = (this.words[i] | 0) * num;
  64868. var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
  64869. carry >>= 26;
  64870. carry += (w / 0x4000000) | 0;
  64871. // NOTE: lo is 27bit maximum
  64872. carry += lo >>> 26;
  64873. this.words[i] = lo & 0x3ffffff;
  64874. }
  64875. if (carry !== 0) {
  64876. this.words[i] = carry;
  64877. this.length++;
  64878. }
  64879. return this;
  64880. };
  64881. BN.prototype.muln = function muln (num) {
  64882. return this.clone().imuln(num);
  64883. };
  64884. // `this` * `this`
  64885. BN.prototype.sqr = function sqr () {
  64886. return this.mul(this);
  64887. };
  64888. // `this` * `this` in-place
  64889. BN.prototype.isqr = function isqr () {
  64890. return this.imul(this.clone());
  64891. };
  64892. // Math.pow(`this`, `num`)
  64893. BN.prototype.pow = function pow (num) {
  64894. var w = toBitArray(num);
  64895. if (w.length === 0) return new BN(1);
  64896. // Skip leading zeroes
  64897. var res = this;
  64898. for (var i = 0; i < w.length; i++, res = res.sqr()) {
  64899. if (w[i] !== 0) break;
  64900. }
  64901. if (++i < w.length) {
  64902. for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
  64903. if (w[i] === 0) continue;
  64904. res = res.mul(q);
  64905. }
  64906. }
  64907. return res;
  64908. };
  64909. // Shift-left in-place
  64910. BN.prototype.iushln = function iushln (bits) {
  64911. assert(typeof bits === 'number' && bits >= 0);
  64912. var r = bits % 26;
  64913. var s = (bits - r) / 26;
  64914. var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
  64915. var i;
  64916. if (r !== 0) {
  64917. var carry = 0;
  64918. for (i = 0; i < this.length; i++) {
  64919. var newCarry = this.words[i] & carryMask;
  64920. var c = ((this.words[i] | 0) - newCarry) << r;
  64921. this.words[i] = c | carry;
  64922. carry = newCarry >>> (26 - r);
  64923. }
  64924. if (carry) {
  64925. this.words[i] = carry;
  64926. this.length++;
  64927. }
  64928. }
  64929. if (s !== 0) {
  64930. for (i = this.length - 1; i >= 0; i--) {
  64931. this.words[i + s] = this.words[i];
  64932. }
  64933. for (i = 0; i < s; i++) {
  64934. this.words[i] = 0;
  64935. }
  64936. this.length += s;
  64937. }
  64938. return this.strip();
  64939. };
  64940. BN.prototype.ishln = function ishln (bits) {
  64941. // TODO(indutny): implement me
  64942. assert(this.negative === 0);
  64943. return this.iushln(bits);
  64944. };
  64945. // Shift-right in-place
  64946. // NOTE: `hint` is a lowest bit before trailing zeroes
  64947. // NOTE: if `extended` is present - it will be filled with destroyed bits
  64948. BN.prototype.iushrn = function iushrn (bits, hint, extended) {
  64949. assert(typeof bits === 'number' && bits >= 0);
  64950. var h;
  64951. if (hint) {
  64952. h = (hint - (hint % 26)) / 26;
  64953. } else {
  64954. h = 0;
  64955. }
  64956. var r = bits % 26;
  64957. var s = Math.min((bits - r) / 26, this.length);
  64958. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  64959. var maskedWords = extended;
  64960. h -= s;
  64961. h = Math.max(0, h);
  64962. // Extended mode, copy masked part
  64963. if (maskedWords) {
  64964. for (var i = 0; i < s; i++) {
  64965. maskedWords.words[i] = this.words[i];
  64966. }
  64967. maskedWords.length = s;
  64968. }
  64969. if (s === 0) {
  64970. // No-op, we should not move anything at all
  64971. } else if (this.length > s) {
  64972. this.length -= s;
  64973. for (i = 0; i < this.length; i++) {
  64974. this.words[i] = this.words[i + s];
  64975. }
  64976. } else {
  64977. this.words[0] = 0;
  64978. this.length = 1;
  64979. }
  64980. var carry = 0;
  64981. for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
  64982. var word = this.words[i] | 0;
  64983. this.words[i] = (carry << (26 - r)) | (word >>> r);
  64984. carry = word & mask;
  64985. }
  64986. // Push carried bits as a mask
  64987. if (maskedWords && carry !== 0) {
  64988. maskedWords.words[maskedWords.length++] = carry;
  64989. }
  64990. if (this.length === 0) {
  64991. this.words[0] = 0;
  64992. this.length = 1;
  64993. }
  64994. return this.strip();
  64995. };
  64996. BN.prototype.ishrn = function ishrn (bits, hint, extended) {
  64997. // TODO(indutny): implement me
  64998. assert(this.negative === 0);
  64999. return this.iushrn(bits, hint, extended);
  65000. };
  65001. // Shift-left
  65002. BN.prototype.shln = function shln (bits) {
  65003. return this.clone().ishln(bits);
  65004. };
  65005. BN.prototype.ushln = function ushln (bits) {
  65006. return this.clone().iushln(bits);
  65007. };
  65008. // Shift-right
  65009. BN.prototype.shrn = function shrn (bits) {
  65010. return this.clone().ishrn(bits);
  65011. };
  65012. BN.prototype.ushrn = function ushrn (bits) {
  65013. return this.clone().iushrn(bits);
  65014. };
  65015. // Test if n bit is set
  65016. BN.prototype.testn = function testn (bit) {
  65017. assert(typeof bit === 'number' && bit >= 0);
  65018. var r = bit % 26;
  65019. var s = (bit - r) / 26;
  65020. var q = 1 << r;
  65021. // Fast case: bit is much higher than all existing words
  65022. if (this.length <= s) return false;
  65023. // Check bit and return
  65024. var w = this.words[s];
  65025. return !!(w & q);
  65026. };
  65027. // Return only lowers bits of number (in-place)
  65028. BN.prototype.imaskn = function imaskn (bits) {
  65029. assert(typeof bits === 'number' && bits >= 0);
  65030. var r = bits % 26;
  65031. var s = (bits - r) / 26;
  65032. assert(this.negative === 0, 'imaskn works only with positive numbers');
  65033. if (this.length <= s) {
  65034. return this;
  65035. }
  65036. if (r !== 0) {
  65037. s++;
  65038. }
  65039. this.length = Math.min(s, this.length);
  65040. if (r !== 0) {
  65041. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  65042. this.words[this.length - 1] &= mask;
  65043. }
  65044. return this.strip();
  65045. };
  65046. // Return only lowers bits of number
  65047. BN.prototype.maskn = function maskn (bits) {
  65048. return this.clone().imaskn(bits);
  65049. };
  65050. // Add plain number `num` to `this`
  65051. BN.prototype.iaddn = function iaddn (num) {
  65052. assert(typeof num === 'number');
  65053. assert(num < 0x4000000);
  65054. if (num < 0) return this.isubn(-num);
  65055. // Possible sign change
  65056. if (this.negative !== 0) {
  65057. if (this.length === 1 && (this.words[0] | 0) < num) {
  65058. this.words[0] = num - (this.words[0] | 0);
  65059. this.negative = 0;
  65060. return this;
  65061. }
  65062. this.negative = 0;
  65063. this.isubn(num);
  65064. this.negative = 1;
  65065. return this;
  65066. }
  65067. // Add without checks
  65068. return this._iaddn(num);
  65069. };
  65070. BN.prototype._iaddn = function _iaddn (num) {
  65071. this.words[0] += num;
  65072. // Carry
  65073. for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
  65074. this.words[i] -= 0x4000000;
  65075. if (i === this.length - 1) {
  65076. this.words[i + 1] = 1;
  65077. } else {
  65078. this.words[i + 1]++;
  65079. }
  65080. }
  65081. this.length = Math.max(this.length, i + 1);
  65082. return this;
  65083. };
  65084. // Subtract plain number `num` from `this`
  65085. BN.prototype.isubn = function isubn (num) {
  65086. assert(typeof num === 'number');
  65087. assert(num < 0x4000000);
  65088. if (num < 0) return this.iaddn(-num);
  65089. if (this.negative !== 0) {
  65090. this.negative = 0;
  65091. this.iaddn(num);
  65092. this.negative = 1;
  65093. return this;
  65094. }
  65095. this.words[0] -= num;
  65096. if (this.length === 1 && this.words[0] < 0) {
  65097. this.words[0] = -this.words[0];
  65098. this.negative = 1;
  65099. } else {
  65100. // Carry
  65101. for (var i = 0; i < this.length && this.words[i] < 0; i++) {
  65102. this.words[i] += 0x4000000;
  65103. this.words[i + 1] -= 1;
  65104. }
  65105. }
  65106. return this.strip();
  65107. };
  65108. BN.prototype.addn = function addn (num) {
  65109. return this.clone().iaddn(num);
  65110. };
  65111. BN.prototype.subn = function subn (num) {
  65112. return this.clone().isubn(num);
  65113. };
  65114. BN.prototype.iabs = function iabs () {
  65115. this.negative = 0;
  65116. return this;
  65117. };
  65118. BN.prototype.abs = function abs () {
  65119. return this.clone().iabs();
  65120. };
  65121. BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
  65122. var len = num.length + shift;
  65123. var i;
  65124. this._expand(len);
  65125. var w;
  65126. var carry = 0;
  65127. for (i = 0; i < num.length; i++) {
  65128. w = (this.words[i + shift] | 0) + carry;
  65129. var right = (num.words[i] | 0) * mul;
  65130. w -= right & 0x3ffffff;
  65131. carry = (w >> 26) - ((right / 0x4000000) | 0);
  65132. this.words[i + shift] = w & 0x3ffffff;
  65133. }
  65134. for (; i < this.length - shift; i++) {
  65135. w = (this.words[i + shift] | 0) + carry;
  65136. carry = w >> 26;
  65137. this.words[i + shift] = w & 0x3ffffff;
  65138. }
  65139. if (carry === 0) return this.strip();
  65140. // Subtraction overflow
  65141. assert(carry === -1);
  65142. carry = 0;
  65143. for (i = 0; i < this.length; i++) {
  65144. w = -(this.words[i] | 0) + carry;
  65145. carry = w >> 26;
  65146. this.words[i] = w & 0x3ffffff;
  65147. }
  65148. this.negative = 1;
  65149. return this.strip();
  65150. };
  65151. BN.prototype._wordDiv = function _wordDiv (num, mode) {
  65152. var shift = this.length - num.length;
  65153. var a = this.clone();
  65154. var b = num;
  65155. // Normalize
  65156. var bhi = b.words[b.length - 1] | 0;
  65157. var bhiBits = this._countBits(bhi);
  65158. shift = 26 - bhiBits;
  65159. if (shift !== 0) {
  65160. b = b.ushln(shift);
  65161. a.iushln(shift);
  65162. bhi = b.words[b.length - 1] | 0;
  65163. }
  65164. // Initialize quotient
  65165. var m = a.length - b.length;
  65166. var q;
  65167. if (mode !== 'mod') {
  65168. q = new BN(null);
  65169. q.length = m + 1;
  65170. q.words = new Array(q.length);
  65171. for (var i = 0; i < q.length; i++) {
  65172. q.words[i] = 0;
  65173. }
  65174. }
  65175. var diff = a.clone()._ishlnsubmul(b, 1, m);
  65176. if (diff.negative === 0) {
  65177. a = diff;
  65178. if (q) {
  65179. q.words[m] = 1;
  65180. }
  65181. }
  65182. for (var j = m - 1; j >= 0; j--) {
  65183. var qj = (a.words[b.length + j] | 0) * 0x4000000 +
  65184. (a.words[b.length + j - 1] | 0);
  65185. // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
  65186. // (0x7ffffff)
  65187. qj = Math.min((qj / bhi) | 0, 0x3ffffff);
  65188. a._ishlnsubmul(b, qj, j);
  65189. while (a.negative !== 0) {
  65190. qj--;
  65191. a.negative = 0;
  65192. a._ishlnsubmul(b, 1, j);
  65193. if (!a.isZero()) {
  65194. a.negative ^= 1;
  65195. }
  65196. }
  65197. if (q) {
  65198. q.words[j] = qj;
  65199. }
  65200. }
  65201. if (q) {
  65202. q.strip();
  65203. }
  65204. a.strip();
  65205. // Denormalize
  65206. if (mode !== 'div' && shift !== 0) {
  65207. a.iushrn(shift);
  65208. }
  65209. return {
  65210. div: q || null,
  65211. mod: a
  65212. };
  65213. };
  65214. // NOTE: 1) `mode` can be set to `mod` to request mod only,
  65215. // to `div` to request div only, or be absent to
  65216. // request both div & mod
  65217. // 2) `positive` is true if unsigned mod is requested
  65218. BN.prototype.divmod = function divmod (num, mode, positive) {
  65219. assert(!num.isZero());
  65220. if (this.isZero()) {
  65221. return {
  65222. div: new BN(0),
  65223. mod: new BN(0)
  65224. };
  65225. }
  65226. var div, mod, res;
  65227. if (this.negative !== 0 && num.negative === 0) {
  65228. res = this.neg().divmod(num, mode);
  65229. if (mode !== 'mod') {
  65230. div = res.div.neg();
  65231. }
  65232. if (mode !== 'div') {
  65233. mod = res.mod.neg();
  65234. if (positive && mod.negative !== 0) {
  65235. mod.iadd(num);
  65236. }
  65237. }
  65238. return {
  65239. div: div,
  65240. mod: mod
  65241. };
  65242. }
  65243. if (this.negative === 0 && num.negative !== 0) {
  65244. res = this.divmod(num.neg(), mode);
  65245. if (mode !== 'mod') {
  65246. div = res.div.neg();
  65247. }
  65248. return {
  65249. div: div,
  65250. mod: res.mod
  65251. };
  65252. }
  65253. if ((this.negative & num.negative) !== 0) {
  65254. res = this.neg().divmod(num.neg(), mode);
  65255. if (mode !== 'div') {
  65256. mod = res.mod.neg();
  65257. if (positive && mod.negative !== 0) {
  65258. mod.isub(num);
  65259. }
  65260. }
  65261. return {
  65262. div: res.div,
  65263. mod: mod
  65264. };
  65265. }
  65266. // Both numbers are positive at this point
  65267. // Strip both numbers to approximate shift value
  65268. if (num.length > this.length || this.cmp(num) < 0) {
  65269. return {
  65270. div: new BN(0),
  65271. mod: this
  65272. };
  65273. }
  65274. // Very short reduction
  65275. if (num.length === 1) {
  65276. if (mode === 'div') {
  65277. return {
  65278. div: this.divn(num.words[0]),
  65279. mod: null
  65280. };
  65281. }
  65282. if (mode === 'mod') {
  65283. return {
  65284. div: null,
  65285. mod: new BN(this.modn(num.words[0]))
  65286. };
  65287. }
  65288. return {
  65289. div: this.divn(num.words[0]),
  65290. mod: new BN(this.modn(num.words[0]))
  65291. };
  65292. }
  65293. return this._wordDiv(num, mode);
  65294. };
  65295. // Find `this` / `num`
  65296. BN.prototype.div = function div (num) {
  65297. return this.divmod(num, 'div', false).div;
  65298. };
  65299. // Find `this` % `num`
  65300. BN.prototype.mod = function mod (num) {
  65301. return this.divmod(num, 'mod', false).mod;
  65302. };
  65303. BN.prototype.umod = function umod (num) {
  65304. return this.divmod(num, 'mod', true).mod;
  65305. };
  65306. // Find Round(`this` / `num`)
  65307. BN.prototype.divRound = function divRound (num) {
  65308. var dm = this.divmod(num);
  65309. // Fast case - exact division
  65310. if (dm.mod.isZero()) return dm.div;
  65311. var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
  65312. var half = num.ushrn(1);
  65313. var r2 = num.andln(1);
  65314. var cmp = mod.cmp(half);
  65315. // Round down
  65316. if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
  65317. // Round up
  65318. return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
  65319. };
  65320. BN.prototype.modn = function modn (num) {
  65321. assert(num <= 0x3ffffff);
  65322. var p = (1 << 26) % num;
  65323. var acc = 0;
  65324. for (var i = this.length - 1; i >= 0; i--) {
  65325. acc = (p * acc + (this.words[i] | 0)) % num;
  65326. }
  65327. return acc;
  65328. };
  65329. // In-place division by number
  65330. BN.prototype.idivn = function idivn (num) {
  65331. assert(num <= 0x3ffffff);
  65332. var carry = 0;
  65333. for (var i = this.length - 1; i >= 0; i--) {
  65334. var w = (this.words[i] | 0) + carry * 0x4000000;
  65335. this.words[i] = (w / num) | 0;
  65336. carry = w % num;
  65337. }
  65338. return this.strip();
  65339. };
  65340. BN.prototype.divn = function divn (num) {
  65341. return this.clone().idivn(num);
  65342. };
  65343. BN.prototype.egcd = function egcd (p) {
  65344. assert(p.negative === 0);
  65345. assert(!p.isZero());
  65346. var x = this;
  65347. var y = p.clone();
  65348. if (x.negative !== 0) {
  65349. x = x.umod(p);
  65350. } else {
  65351. x = x.clone();
  65352. }
  65353. // A * x + B * y = x
  65354. var A = new BN(1);
  65355. var B = new BN(0);
  65356. // C * x + D * y = y
  65357. var C = new BN(0);
  65358. var D = new BN(1);
  65359. var g = 0;
  65360. while (x.isEven() && y.isEven()) {
  65361. x.iushrn(1);
  65362. y.iushrn(1);
  65363. ++g;
  65364. }
  65365. var yp = y.clone();
  65366. var xp = x.clone();
  65367. while (!x.isZero()) {
  65368. for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  65369. if (i > 0) {
  65370. x.iushrn(i);
  65371. while (i-- > 0) {
  65372. if (A.isOdd() || B.isOdd()) {
  65373. A.iadd(yp);
  65374. B.isub(xp);
  65375. }
  65376. A.iushrn(1);
  65377. B.iushrn(1);
  65378. }
  65379. }
  65380. for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  65381. if (j > 0) {
  65382. y.iushrn(j);
  65383. while (j-- > 0) {
  65384. if (C.isOdd() || D.isOdd()) {
  65385. C.iadd(yp);
  65386. D.isub(xp);
  65387. }
  65388. C.iushrn(1);
  65389. D.iushrn(1);
  65390. }
  65391. }
  65392. if (x.cmp(y) >= 0) {
  65393. x.isub(y);
  65394. A.isub(C);
  65395. B.isub(D);
  65396. } else {
  65397. y.isub(x);
  65398. C.isub(A);
  65399. D.isub(B);
  65400. }
  65401. }
  65402. return {
  65403. a: C,
  65404. b: D,
  65405. gcd: y.iushln(g)
  65406. };
  65407. };
  65408. // This is reduced incarnation of the binary EEA
  65409. // above, designated to invert members of the
  65410. // _prime_ fields F(p) at a maximal speed
  65411. BN.prototype._invmp = function _invmp (p) {
  65412. assert(p.negative === 0);
  65413. assert(!p.isZero());
  65414. var a = this;
  65415. var b = p.clone();
  65416. if (a.negative !== 0) {
  65417. a = a.umod(p);
  65418. } else {
  65419. a = a.clone();
  65420. }
  65421. var x1 = new BN(1);
  65422. var x2 = new BN(0);
  65423. var delta = b.clone();
  65424. while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
  65425. for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  65426. if (i > 0) {
  65427. a.iushrn(i);
  65428. while (i-- > 0) {
  65429. if (x1.isOdd()) {
  65430. x1.iadd(delta);
  65431. }
  65432. x1.iushrn(1);
  65433. }
  65434. }
  65435. for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  65436. if (j > 0) {
  65437. b.iushrn(j);
  65438. while (j-- > 0) {
  65439. if (x2.isOdd()) {
  65440. x2.iadd(delta);
  65441. }
  65442. x2.iushrn(1);
  65443. }
  65444. }
  65445. if (a.cmp(b) >= 0) {
  65446. a.isub(b);
  65447. x1.isub(x2);
  65448. } else {
  65449. b.isub(a);
  65450. x2.isub(x1);
  65451. }
  65452. }
  65453. var res;
  65454. if (a.cmpn(1) === 0) {
  65455. res = x1;
  65456. } else {
  65457. res = x2;
  65458. }
  65459. if (res.cmpn(0) < 0) {
  65460. res.iadd(p);
  65461. }
  65462. return res;
  65463. };
  65464. BN.prototype.gcd = function gcd (num) {
  65465. if (this.isZero()) return num.abs();
  65466. if (num.isZero()) return this.abs();
  65467. var a = this.clone();
  65468. var b = num.clone();
  65469. a.negative = 0;
  65470. b.negative = 0;
  65471. // Remove common factor of two
  65472. for (var shift = 0; a.isEven() && b.isEven(); shift++) {
  65473. a.iushrn(1);
  65474. b.iushrn(1);
  65475. }
  65476. do {
  65477. while (a.isEven()) {
  65478. a.iushrn(1);
  65479. }
  65480. while (b.isEven()) {
  65481. b.iushrn(1);
  65482. }
  65483. var r = a.cmp(b);
  65484. if (r < 0) {
  65485. // Swap `a` and `b` to make `a` always bigger than `b`
  65486. var t = a;
  65487. a = b;
  65488. b = t;
  65489. } else if (r === 0 || b.cmpn(1) === 0) {
  65490. break;
  65491. }
  65492. a.isub(b);
  65493. } while (true);
  65494. return b.iushln(shift);
  65495. };
  65496. // Invert number in the field F(num)
  65497. BN.prototype.invm = function invm (num) {
  65498. return this.egcd(num).a.umod(num);
  65499. };
  65500. BN.prototype.isEven = function isEven () {
  65501. return (this.words[0] & 1) === 0;
  65502. };
  65503. BN.prototype.isOdd = function isOdd () {
  65504. return (this.words[0] & 1) === 1;
  65505. };
  65506. // And first word and num
  65507. BN.prototype.andln = function andln (num) {
  65508. return this.words[0] & num;
  65509. };
  65510. // Increment at the bit position in-line
  65511. BN.prototype.bincn = function bincn (bit) {
  65512. assert(typeof bit === 'number');
  65513. var r = bit % 26;
  65514. var s = (bit - r) / 26;
  65515. var q = 1 << r;
  65516. // Fast case: bit is much higher than all existing words
  65517. if (this.length <= s) {
  65518. this._expand(s + 1);
  65519. this.words[s] |= q;
  65520. return this;
  65521. }
  65522. // Add bit and propagate, if needed
  65523. var carry = q;
  65524. for (var i = s; carry !== 0 && i < this.length; i++) {
  65525. var w = this.words[i] | 0;
  65526. w += carry;
  65527. carry = w >>> 26;
  65528. w &= 0x3ffffff;
  65529. this.words[i] = w;
  65530. }
  65531. if (carry !== 0) {
  65532. this.words[i] = carry;
  65533. this.length++;
  65534. }
  65535. return this;
  65536. };
  65537. BN.prototype.isZero = function isZero () {
  65538. return this.length === 1 && this.words[0] === 0;
  65539. };
  65540. BN.prototype.cmpn = function cmpn (num) {
  65541. var negative = num < 0;
  65542. if (this.negative !== 0 && !negative) return -1;
  65543. if (this.negative === 0 && negative) return 1;
  65544. this.strip();
  65545. var res;
  65546. if (this.length > 1) {
  65547. res = 1;
  65548. } else {
  65549. if (negative) {
  65550. num = -num;
  65551. }
  65552. assert(num <= 0x3ffffff, 'Number is too big');
  65553. var w = this.words[0] | 0;
  65554. res = w === num ? 0 : w < num ? -1 : 1;
  65555. }
  65556. if (this.negative !== 0) return -res | 0;
  65557. return res;
  65558. };
  65559. // Compare two numbers and return:
  65560. // 1 - if `this` > `num`
  65561. // 0 - if `this` == `num`
  65562. // -1 - if `this` < `num`
  65563. BN.prototype.cmp = function cmp (num) {
  65564. if (this.negative !== 0 && num.negative === 0) return -1;
  65565. if (this.negative === 0 && num.negative !== 0) return 1;
  65566. var res = this.ucmp(num);
  65567. if (this.negative !== 0) return -res | 0;
  65568. return res;
  65569. };
  65570. // Unsigned comparison
  65571. BN.prototype.ucmp = function ucmp (num) {
  65572. // At this point both numbers have the same sign
  65573. if (this.length > num.length) return 1;
  65574. if (this.length < num.length) return -1;
  65575. var res = 0;
  65576. for (var i = this.length - 1; i >= 0; i--) {
  65577. var a = this.words[i] | 0;
  65578. var b = num.words[i] | 0;
  65579. if (a === b) continue;
  65580. if (a < b) {
  65581. res = -1;
  65582. } else if (a > b) {
  65583. res = 1;
  65584. }
  65585. break;
  65586. }
  65587. return res;
  65588. };
  65589. BN.prototype.gtn = function gtn (num) {
  65590. return this.cmpn(num) === 1;
  65591. };
  65592. BN.prototype.gt = function gt (num) {
  65593. return this.cmp(num) === 1;
  65594. };
  65595. BN.prototype.gten = function gten (num) {
  65596. return this.cmpn(num) >= 0;
  65597. };
  65598. BN.prototype.gte = function gte (num) {
  65599. return this.cmp(num) >= 0;
  65600. };
  65601. BN.prototype.ltn = function ltn (num) {
  65602. return this.cmpn(num) === -1;
  65603. };
  65604. BN.prototype.lt = function lt (num) {
  65605. return this.cmp(num) === -1;
  65606. };
  65607. BN.prototype.lten = function lten (num) {
  65608. return this.cmpn(num) <= 0;
  65609. };
  65610. BN.prototype.lte = function lte (num) {
  65611. return this.cmp(num) <= 0;
  65612. };
  65613. BN.prototype.eqn = function eqn (num) {
  65614. return this.cmpn(num) === 0;
  65615. };
  65616. BN.prototype.eq = function eq (num) {
  65617. return this.cmp(num) === 0;
  65618. };
  65619. //
  65620. // A reduce context, could be using montgomery or something better, depending
  65621. // on the `m` itself.
  65622. //
  65623. BN.red = function red (num) {
  65624. return new Red(num);
  65625. };
  65626. BN.prototype.toRed = function toRed (ctx) {
  65627. assert(!this.red, 'Already a number in reduction context');
  65628. assert(this.negative === 0, 'red works only with positives');
  65629. return ctx.convertTo(this)._forceRed(ctx);
  65630. };
  65631. BN.prototype.fromRed = function fromRed () {
  65632. assert(this.red, 'fromRed works only with numbers in reduction context');
  65633. return this.red.convertFrom(this);
  65634. };
  65635. BN.prototype._forceRed = function _forceRed (ctx) {
  65636. this.red = ctx;
  65637. return this;
  65638. };
  65639. BN.prototype.forceRed = function forceRed (ctx) {
  65640. assert(!this.red, 'Already a number in reduction context');
  65641. return this._forceRed(ctx);
  65642. };
  65643. BN.prototype.redAdd = function redAdd (num) {
  65644. assert(this.red, 'redAdd works only with red numbers');
  65645. return this.red.add(this, num);
  65646. };
  65647. BN.prototype.redIAdd = function redIAdd (num) {
  65648. assert(this.red, 'redIAdd works only with red numbers');
  65649. return this.red.iadd(this, num);
  65650. };
  65651. BN.prototype.redSub = function redSub (num) {
  65652. assert(this.red, 'redSub works only with red numbers');
  65653. return this.red.sub(this, num);
  65654. };
  65655. BN.prototype.redISub = function redISub (num) {
  65656. assert(this.red, 'redISub works only with red numbers');
  65657. return this.red.isub(this, num);
  65658. };
  65659. BN.prototype.redShl = function redShl (num) {
  65660. assert(this.red, 'redShl works only with red numbers');
  65661. return this.red.shl(this, num);
  65662. };
  65663. BN.prototype.redMul = function redMul (num) {
  65664. assert(this.red, 'redMul works only with red numbers');
  65665. this.red._verify2(this, num);
  65666. return this.red.mul(this, num);
  65667. };
  65668. BN.prototype.redIMul = function redIMul (num) {
  65669. assert(this.red, 'redMul works only with red numbers');
  65670. this.red._verify2(this, num);
  65671. return this.red.imul(this, num);
  65672. };
  65673. BN.prototype.redSqr = function redSqr () {
  65674. assert(this.red, 'redSqr works only with red numbers');
  65675. this.red._verify1(this);
  65676. return this.red.sqr(this);
  65677. };
  65678. BN.prototype.redISqr = function redISqr () {
  65679. assert(this.red, 'redISqr works only with red numbers');
  65680. this.red._verify1(this);
  65681. return this.red.isqr(this);
  65682. };
  65683. // Square root over p
  65684. BN.prototype.redSqrt = function redSqrt () {
  65685. assert(this.red, 'redSqrt works only with red numbers');
  65686. this.red._verify1(this);
  65687. return this.red.sqrt(this);
  65688. };
  65689. BN.prototype.redInvm = function redInvm () {
  65690. assert(this.red, 'redInvm works only with red numbers');
  65691. this.red._verify1(this);
  65692. return this.red.invm(this);
  65693. };
  65694. // Return negative clone of `this` % `red modulo`
  65695. BN.prototype.redNeg = function redNeg () {
  65696. assert(this.red, 'redNeg works only with red numbers');
  65697. this.red._verify1(this);
  65698. return this.red.neg(this);
  65699. };
  65700. BN.prototype.redPow = function redPow (num) {
  65701. assert(this.red && !num.red, 'redPow(normalNum)');
  65702. this.red._verify1(this);
  65703. return this.red.pow(this, num);
  65704. };
  65705. // Prime numbers with efficient reduction
  65706. var primes = {
  65707. k256: null,
  65708. p224: null,
  65709. p192: null,
  65710. p25519: null
  65711. };
  65712. // Pseudo-Mersenne prime
  65713. function MPrime (name, p) {
  65714. // P = 2 ^ N - K
  65715. this.name = name;
  65716. this.p = new BN(p, 16);
  65717. this.n = this.p.bitLength();
  65718. this.k = new BN(1).iushln(this.n).isub(this.p);
  65719. this.tmp = this._tmp();
  65720. }
  65721. MPrime.prototype._tmp = function _tmp () {
  65722. var tmp = new BN(null);
  65723. tmp.words = new Array(Math.ceil(this.n / 13));
  65724. return tmp;
  65725. };
  65726. MPrime.prototype.ireduce = function ireduce (num) {
  65727. // Assumes that `num` is less than `P^2`
  65728. // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
  65729. var r = num;
  65730. var rlen;
  65731. do {
  65732. this.split(r, this.tmp);
  65733. r = this.imulK(r);
  65734. r = r.iadd(this.tmp);
  65735. rlen = r.bitLength();
  65736. } while (rlen > this.n);
  65737. var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
  65738. if (cmp === 0) {
  65739. r.words[0] = 0;
  65740. r.length = 1;
  65741. } else if (cmp > 0) {
  65742. r.isub(this.p);
  65743. } else {
  65744. if (r.strip !== undefined) {
  65745. // r is BN v4 instance
  65746. r.strip();
  65747. } else {
  65748. // r is BN v5 instance
  65749. r._strip();
  65750. }
  65751. }
  65752. return r;
  65753. };
  65754. MPrime.prototype.split = function split (input, out) {
  65755. input.iushrn(this.n, 0, out);
  65756. };
  65757. MPrime.prototype.imulK = function imulK (num) {
  65758. return num.imul(this.k);
  65759. };
  65760. function K256 () {
  65761. MPrime.call(
  65762. this,
  65763. 'k256',
  65764. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
  65765. }
  65766. inherits(K256, MPrime);
  65767. K256.prototype.split = function split (input, output) {
  65768. // 256 = 9 * 26 + 22
  65769. var mask = 0x3fffff;
  65770. var outLen = Math.min(input.length, 9);
  65771. for (var i = 0; i < outLen; i++) {
  65772. output.words[i] = input.words[i];
  65773. }
  65774. output.length = outLen;
  65775. if (input.length <= 9) {
  65776. input.words[0] = 0;
  65777. input.length = 1;
  65778. return;
  65779. }
  65780. // Shift by 9 limbs
  65781. var prev = input.words[9];
  65782. output.words[output.length++] = prev & mask;
  65783. for (i = 10; i < input.length; i++) {
  65784. var next = input.words[i] | 0;
  65785. input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
  65786. prev = next;
  65787. }
  65788. prev >>>= 22;
  65789. input.words[i - 10] = prev;
  65790. if (prev === 0 && input.length > 10) {
  65791. input.length -= 10;
  65792. } else {
  65793. input.length -= 9;
  65794. }
  65795. };
  65796. K256.prototype.imulK = function imulK (num) {
  65797. // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
  65798. num.words[num.length] = 0;
  65799. num.words[num.length + 1] = 0;
  65800. num.length += 2;
  65801. // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
  65802. var lo = 0;
  65803. for (var i = 0; i < num.length; i++) {
  65804. var w = num.words[i] | 0;
  65805. lo += w * 0x3d1;
  65806. num.words[i] = lo & 0x3ffffff;
  65807. lo = w * 0x40 + ((lo / 0x4000000) | 0);
  65808. }
  65809. // Fast length reduction
  65810. if (num.words[num.length - 1] === 0) {
  65811. num.length--;
  65812. if (num.words[num.length - 1] === 0) {
  65813. num.length--;
  65814. }
  65815. }
  65816. return num;
  65817. };
  65818. function P224 () {
  65819. MPrime.call(
  65820. this,
  65821. 'p224',
  65822. 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
  65823. }
  65824. inherits(P224, MPrime);
  65825. function P192 () {
  65826. MPrime.call(
  65827. this,
  65828. 'p192',
  65829. 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
  65830. }
  65831. inherits(P192, MPrime);
  65832. function P25519 () {
  65833. // 2 ^ 255 - 19
  65834. MPrime.call(
  65835. this,
  65836. '25519',
  65837. '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
  65838. }
  65839. inherits(P25519, MPrime);
  65840. P25519.prototype.imulK = function imulK (num) {
  65841. // K = 0x13
  65842. var carry = 0;
  65843. for (var i = 0; i < num.length; i++) {
  65844. var hi = (num.words[i] | 0) * 0x13 + carry;
  65845. var lo = hi & 0x3ffffff;
  65846. hi >>>= 26;
  65847. num.words[i] = lo;
  65848. carry = hi;
  65849. }
  65850. if (carry !== 0) {
  65851. num.words[num.length++] = carry;
  65852. }
  65853. return num;
  65854. };
  65855. // Exported mostly for testing purposes, use plain name instead
  65856. BN._prime = function prime (name) {
  65857. // Cached version of prime
  65858. if (primes[name]) return primes[name];
  65859. var prime;
  65860. if (name === 'k256') {
  65861. prime = new K256();
  65862. } else if (name === 'p224') {
  65863. prime = new P224();
  65864. } else if (name === 'p192') {
  65865. prime = new P192();
  65866. } else if (name === 'p25519') {
  65867. prime = new P25519();
  65868. } else {
  65869. throw new Error('Unknown prime ' + name);
  65870. }
  65871. primes[name] = prime;
  65872. return prime;
  65873. };
  65874. //
  65875. // Base reduction engine
  65876. //
  65877. function Red (m) {
  65878. if (typeof m === 'string') {
  65879. var prime = BN._prime(m);
  65880. this.m = prime.p;
  65881. this.prime = prime;
  65882. } else {
  65883. assert(m.gtn(1), 'modulus must be greater than 1');
  65884. this.m = m;
  65885. this.prime = null;
  65886. }
  65887. }
  65888. Red.prototype._verify1 = function _verify1 (a) {
  65889. assert(a.negative === 0, 'red works only with positives');
  65890. assert(a.red, 'red works only with red numbers');
  65891. };
  65892. Red.prototype._verify2 = function _verify2 (a, b) {
  65893. assert((a.negative | b.negative) === 0, 'red works only with positives');
  65894. assert(a.red && a.red === b.red,
  65895. 'red works only with red numbers');
  65896. };
  65897. Red.prototype.imod = function imod (a) {
  65898. if (this.prime) return this.prime.ireduce(a)._forceRed(this);
  65899. return a.umod(this.m)._forceRed(this);
  65900. };
  65901. Red.prototype.neg = function neg (a) {
  65902. if (a.isZero()) {
  65903. return a.clone();
  65904. }
  65905. return this.m.sub(a)._forceRed(this);
  65906. };
  65907. Red.prototype.add = function add (a, b) {
  65908. this._verify2(a, b);
  65909. var res = a.add(b);
  65910. if (res.cmp(this.m) >= 0) {
  65911. res.isub(this.m);
  65912. }
  65913. return res._forceRed(this);
  65914. };
  65915. Red.prototype.iadd = function iadd (a, b) {
  65916. this._verify2(a, b);
  65917. var res = a.iadd(b);
  65918. if (res.cmp(this.m) >= 0) {
  65919. res.isub(this.m);
  65920. }
  65921. return res;
  65922. };
  65923. Red.prototype.sub = function sub (a, b) {
  65924. this._verify2(a, b);
  65925. var res = a.sub(b);
  65926. if (res.cmpn(0) < 0) {
  65927. res.iadd(this.m);
  65928. }
  65929. return res._forceRed(this);
  65930. };
  65931. Red.prototype.isub = function isub (a, b) {
  65932. this._verify2(a, b);
  65933. var res = a.isub(b);
  65934. if (res.cmpn(0) < 0) {
  65935. res.iadd(this.m);
  65936. }
  65937. return res;
  65938. };
  65939. Red.prototype.shl = function shl (a, num) {
  65940. this._verify1(a);
  65941. return this.imod(a.ushln(num));
  65942. };
  65943. Red.prototype.imul = function imul (a, b) {
  65944. this._verify2(a, b);
  65945. return this.imod(a.imul(b));
  65946. };
  65947. Red.prototype.mul = function mul (a, b) {
  65948. this._verify2(a, b);
  65949. return this.imod(a.mul(b));
  65950. };
  65951. Red.prototype.isqr = function isqr (a) {
  65952. return this.imul(a, a.clone());
  65953. };
  65954. Red.prototype.sqr = function sqr (a) {
  65955. return this.mul(a, a);
  65956. };
  65957. Red.prototype.sqrt = function sqrt (a) {
  65958. if (a.isZero()) return a.clone();
  65959. var mod3 = this.m.andln(3);
  65960. assert(mod3 % 2 === 1);
  65961. // Fast case
  65962. if (mod3 === 3) {
  65963. var pow = this.m.add(new BN(1)).iushrn(2);
  65964. return this.pow(a, pow);
  65965. }
  65966. // Tonelli-Shanks algorithm (Totally unoptimized and slow)
  65967. //
  65968. // Find Q and S, that Q * 2 ^ S = (P - 1)
  65969. var q = this.m.subn(1);
  65970. var s = 0;
  65971. while (!q.isZero() && q.andln(1) === 0) {
  65972. s++;
  65973. q.iushrn(1);
  65974. }
  65975. assert(!q.isZero());
  65976. var one = new BN(1).toRed(this);
  65977. var nOne = one.redNeg();
  65978. // Find quadratic non-residue
  65979. // NOTE: Max is such because of generalized Riemann hypothesis.
  65980. var lpow = this.m.subn(1).iushrn(1);
  65981. var z = this.m.bitLength();
  65982. z = new BN(2 * z * z).toRed(this);
  65983. while (this.pow(z, lpow).cmp(nOne) !== 0) {
  65984. z.redIAdd(nOne);
  65985. }
  65986. var c = this.pow(z, q);
  65987. var r = this.pow(a, q.addn(1).iushrn(1));
  65988. var t = this.pow(a, q);
  65989. var m = s;
  65990. while (t.cmp(one) !== 0) {
  65991. var tmp = t;
  65992. for (var i = 0; tmp.cmp(one) !== 0; i++) {
  65993. tmp = tmp.redSqr();
  65994. }
  65995. assert(i < m);
  65996. var b = this.pow(c, new BN(1).iushln(m - i - 1));
  65997. r = r.redMul(b);
  65998. c = b.redSqr();
  65999. t = t.redMul(c);
  66000. m = i;
  66001. }
  66002. return r;
  66003. };
  66004. Red.prototype.invm = function invm (a) {
  66005. var inv = a._invmp(this.m);
  66006. if (inv.negative !== 0) {
  66007. inv.negative = 0;
  66008. return this.imod(inv).redNeg();
  66009. } else {
  66010. return this.imod(inv);
  66011. }
  66012. };
  66013. Red.prototype.pow = function pow (a, num) {
  66014. if (num.isZero()) return new BN(1).toRed(this);
  66015. if (num.cmpn(1) === 0) return a.clone();
  66016. var windowSize = 4;
  66017. var wnd = new Array(1 << windowSize);
  66018. wnd[0] = new BN(1).toRed(this);
  66019. wnd[1] = a;
  66020. for (var i = 2; i < wnd.length; i++) {
  66021. wnd[i] = this.mul(wnd[i - 1], a);
  66022. }
  66023. var res = wnd[0];
  66024. var current = 0;
  66025. var currentLen = 0;
  66026. var start = num.bitLength() % 26;
  66027. if (start === 0) {
  66028. start = 26;
  66029. }
  66030. for (i = num.length - 1; i >= 0; i--) {
  66031. var word = num.words[i];
  66032. for (var j = start - 1; j >= 0; j--) {
  66033. var bit = (word >> j) & 1;
  66034. if (res !== wnd[0]) {
  66035. res = this.sqr(res);
  66036. }
  66037. if (bit === 0 && current === 0) {
  66038. currentLen = 0;
  66039. continue;
  66040. }
  66041. current <<= 1;
  66042. current |= bit;
  66043. currentLen++;
  66044. if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
  66045. res = this.mul(res, wnd[current]);
  66046. currentLen = 0;
  66047. current = 0;
  66048. }
  66049. start = 26;
  66050. }
  66051. return res;
  66052. };
  66053. Red.prototype.convertTo = function convertTo (num) {
  66054. var r = num.umod(this.m);
  66055. return r === num ? r.clone() : r;
  66056. };
  66057. Red.prototype.convertFrom = function convertFrom (num) {
  66058. var res = num.clone();
  66059. res.red = null;
  66060. return res;
  66061. };
  66062. //
  66063. // Montgomery method engine
  66064. //
  66065. BN.mont = function mont (num) {
  66066. return new Mont(num);
  66067. };
  66068. function Mont (m) {
  66069. Red.call(this, m);
  66070. this.shift = this.m.bitLength();
  66071. if (this.shift % 26 !== 0) {
  66072. this.shift += 26 - (this.shift % 26);
  66073. }
  66074. this.r = new BN(1).iushln(this.shift);
  66075. this.r2 = this.imod(this.r.sqr());
  66076. this.rinv = this.r._invmp(this.m);
  66077. this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
  66078. this.minv = this.minv.umod(this.r);
  66079. this.minv = this.r.sub(this.minv);
  66080. }
  66081. inherits(Mont, Red);
  66082. Mont.prototype.convertTo = function convertTo (num) {
  66083. return this.imod(num.ushln(this.shift));
  66084. };
  66085. Mont.prototype.convertFrom = function convertFrom (num) {
  66086. var r = this.imod(num.mul(this.rinv));
  66087. r.red = null;
  66088. return r;
  66089. };
  66090. Mont.prototype.imul = function imul (a, b) {
  66091. if (a.isZero() || b.isZero()) {
  66092. a.words[0] = 0;
  66093. a.length = 1;
  66094. return a;
  66095. }
  66096. var t = a.imul(b);
  66097. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  66098. var u = t.isub(c).iushrn(this.shift);
  66099. var res = u;
  66100. if (u.cmp(this.m) >= 0) {
  66101. res = u.isub(this.m);
  66102. } else if (u.cmpn(0) < 0) {
  66103. res = u.iadd(this.m);
  66104. }
  66105. return res._forceRed(this);
  66106. };
  66107. Mont.prototype.mul = function mul (a, b) {
  66108. if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
  66109. var t = a.mul(b);
  66110. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  66111. var u = t.isub(c).iushrn(this.shift);
  66112. var res = u;
  66113. if (u.cmp(this.m) >= 0) {
  66114. res = u.isub(this.m);
  66115. } else if (u.cmpn(0) < 0) {
  66116. res = u.iadd(this.m);
  66117. }
  66118. return res._forceRed(this);
  66119. };
  66120. Mont.prototype.invm = function invm (a) {
  66121. // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
  66122. var res = this.imod(a._invmp(this.m).mul(this.r2));
  66123. return res._forceRed(this);
  66124. };
  66125. })( false || module, this);
  66126. /***/ }),
  66127. /***/ 79746:
  66128. /***/ ((module) => {
  66129. module.exports = assert;
  66130. function assert(val, msg) {
  66131. if (!val)
  66132. throw new Error(msg || 'Assertion failed');
  66133. }
  66134. assert.equal = function assertEqual(l, r, msg) {
  66135. if (l != r)
  66136. throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
  66137. };
  66138. /***/ }),
  66139. /***/ 34504:
  66140. /***/ ((__unused_webpack_module, exports) => {
  66141. "use strict";
  66142. var utils = exports;
  66143. function toArray(msg, enc) {
  66144. if (Array.isArray(msg))
  66145. return msg.slice();
  66146. if (!msg)
  66147. return [];
  66148. var res = [];
  66149. if (typeof msg !== 'string') {
  66150. for (var i = 0; i < msg.length; i++)
  66151. res[i] = msg[i] | 0;
  66152. return res;
  66153. }
  66154. if (enc === 'hex') {
  66155. msg = msg.replace(/[^a-z0-9]+/ig, '');
  66156. if (msg.length % 2 !== 0)
  66157. msg = '0' + msg;
  66158. for (var i = 0; i < msg.length; i += 2)
  66159. res.push(parseInt(msg[i] + msg[i + 1], 16));
  66160. } else {
  66161. for (var i = 0; i < msg.length; i++) {
  66162. var c = msg.charCodeAt(i);
  66163. var hi = c >> 8;
  66164. var lo = c & 0xff;
  66165. if (hi)
  66166. res.push(hi, lo);
  66167. else
  66168. res.push(lo);
  66169. }
  66170. }
  66171. return res;
  66172. }
  66173. utils.toArray = toArray;
  66174. function zero2(word) {
  66175. if (word.length === 1)
  66176. return '0' + word;
  66177. else
  66178. return word;
  66179. }
  66180. utils.zero2 = zero2;
  66181. function toHex(msg) {
  66182. var res = '';
  66183. for (var i = 0; i < msg.length; i++)
  66184. res += zero2(msg[i].toString(16));
  66185. return res;
  66186. }
  66187. utils.toHex = toHex;
  66188. utils.encode = function encode(arr, enc) {
  66189. if (enc === 'hex')
  66190. return toHex(arr);
  66191. else
  66192. return arr;
  66193. };
  66194. /***/ }),
  66195. /***/ 24244:
  66196. /***/ ((module) => {
  66197. "use strict";
  66198. var numberIsNaN = function (value) {
  66199. return value !== value;
  66200. };
  66201. module.exports = function is(a, b) {
  66202. if (a === 0 && b === 0) {
  66203. return 1 / a === 1 / b;
  66204. }
  66205. if (a === b) {
  66206. return true;
  66207. }
  66208. if (numberIsNaN(a) && numberIsNaN(b)) {
  66209. return true;
  66210. }
  66211. return false;
  66212. };
  66213. /***/ }),
  66214. /***/ 20609:
  66215. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66216. "use strict";
  66217. var define = __webpack_require__(4289);
  66218. var callBind = __webpack_require__(55559);
  66219. var implementation = __webpack_require__(24244);
  66220. var getPolyfill = __webpack_require__(75624);
  66221. var shim = __webpack_require__(52281);
  66222. var polyfill = callBind(getPolyfill(), Object);
  66223. define(polyfill, {
  66224. getPolyfill: getPolyfill,
  66225. implementation: implementation,
  66226. shim: shim
  66227. });
  66228. module.exports = polyfill;
  66229. /***/ }),
  66230. /***/ 75624:
  66231. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66232. "use strict";
  66233. var implementation = __webpack_require__(24244);
  66234. module.exports = function getPolyfill() {
  66235. return typeof Object.is === 'function' ? Object.is : implementation;
  66236. };
  66237. /***/ }),
  66238. /***/ 52281:
  66239. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66240. "use strict";
  66241. var getPolyfill = __webpack_require__(75624);
  66242. var define = __webpack_require__(4289);
  66243. module.exports = function shimObjectIs() {
  66244. var polyfill = getPolyfill();
  66245. define(Object, { is: polyfill }, {
  66246. is: function testObjectIs() {
  66247. return Object.is !== polyfill;
  66248. }
  66249. });
  66250. return polyfill;
  66251. };
  66252. /***/ }),
  66253. /***/ 18987:
  66254. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66255. "use strict";
  66256. var keysShim;
  66257. if (!Object.keys) {
  66258. // modified from https://github.com/es-shims/es5-shim
  66259. var has = Object.prototype.hasOwnProperty;
  66260. var toStr = Object.prototype.toString;
  66261. var isArgs = __webpack_require__(21414); // eslint-disable-line global-require
  66262. var isEnumerable = Object.prototype.propertyIsEnumerable;
  66263. var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
  66264. var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
  66265. var dontEnums = [
  66266. 'toString',
  66267. 'toLocaleString',
  66268. 'valueOf',
  66269. 'hasOwnProperty',
  66270. 'isPrototypeOf',
  66271. 'propertyIsEnumerable',
  66272. 'constructor'
  66273. ];
  66274. var equalsConstructorPrototype = function (o) {
  66275. var ctor = o.constructor;
  66276. return ctor && ctor.prototype === o;
  66277. };
  66278. var excludedKeys = {
  66279. $applicationCache: true,
  66280. $console: true,
  66281. $external: true,
  66282. $frame: true,
  66283. $frameElement: true,
  66284. $frames: true,
  66285. $innerHeight: true,
  66286. $innerWidth: true,
  66287. $onmozfullscreenchange: true,
  66288. $onmozfullscreenerror: true,
  66289. $outerHeight: true,
  66290. $outerWidth: true,
  66291. $pageXOffset: true,
  66292. $pageYOffset: true,
  66293. $parent: true,
  66294. $scrollLeft: true,
  66295. $scrollTop: true,
  66296. $scrollX: true,
  66297. $scrollY: true,
  66298. $self: true,
  66299. $webkitIndexedDB: true,
  66300. $webkitStorageInfo: true,
  66301. $window: true
  66302. };
  66303. var hasAutomationEqualityBug = (function () {
  66304. /* global window */
  66305. if (typeof window === 'undefined') { return false; }
  66306. for (var k in window) {
  66307. try {
  66308. if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
  66309. try {
  66310. equalsConstructorPrototype(window[k]);
  66311. } catch (e) {
  66312. return true;
  66313. }
  66314. }
  66315. } catch (e) {
  66316. return true;
  66317. }
  66318. }
  66319. return false;
  66320. }());
  66321. var equalsConstructorPrototypeIfNotBuggy = function (o) {
  66322. /* global window */
  66323. if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
  66324. return equalsConstructorPrototype(o);
  66325. }
  66326. try {
  66327. return equalsConstructorPrototype(o);
  66328. } catch (e) {
  66329. return false;
  66330. }
  66331. };
  66332. keysShim = function keys(object) {
  66333. var isObject = object !== null && typeof object === 'object';
  66334. var isFunction = toStr.call(object) === '[object Function]';
  66335. var isArguments = isArgs(object);
  66336. var isString = isObject && toStr.call(object) === '[object String]';
  66337. var theKeys = [];
  66338. if (!isObject && !isFunction && !isArguments) {
  66339. throw new TypeError('Object.keys called on a non-object');
  66340. }
  66341. var skipProto = hasProtoEnumBug && isFunction;
  66342. if (isString && object.length > 0 && !has.call(object, 0)) {
  66343. for (var i = 0; i < object.length; ++i) {
  66344. theKeys.push(String(i));
  66345. }
  66346. }
  66347. if (isArguments && object.length > 0) {
  66348. for (var j = 0; j < object.length; ++j) {
  66349. theKeys.push(String(j));
  66350. }
  66351. } else {
  66352. for (var name in object) {
  66353. if (!(skipProto && name === 'prototype') && has.call(object, name)) {
  66354. theKeys.push(String(name));
  66355. }
  66356. }
  66357. }
  66358. if (hasDontEnumBug) {
  66359. var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
  66360. for (var k = 0; k < dontEnums.length; ++k) {
  66361. if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
  66362. theKeys.push(dontEnums[k]);
  66363. }
  66364. }
  66365. }
  66366. return theKeys;
  66367. };
  66368. }
  66369. module.exports = keysShim;
  66370. /***/ }),
  66371. /***/ 82215:
  66372. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66373. "use strict";
  66374. var slice = Array.prototype.slice;
  66375. var isArgs = __webpack_require__(21414);
  66376. var origKeys = Object.keys;
  66377. var keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(18987);
  66378. var originalKeys = Object.keys;
  66379. keysShim.shim = function shimObjectKeys() {
  66380. if (Object.keys) {
  66381. var keysWorksWithArguments = (function () {
  66382. // Safari 5.0 bug
  66383. var args = Object.keys(arguments);
  66384. return args && args.length === arguments.length;
  66385. }(1, 2));
  66386. if (!keysWorksWithArguments) {
  66387. Object.keys = function keys(object) { // eslint-disable-line func-name-matching
  66388. if (isArgs(object)) {
  66389. return originalKeys(slice.call(object));
  66390. }
  66391. return originalKeys(object);
  66392. };
  66393. }
  66394. } else {
  66395. Object.keys = keysShim;
  66396. }
  66397. return Object.keys || keysShim;
  66398. };
  66399. module.exports = keysShim;
  66400. /***/ }),
  66401. /***/ 21414:
  66402. /***/ ((module) => {
  66403. "use strict";
  66404. var toStr = Object.prototype.toString;
  66405. module.exports = function isArguments(value) {
  66406. var str = toStr.call(value);
  66407. var isArgs = str === '[object Arguments]';
  66408. if (!isArgs) {
  66409. isArgs = str !== '[object Array]' &&
  66410. value !== null &&
  66411. typeof value === 'object' &&
  66412. typeof value.length === 'number' &&
  66413. value.length >= 0 &&
  66414. toStr.call(value.callee) === '[object Function]';
  66415. }
  66416. return isArgs;
  66417. };
  66418. /***/ }),
  66419. /***/ 52818:
  66420. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  66421. "use strict";
  66422. // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
  66423. // Fedor, you are amazing.
  66424. var asn1 = __webpack_require__(39809)
  66425. exports.certificate = __webpack_require__(41934)
  66426. var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
  66427. this.seq().obj(
  66428. this.key('version').int(),
  66429. this.key('modulus').int(),
  66430. this.key('publicExponent').int(),
  66431. this.key('privateExponent').int(),
  66432. this.key('prime1').int(),
  66433. this.key('prime2').int(),
  66434. this.key('exponent1').int(),
  66435. this.key('exponent2').int(),
  66436. this.key('coefficient').int()
  66437. )
  66438. })
  66439. exports.RSAPrivateKey = RSAPrivateKey
  66440. var RSAPublicKey = asn1.define('RSAPublicKey', function () {
  66441. this.seq().obj(
  66442. this.key('modulus').int(),
  66443. this.key('publicExponent').int()
  66444. )
  66445. })
  66446. exports.RSAPublicKey = RSAPublicKey
  66447. var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
  66448. this.seq().obj(
  66449. this.key('algorithm').use(AlgorithmIdentifier),
  66450. this.key('subjectPublicKey').bitstr()
  66451. )
  66452. })
  66453. exports.PublicKey = PublicKey
  66454. var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
  66455. this.seq().obj(
  66456. this.key('algorithm').objid(),
  66457. this.key('none').null_().optional(),
  66458. this.key('curve').objid().optional(),
  66459. this.key('params').seq().obj(
  66460. this.key('p').int(),
  66461. this.key('q').int(),
  66462. this.key('g').int()
  66463. ).optional()
  66464. )
  66465. })
  66466. var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
  66467. this.seq().obj(
  66468. this.key('version').int(),
  66469. this.key('algorithm').use(AlgorithmIdentifier),
  66470. this.key('subjectPrivateKey').octstr()
  66471. )
  66472. })
  66473. exports.PrivateKey = PrivateKeyInfo
  66474. var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
  66475. this.seq().obj(
  66476. this.key('algorithm').seq().obj(
  66477. this.key('id').objid(),
  66478. this.key('decrypt').seq().obj(
  66479. this.key('kde').seq().obj(
  66480. this.key('id').objid(),
  66481. this.key('kdeparams').seq().obj(
  66482. this.key('salt').octstr(),
  66483. this.key('iters').int()
  66484. )
  66485. ),
  66486. this.key('cipher').seq().obj(
  66487. this.key('algo').objid(),
  66488. this.key('iv').octstr()
  66489. )
  66490. )
  66491. ),
  66492. this.key('subjectPrivateKey').octstr()
  66493. )
  66494. })
  66495. exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
  66496. var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
  66497. this.seq().obj(
  66498. this.key('version').int(),
  66499. this.key('p').int(),
  66500. this.key('q').int(),
  66501. this.key('g').int(),
  66502. this.key('pub_key').int(),
  66503. this.key('priv_key').int()
  66504. )
  66505. })
  66506. exports.DSAPrivateKey = DSAPrivateKey
  66507. exports.DSAparam = asn1.define('DSAparam', function () {
  66508. this.int()
  66509. })
  66510. var ECPrivateKey = asn1.define('ECPrivateKey', function () {
  66511. this.seq().obj(
  66512. this.key('version').int(),
  66513. this.key('privateKey').octstr(),
  66514. this.key('parameters').optional().explicit(0).use(ECParameters),
  66515. this.key('publicKey').optional().explicit(1).bitstr()
  66516. )
  66517. })
  66518. exports.ECPrivateKey = ECPrivateKey
  66519. var ECParameters = asn1.define('ECParameters', function () {
  66520. this.choice({
  66521. namedCurve: this.objid()
  66522. })
  66523. })
  66524. exports.signature = asn1.define('signature', function () {
  66525. this.seq().obj(
  66526. this.key('r').int(),
  66527. this.key('s').int()
  66528. )
  66529. })
  66530. /***/ }),
  66531. /***/ 41934:
  66532. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66533. "use strict";
  66534. // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
  66535. // thanks to @Rantanen
  66536. var asn = __webpack_require__(39809)
  66537. var Time = asn.define('Time', function () {
  66538. this.choice({
  66539. utcTime: this.utctime(),
  66540. generalTime: this.gentime()
  66541. })
  66542. })
  66543. var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
  66544. this.seq().obj(
  66545. this.key('type').objid(),
  66546. this.key('value').any()
  66547. )
  66548. })
  66549. var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
  66550. this.seq().obj(
  66551. this.key('algorithm').objid(),
  66552. this.key('parameters').optional(),
  66553. this.key('curve').objid().optional()
  66554. )
  66555. })
  66556. var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
  66557. this.seq().obj(
  66558. this.key('algorithm').use(AlgorithmIdentifier),
  66559. this.key('subjectPublicKey').bitstr()
  66560. )
  66561. })
  66562. var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
  66563. this.setof(AttributeTypeValue)
  66564. })
  66565. var RDNSequence = asn.define('RDNSequence', function () {
  66566. this.seqof(RelativeDistinguishedName)
  66567. })
  66568. var Name = asn.define('Name', function () {
  66569. this.choice({
  66570. rdnSequence: this.use(RDNSequence)
  66571. })
  66572. })
  66573. var Validity = asn.define('Validity', function () {
  66574. this.seq().obj(
  66575. this.key('notBefore').use(Time),
  66576. this.key('notAfter').use(Time)
  66577. )
  66578. })
  66579. var Extension = asn.define('Extension', function () {
  66580. this.seq().obj(
  66581. this.key('extnID').objid(),
  66582. this.key('critical').bool().def(false),
  66583. this.key('extnValue').octstr()
  66584. )
  66585. })
  66586. var TBSCertificate = asn.define('TBSCertificate', function () {
  66587. this.seq().obj(
  66588. this.key('version').explicit(0).int().optional(),
  66589. this.key('serialNumber').int(),
  66590. this.key('signature').use(AlgorithmIdentifier),
  66591. this.key('issuer').use(Name),
  66592. this.key('validity').use(Validity),
  66593. this.key('subject').use(Name),
  66594. this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
  66595. this.key('issuerUniqueID').implicit(1).bitstr().optional(),
  66596. this.key('subjectUniqueID').implicit(2).bitstr().optional(),
  66597. this.key('extensions').explicit(3).seqof(Extension).optional()
  66598. )
  66599. })
  66600. var X509Certificate = asn.define('X509Certificate', function () {
  66601. this.seq().obj(
  66602. this.key('tbsCertificate').use(TBSCertificate),
  66603. this.key('signatureAlgorithm').use(AlgorithmIdentifier),
  66604. this.key('signatureValue').bitstr()
  66605. )
  66606. })
  66607. module.exports = X509Certificate
  66608. /***/ }),
  66609. /***/ 77631:
  66610. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66611. // adapted from https://github.com/apatil/pemstrip
  66612. var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m
  66613. var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m
  66614. var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m
  66615. var evp = __webpack_require__(13048)
  66616. var ciphers = __webpack_require__(44696)
  66617. var Buffer = (__webpack_require__(89509).Buffer)
  66618. module.exports = function (okey, password) {
  66619. var key = okey.toString()
  66620. var match = key.match(findProc)
  66621. var decrypted
  66622. if (!match) {
  66623. var match2 = key.match(fullRegex)
  66624. decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64')
  66625. } else {
  66626. var suite = 'aes' + match[1]
  66627. var iv = Buffer.from(match[2], 'hex')
  66628. var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64')
  66629. var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
  66630. var out = []
  66631. var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
  66632. out.push(cipher.update(cipherText))
  66633. out.push(cipher.final())
  66634. decrypted = Buffer.concat(out)
  66635. }
  66636. var tag = key.match(startRegex)[1]
  66637. return {
  66638. tag: tag,
  66639. data: decrypted
  66640. }
  66641. }
  66642. /***/ }),
  66643. /***/ 70980:
  66644. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66645. var asn1 = __webpack_require__(52818)
  66646. var aesid = __webpack_require__(22562)
  66647. var fixProc = __webpack_require__(77631)
  66648. var ciphers = __webpack_require__(44696)
  66649. var compat = __webpack_require__(25632)
  66650. var Buffer = (__webpack_require__(89509).Buffer)
  66651. module.exports = parseKeys
  66652. function parseKeys (buffer) {
  66653. var password
  66654. if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
  66655. password = buffer.passphrase
  66656. buffer = buffer.key
  66657. }
  66658. if (typeof buffer === 'string') {
  66659. buffer = Buffer.from(buffer)
  66660. }
  66661. var stripped = fixProc(buffer, password)
  66662. var type = stripped.tag
  66663. var data = stripped.data
  66664. var subtype, ndata
  66665. switch (type) {
  66666. case 'CERTIFICATE':
  66667. ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
  66668. // falls through
  66669. case 'PUBLIC KEY':
  66670. if (!ndata) {
  66671. ndata = asn1.PublicKey.decode(data, 'der')
  66672. }
  66673. subtype = ndata.algorithm.algorithm.join('.')
  66674. switch (subtype) {
  66675. case '1.2.840.113549.1.1.1':
  66676. return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
  66677. case '1.2.840.10045.2.1':
  66678. ndata.subjectPrivateKey = ndata.subjectPublicKey
  66679. return {
  66680. type: 'ec',
  66681. data: ndata
  66682. }
  66683. case '1.2.840.10040.4.1':
  66684. ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
  66685. return {
  66686. type: 'dsa',
  66687. data: ndata.algorithm.params
  66688. }
  66689. default: throw new Error('unknown key id ' + subtype)
  66690. }
  66691. // throw new Error('unknown key type ' + type)
  66692. case 'ENCRYPTED PRIVATE KEY':
  66693. data = asn1.EncryptedPrivateKey.decode(data, 'der')
  66694. data = decrypt(data, password)
  66695. // falls through
  66696. case 'PRIVATE KEY':
  66697. ndata = asn1.PrivateKey.decode(data, 'der')
  66698. subtype = ndata.algorithm.algorithm.join('.')
  66699. switch (subtype) {
  66700. case '1.2.840.113549.1.1.1':
  66701. return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
  66702. case '1.2.840.10045.2.1':
  66703. return {
  66704. curve: ndata.algorithm.curve,
  66705. privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
  66706. }
  66707. case '1.2.840.10040.4.1':
  66708. ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
  66709. return {
  66710. type: 'dsa',
  66711. params: ndata.algorithm.params
  66712. }
  66713. default: throw new Error('unknown key id ' + subtype)
  66714. }
  66715. // throw new Error('unknown key type ' + type)
  66716. case 'RSA PUBLIC KEY':
  66717. return asn1.RSAPublicKey.decode(data, 'der')
  66718. case 'RSA PRIVATE KEY':
  66719. return asn1.RSAPrivateKey.decode(data, 'der')
  66720. case 'DSA PRIVATE KEY':
  66721. return {
  66722. type: 'dsa',
  66723. params: asn1.DSAPrivateKey.decode(data, 'der')
  66724. }
  66725. case 'EC PRIVATE KEY':
  66726. data = asn1.ECPrivateKey.decode(data, 'der')
  66727. return {
  66728. curve: data.parameters.value,
  66729. privateKey: data.privateKey
  66730. }
  66731. default: throw new Error('unknown key type ' + type)
  66732. }
  66733. }
  66734. parseKeys.signature = asn1.signature
  66735. function decrypt (data, password) {
  66736. var salt = data.algorithm.decrypt.kde.kdeparams.salt
  66737. var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
  66738. var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
  66739. var iv = data.algorithm.decrypt.cipher.iv
  66740. var cipherText = data.subjectPrivateKey
  66741. var keylen = parseInt(algo.split('-')[1], 10) / 8
  66742. var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')
  66743. var cipher = ciphers.createDecipheriv(algo, key, iv)
  66744. var out = []
  66745. out.push(cipher.update(cipherText))
  66746. out.push(cipher.final())
  66747. return Buffer.concat(out)
  66748. }
  66749. /***/ }),
  66750. /***/ 25632:
  66751. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  66752. exports.pbkdf2 = __webpack_require__(88638)
  66753. exports.pbkdf2Sync = __webpack_require__(91257)
  66754. /***/ }),
  66755. /***/ 88638:
  66756. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66757. /* provided dependency */ var process = __webpack_require__(34155);
  66758. var Buffer = (__webpack_require__(89509).Buffer)
  66759. var checkParameters = __webpack_require__(77357)
  66760. var defaultEncoding = __webpack_require__(12368)
  66761. var sync = __webpack_require__(91257)
  66762. var toBuffer = __webpack_require__(57777)
  66763. var ZERO_BUF
  66764. var subtle = __webpack_require__.g.crypto && __webpack_require__.g.crypto.subtle
  66765. var toBrowser = {
  66766. sha: 'SHA-1',
  66767. 'sha-1': 'SHA-1',
  66768. sha1: 'SHA-1',
  66769. sha256: 'SHA-256',
  66770. 'sha-256': 'SHA-256',
  66771. sha384: 'SHA-384',
  66772. 'sha-384': 'SHA-384',
  66773. 'sha-512': 'SHA-512',
  66774. sha512: 'SHA-512'
  66775. }
  66776. var checks = []
  66777. function checkNative (algo) {
  66778. if (__webpack_require__.g.process && !__webpack_require__.g.process.browser) {
  66779. return Promise.resolve(false)
  66780. }
  66781. if (!subtle || !subtle.importKey || !subtle.deriveBits) {
  66782. return Promise.resolve(false)
  66783. }
  66784. if (checks[algo] !== undefined) {
  66785. return checks[algo]
  66786. }
  66787. ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
  66788. var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
  66789. .then(function () {
  66790. return true
  66791. }).catch(function () {
  66792. return false
  66793. })
  66794. checks[algo] = prom
  66795. return prom
  66796. }
  66797. function browserPbkdf2 (password, salt, iterations, length, algo) {
  66798. return subtle.importKey(
  66799. 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']
  66800. ).then(function (key) {
  66801. return subtle.deriveBits({
  66802. name: 'PBKDF2',
  66803. salt: salt,
  66804. iterations: iterations,
  66805. hash: {
  66806. name: algo
  66807. }
  66808. }, key, length << 3)
  66809. }).then(function (res) {
  66810. return Buffer.from(res)
  66811. })
  66812. }
  66813. function resolvePromise (promise, callback) {
  66814. promise.then(function (out) {
  66815. process.nextTick(function () {
  66816. callback(null, out)
  66817. })
  66818. }, function (e) {
  66819. process.nextTick(function () {
  66820. callback(e)
  66821. })
  66822. })
  66823. }
  66824. module.exports = function (password, salt, iterations, keylen, digest, callback) {
  66825. if (typeof digest === 'function') {
  66826. callback = digest
  66827. digest = undefined
  66828. }
  66829. digest = digest || 'sha1'
  66830. var algo = toBrowser[digest.toLowerCase()]
  66831. if (!algo || typeof __webpack_require__.g.Promise !== 'function') {
  66832. return process.nextTick(function () {
  66833. var out
  66834. try {
  66835. out = sync(password, salt, iterations, keylen, digest)
  66836. } catch (e) {
  66837. return callback(e)
  66838. }
  66839. callback(null, out)
  66840. })
  66841. }
  66842. checkParameters(iterations, keylen)
  66843. password = toBuffer(password, defaultEncoding, 'Password')
  66844. salt = toBuffer(salt, defaultEncoding, 'Salt')
  66845. if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
  66846. resolvePromise(checkNative(algo).then(function (resp) {
  66847. if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)
  66848. return sync(password, salt, iterations, keylen, digest)
  66849. }), callback)
  66850. }
  66851. /***/ }),
  66852. /***/ 12368:
  66853. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66854. /* provided dependency */ var process = __webpack_require__(34155);
  66855. var defaultEncoding
  66856. /* istanbul ignore next */
  66857. if (process.browser) {
  66858. defaultEncoding = 'utf-8'
  66859. } else if (process.version) {
  66860. var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
  66861. defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
  66862. } else {
  66863. defaultEncoding = 'utf-8'
  66864. }
  66865. module.exports = defaultEncoding
  66866. /***/ }),
  66867. /***/ 77357:
  66868. /***/ ((module) => {
  66869. var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
  66870. module.exports = function (iterations, keylen) {
  66871. if (typeof iterations !== 'number') {
  66872. throw new TypeError('Iterations not a number')
  66873. }
  66874. if (iterations < 0) {
  66875. throw new TypeError('Bad iterations')
  66876. }
  66877. if (typeof keylen !== 'number') {
  66878. throw new TypeError('Key length not a number')
  66879. }
  66880. if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
  66881. throw new TypeError('Bad key length')
  66882. }
  66883. }
  66884. /***/ }),
  66885. /***/ 91257:
  66886. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66887. var md5 = __webpack_require__(78028)
  66888. var RIPEMD160 = __webpack_require__(79785)
  66889. var sha = __webpack_require__(89072)
  66890. var Buffer = (__webpack_require__(89509).Buffer)
  66891. var checkParameters = __webpack_require__(77357)
  66892. var defaultEncoding = __webpack_require__(12368)
  66893. var toBuffer = __webpack_require__(57777)
  66894. var ZEROS = Buffer.alloc(128)
  66895. var sizes = {
  66896. md5: 16,
  66897. sha1: 20,
  66898. sha224: 28,
  66899. sha256: 32,
  66900. sha384: 48,
  66901. sha512: 64,
  66902. rmd160: 20,
  66903. ripemd160: 20
  66904. }
  66905. function Hmac (alg, key, saltLen) {
  66906. var hash = getDigest(alg)
  66907. var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
  66908. if (key.length > blocksize) {
  66909. key = hash(key)
  66910. } else if (key.length < blocksize) {
  66911. key = Buffer.concat([key, ZEROS], blocksize)
  66912. }
  66913. var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
  66914. var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
  66915. for (var i = 0; i < blocksize; i++) {
  66916. ipad[i] = key[i] ^ 0x36
  66917. opad[i] = key[i] ^ 0x5C
  66918. }
  66919. var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
  66920. ipad.copy(ipad1, 0, 0, blocksize)
  66921. this.ipad1 = ipad1
  66922. this.ipad2 = ipad
  66923. this.opad = opad
  66924. this.alg = alg
  66925. this.blocksize = blocksize
  66926. this.hash = hash
  66927. this.size = sizes[alg]
  66928. }
  66929. Hmac.prototype.run = function (data, ipad) {
  66930. data.copy(ipad, this.blocksize)
  66931. var h = this.hash(ipad)
  66932. h.copy(this.opad, this.blocksize)
  66933. return this.hash(this.opad)
  66934. }
  66935. function getDigest (alg) {
  66936. function shaFunc (data) {
  66937. return sha(alg).update(data).digest()
  66938. }
  66939. function rmd160Func (data) {
  66940. return new RIPEMD160().update(data).digest()
  66941. }
  66942. if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func
  66943. if (alg === 'md5') return md5
  66944. return shaFunc
  66945. }
  66946. function pbkdf2 (password, salt, iterations, keylen, digest) {
  66947. checkParameters(iterations, keylen)
  66948. password = toBuffer(password, defaultEncoding, 'Password')
  66949. salt = toBuffer(salt, defaultEncoding, 'Salt')
  66950. digest = digest || 'sha1'
  66951. var hmac = new Hmac(digest, password, salt.length)
  66952. var DK = Buffer.allocUnsafe(keylen)
  66953. var block1 = Buffer.allocUnsafe(salt.length + 4)
  66954. salt.copy(block1, 0, 0, salt.length)
  66955. var destPos = 0
  66956. var hLen = sizes[digest]
  66957. var l = Math.ceil(keylen / hLen)
  66958. for (var i = 1; i <= l; i++) {
  66959. block1.writeUInt32BE(i, salt.length)
  66960. var T = hmac.run(block1, hmac.ipad1)
  66961. var U = T
  66962. for (var j = 1; j < iterations; j++) {
  66963. U = hmac.run(U, hmac.ipad2)
  66964. for (var k = 0; k < hLen; k++) T[k] ^= U[k]
  66965. }
  66966. T.copy(DK, destPos)
  66967. destPos += hLen
  66968. }
  66969. return DK
  66970. }
  66971. module.exports = pbkdf2
  66972. /***/ }),
  66973. /***/ 57777:
  66974. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  66975. var Buffer = (__webpack_require__(89509).Buffer)
  66976. module.exports = function (thing, encoding, name) {
  66977. if (Buffer.isBuffer(thing)) {
  66978. return thing
  66979. } else if (typeof thing === 'string') {
  66980. return Buffer.from(thing, encoding)
  66981. } else if (ArrayBuffer.isView(thing)) {
  66982. return Buffer.from(thing.buffer)
  66983. } else {
  66984. throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')
  66985. }
  66986. }
  66987. /***/ }),
  66988. /***/ 34155:
  66989. /***/ ((module) => {
  66990. // shim for using process in browser
  66991. var process = module.exports = {};
  66992. // cached from whatever global is present so that test runners that stub it
  66993. // don't break things. But we need to wrap it in a try catch in case it is
  66994. // wrapped in strict mode code which doesn't define any globals. It's inside a
  66995. // function because try/catches deoptimize in certain engines.
  66996. var cachedSetTimeout;
  66997. var cachedClearTimeout;
  66998. function defaultSetTimout() {
  66999. throw new Error('setTimeout has not been defined');
  67000. }
  67001. function defaultClearTimeout () {
  67002. throw new Error('clearTimeout has not been defined');
  67003. }
  67004. (function () {
  67005. try {
  67006. if (typeof setTimeout === 'function') {
  67007. cachedSetTimeout = setTimeout;
  67008. } else {
  67009. cachedSetTimeout = defaultSetTimout;
  67010. }
  67011. } catch (e) {
  67012. cachedSetTimeout = defaultSetTimout;
  67013. }
  67014. try {
  67015. if (typeof clearTimeout === 'function') {
  67016. cachedClearTimeout = clearTimeout;
  67017. } else {
  67018. cachedClearTimeout = defaultClearTimeout;
  67019. }
  67020. } catch (e) {
  67021. cachedClearTimeout = defaultClearTimeout;
  67022. }
  67023. } ())
  67024. function runTimeout(fun) {
  67025. if (cachedSetTimeout === setTimeout) {
  67026. //normal enviroments in sane situations
  67027. return setTimeout(fun, 0);
  67028. }
  67029. // if setTimeout wasn't available but was latter defined
  67030. if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
  67031. cachedSetTimeout = setTimeout;
  67032. return setTimeout(fun, 0);
  67033. }
  67034. try {
  67035. // when when somebody has screwed with setTimeout but no I.E. maddness
  67036. return cachedSetTimeout(fun, 0);
  67037. } catch(e){
  67038. try {
  67039. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  67040. return cachedSetTimeout.call(null, fun, 0);
  67041. } catch(e){
  67042. // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
  67043. return cachedSetTimeout.call(this, fun, 0);
  67044. }
  67045. }
  67046. }
  67047. function runClearTimeout(marker) {
  67048. if (cachedClearTimeout === clearTimeout) {
  67049. //normal enviroments in sane situations
  67050. return clearTimeout(marker);
  67051. }
  67052. // if clearTimeout wasn't available but was latter defined
  67053. if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
  67054. cachedClearTimeout = clearTimeout;
  67055. return clearTimeout(marker);
  67056. }
  67057. try {
  67058. // when when somebody has screwed with setTimeout but no I.E. maddness
  67059. return cachedClearTimeout(marker);
  67060. } catch (e){
  67061. try {
  67062. // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  67063. return cachedClearTimeout.call(null, marker);
  67064. } catch (e){
  67065. // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
  67066. // Some versions of I.E. have different rules for clearTimeout vs setTimeout
  67067. return cachedClearTimeout.call(this, marker);
  67068. }
  67069. }
  67070. }
  67071. var queue = [];
  67072. var draining = false;
  67073. var currentQueue;
  67074. var queueIndex = -1;
  67075. function cleanUpNextTick() {
  67076. if (!draining || !currentQueue) {
  67077. return;
  67078. }
  67079. draining = false;
  67080. if (currentQueue.length) {
  67081. queue = currentQueue.concat(queue);
  67082. } else {
  67083. queueIndex = -1;
  67084. }
  67085. if (queue.length) {
  67086. drainQueue();
  67087. }
  67088. }
  67089. function drainQueue() {
  67090. if (draining) {
  67091. return;
  67092. }
  67093. var timeout = runTimeout(cleanUpNextTick);
  67094. draining = true;
  67095. var len = queue.length;
  67096. while(len) {
  67097. currentQueue = queue;
  67098. queue = [];
  67099. while (++queueIndex < len) {
  67100. if (currentQueue) {
  67101. currentQueue[queueIndex].run();
  67102. }
  67103. }
  67104. queueIndex = -1;
  67105. len = queue.length;
  67106. }
  67107. currentQueue = null;
  67108. draining = false;
  67109. runClearTimeout(timeout);
  67110. }
  67111. process.nextTick = function (fun) {
  67112. var args = new Array(arguments.length - 1);
  67113. if (arguments.length > 1) {
  67114. for (var i = 1; i < arguments.length; i++) {
  67115. args[i - 1] = arguments[i];
  67116. }
  67117. }
  67118. queue.push(new Item(fun, args));
  67119. if (queue.length === 1 && !draining) {
  67120. runTimeout(drainQueue);
  67121. }
  67122. };
  67123. // v8 likes predictible objects
  67124. function Item(fun, array) {
  67125. this.fun = fun;
  67126. this.array = array;
  67127. }
  67128. Item.prototype.run = function () {
  67129. this.fun.apply(null, this.array);
  67130. };
  67131. process.title = 'browser';
  67132. process.browser = true;
  67133. process.env = {};
  67134. process.argv = [];
  67135. process.version = ''; // empty string to avoid regexp issues
  67136. process.versions = {};
  67137. function noop() {}
  67138. process.on = noop;
  67139. process.addListener = noop;
  67140. process.once = noop;
  67141. process.off = noop;
  67142. process.removeListener = noop;
  67143. process.removeAllListeners = noop;
  67144. process.emit = noop;
  67145. process.prependListener = noop;
  67146. process.prependOnceListener = noop;
  67147. process.listeners = function (name) { return [] }
  67148. process.binding = function (name) {
  67149. throw new Error('process.binding is not supported');
  67150. };
  67151. process.cwd = function () { return '/' };
  67152. process.chdir = function (dir) {
  67153. throw new Error('process.chdir is not supported');
  67154. };
  67155. process.umask = function() { return 0; };
  67156. /***/ }),
  67157. /***/ 7900:
  67158. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  67159. exports.publicEncrypt = __webpack_require__(16559)
  67160. exports.privateDecrypt = __webpack_require__(26138)
  67161. exports.privateEncrypt = function privateEncrypt (key, buf) {
  67162. return exports.publicEncrypt(key, buf, true)
  67163. }
  67164. exports.publicDecrypt = function publicDecrypt (key, buf) {
  67165. return exports.privateDecrypt(key, buf, true)
  67166. }
  67167. /***/ }),
  67168. /***/ 99199:
  67169. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  67170. var createHash = __webpack_require__(23482)
  67171. var Buffer = (__webpack_require__(89509).Buffer)
  67172. module.exports = function (seed, len) {
  67173. var t = Buffer.alloc(0)
  67174. var i = 0
  67175. var c
  67176. while (t.length < len) {
  67177. c = i2ops(i++)
  67178. t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])
  67179. }
  67180. return t.slice(0, len)
  67181. }
  67182. function i2ops (c) {
  67183. var out = Buffer.allocUnsafe(4)
  67184. out.writeUInt32BE(c, 0)
  67185. return out
  67186. }
  67187. /***/ }),
  67188. /***/ 92144:
  67189. /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
  67190. /* module decorator */ module = __webpack_require__.nmd(module);
  67191. (function (module, exports) {
  67192. 'use strict';
  67193. // Utils
  67194. function assert (val, msg) {
  67195. if (!val) throw new Error(msg || 'Assertion failed');
  67196. }
  67197. // Could use `inherits` module, but don't want to move from single file
  67198. // architecture yet.
  67199. function inherits (ctor, superCtor) {
  67200. ctor.super_ = superCtor;
  67201. var TempCtor = function () {};
  67202. TempCtor.prototype = superCtor.prototype;
  67203. ctor.prototype = new TempCtor();
  67204. ctor.prototype.constructor = ctor;
  67205. }
  67206. // BN
  67207. function BN (number, base, endian) {
  67208. if (BN.isBN(number)) {
  67209. return number;
  67210. }
  67211. this.negative = 0;
  67212. this.words = null;
  67213. this.length = 0;
  67214. // Reduction context
  67215. this.red = null;
  67216. if (number !== null) {
  67217. if (base === 'le' || base === 'be') {
  67218. endian = base;
  67219. base = 10;
  67220. }
  67221. this._init(number || 0, base || 10, endian || 'be');
  67222. }
  67223. }
  67224. if (typeof module === 'object') {
  67225. module.exports = BN;
  67226. } else {
  67227. exports.BN = BN;
  67228. }
  67229. BN.BN = BN;
  67230. BN.wordSize = 26;
  67231. var Buffer;
  67232. try {
  67233. if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {
  67234. Buffer = window.Buffer;
  67235. } else {
  67236. Buffer = (__webpack_require__(77108).Buffer);
  67237. }
  67238. } catch (e) {
  67239. }
  67240. BN.isBN = function isBN (num) {
  67241. if (num instanceof BN) {
  67242. return true;
  67243. }
  67244. return num !== null && typeof num === 'object' &&
  67245. num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
  67246. };
  67247. BN.max = function max (left, right) {
  67248. if (left.cmp(right) > 0) return left;
  67249. return right;
  67250. };
  67251. BN.min = function min (left, right) {
  67252. if (left.cmp(right) < 0) return left;
  67253. return right;
  67254. };
  67255. BN.prototype._init = function init (number, base, endian) {
  67256. if (typeof number === 'number') {
  67257. return this._initNumber(number, base, endian);
  67258. }
  67259. if (typeof number === 'object') {
  67260. return this._initArray(number, base, endian);
  67261. }
  67262. if (base === 'hex') {
  67263. base = 16;
  67264. }
  67265. assert(base === (base | 0) && base >= 2 && base <= 36);
  67266. number = number.toString().replace(/\s+/g, '');
  67267. var start = 0;
  67268. if (number[0] === '-') {
  67269. start++;
  67270. this.negative = 1;
  67271. }
  67272. if (start < number.length) {
  67273. if (base === 16) {
  67274. this._parseHex(number, start, endian);
  67275. } else {
  67276. this._parseBase(number, base, start);
  67277. if (endian === 'le') {
  67278. this._initArray(this.toArray(), base, endian);
  67279. }
  67280. }
  67281. }
  67282. };
  67283. BN.prototype._initNumber = function _initNumber (number, base, endian) {
  67284. if (number < 0) {
  67285. this.negative = 1;
  67286. number = -number;
  67287. }
  67288. if (number < 0x4000000) {
  67289. this.words = [ number & 0x3ffffff ];
  67290. this.length = 1;
  67291. } else if (number < 0x10000000000000) {
  67292. this.words = [
  67293. number & 0x3ffffff,
  67294. (number / 0x4000000) & 0x3ffffff
  67295. ];
  67296. this.length = 2;
  67297. } else {
  67298. assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
  67299. this.words = [
  67300. number & 0x3ffffff,
  67301. (number / 0x4000000) & 0x3ffffff,
  67302. 1
  67303. ];
  67304. this.length = 3;
  67305. }
  67306. if (endian !== 'le') return;
  67307. // Reverse the bytes
  67308. this._initArray(this.toArray(), base, endian);
  67309. };
  67310. BN.prototype._initArray = function _initArray (number, base, endian) {
  67311. // Perhaps a Uint8Array
  67312. assert(typeof number.length === 'number');
  67313. if (number.length <= 0) {
  67314. this.words = [ 0 ];
  67315. this.length = 1;
  67316. return this;
  67317. }
  67318. this.length = Math.ceil(number.length / 3);
  67319. this.words = new Array(this.length);
  67320. for (var i = 0; i < this.length; i++) {
  67321. this.words[i] = 0;
  67322. }
  67323. var j, w;
  67324. var off = 0;
  67325. if (endian === 'be') {
  67326. for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
  67327. w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
  67328. this.words[j] |= (w << off) & 0x3ffffff;
  67329. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  67330. off += 24;
  67331. if (off >= 26) {
  67332. off -= 26;
  67333. j++;
  67334. }
  67335. }
  67336. } else if (endian === 'le') {
  67337. for (i = 0, j = 0; i < number.length; i += 3) {
  67338. w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
  67339. this.words[j] |= (w << off) & 0x3ffffff;
  67340. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  67341. off += 24;
  67342. if (off >= 26) {
  67343. off -= 26;
  67344. j++;
  67345. }
  67346. }
  67347. }
  67348. return this.strip();
  67349. };
  67350. function parseHex4Bits (string, index) {
  67351. var c = string.charCodeAt(index);
  67352. // 'A' - 'F'
  67353. if (c >= 65 && c <= 70) {
  67354. return c - 55;
  67355. // 'a' - 'f'
  67356. } else if (c >= 97 && c <= 102) {
  67357. return c - 87;
  67358. // '0' - '9'
  67359. } else {
  67360. return (c - 48) & 0xf;
  67361. }
  67362. }
  67363. function parseHexByte (string, lowerBound, index) {
  67364. var r = parseHex4Bits(string, index);
  67365. if (index - 1 >= lowerBound) {
  67366. r |= parseHex4Bits(string, index - 1) << 4;
  67367. }
  67368. return r;
  67369. }
  67370. BN.prototype._parseHex = function _parseHex (number, start, endian) {
  67371. // Create possibly bigger array to ensure that it fits the number
  67372. this.length = Math.ceil((number.length - start) / 6);
  67373. this.words = new Array(this.length);
  67374. for (var i = 0; i < this.length; i++) {
  67375. this.words[i] = 0;
  67376. }
  67377. // 24-bits chunks
  67378. var off = 0;
  67379. var j = 0;
  67380. var w;
  67381. if (endian === 'be') {
  67382. for (i = number.length - 1; i >= start; i -= 2) {
  67383. w = parseHexByte(number, start, i) << off;
  67384. this.words[j] |= w & 0x3ffffff;
  67385. if (off >= 18) {
  67386. off -= 18;
  67387. j += 1;
  67388. this.words[j] |= w >>> 26;
  67389. } else {
  67390. off += 8;
  67391. }
  67392. }
  67393. } else {
  67394. var parseLength = number.length - start;
  67395. for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {
  67396. w = parseHexByte(number, start, i) << off;
  67397. this.words[j] |= w & 0x3ffffff;
  67398. if (off >= 18) {
  67399. off -= 18;
  67400. j += 1;
  67401. this.words[j] |= w >>> 26;
  67402. } else {
  67403. off += 8;
  67404. }
  67405. }
  67406. }
  67407. this.strip();
  67408. };
  67409. function parseBase (str, start, end, mul) {
  67410. var r = 0;
  67411. var len = Math.min(str.length, end);
  67412. for (var i = start; i < len; i++) {
  67413. var c = str.charCodeAt(i) - 48;
  67414. r *= mul;
  67415. // 'a'
  67416. if (c >= 49) {
  67417. r += c - 49 + 0xa;
  67418. // 'A'
  67419. } else if (c >= 17) {
  67420. r += c - 17 + 0xa;
  67421. // '0' - '9'
  67422. } else {
  67423. r += c;
  67424. }
  67425. }
  67426. return r;
  67427. }
  67428. BN.prototype._parseBase = function _parseBase (number, base, start) {
  67429. // Initialize as zero
  67430. this.words = [ 0 ];
  67431. this.length = 1;
  67432. // Find length of limb in base
  67433. for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
  67434. limbLen++;
  67435. }
  67436. limbLen--;
  67437. limbPow = (limbPow / base) | 0;
  67438. var total = number.length - start;
  67439. var mod = total % limbLen;
  67440. var end = Math.min(total, total - mod) + start;
  67441. var word = 0;
  67442. for (var i = start; i < end; i += limbLen) {
  67443. word = parseBase(number, i, i + limbLen, base);
  67444. this.imuln(limbPow);
  67445. if (this.words[0] + word < 0x4000000) {
  67446. this.words[0] += word;
  67447. } else {
  67448. this._iaddn(word);
  67449. }
  67450. }
  67451. if (mod !== 0) {
  67452. var pow = 1;
  67453. word = parseBase(number, i, number.length, base);
  67454. for (i = 0; i < mod; i++) {
  67455. pow *= base;
  67456. }
  67457. this.imuln(pow);
  67458. if (this.words[0] + word < 0x4000000) {
  67459. this.words[0] += word;
  67460. } else {
  67461. this._iaddn(word);
  67462. }
  67463. }
  67464. this.strip();
  67465. };
  67466. BN.prototype.copy = function copy (dest) {
  67467. dest.words = new Array(this.length);
  67468. for (var i = 0; i < this.length; i++) {
  67469. dest.words[i] = this.words[i];
  67470. }
  67471. dest.length = this.length;
  67472. dest.negative = this.negative;
  67473. dest.red = this.red;
  67474. };
  67475. BN.prototype.clone = function clone () {
  67476. var r = new BN(null);
  67477. this.copy(r);
  67478. return r;
  67479. };
  67480. BN.prototype._expand = function _expand (size) {
  67481. while (this.length < size) {
  67482. this.words[this.length++] = 0;
  67483. }
  67484. return this;
  67485. };
  67486. // Remove leading `0` from `this`
  67487. BN.prototype.strip = function strip () {
  67488. while (this.length > 1 && this.words[this.length - 1] === 0) {
  67489. this.length--;
  67490. }
  67491. return this._normSign();
  67492. };
  67493. BN.prototype._normSign = function _normSign () {
  67494. // -0 = 0
  67495. if (this.length === 1 && this.words[0] === 0) {
  67496. this.negative = 0;
  67497. }
  67498. return this;
  67499. };
  67500. BN.prototype.inspect = function inspect () {
  67501. return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  67502. };
  67503. /*
  67504. var zeros = [];
  67505. var groupSizes = [];
  67506. var groupBases = [];
  67507. var s = '';
  67508. var i = -1;
  67509. while (++i < BN.wordSize) {
  67510. zeros[i] = s;
  67511. s += '0';
  67512. }
  67513. groupSizes[0] = 0;
  67514. groupSizes[1] = 0;
  67515. groupBases[0] = 0;
  67516. groupBases[1] = 0;
  67517. var base = 2 - 1;
  67518. while (++base < 36 + 1) {
  67519. var groupSize = 0;
  67520. var groupBase = 1;
  67521. while (groupBase < (1 << BN.wordSize) / base) {
  67522. groupBase *= base;
  67523. groupSize += 1;
  67524. }
  67525. groupSizes[base] = groupSize;
  67526. groupBases[base] = groupBase;
  67527. }
  67528. */
  67529. var zeros = [
  67530. '',
  67531. '0',
  67532. '00',
  67533. '000',
  67534. '0000',
  67535. '00000',
  67536. '000000',
  67537. '0000000',
  67538. '00000000',
  67539. '000000000',
  67540. '0000000000',
  67541. '00000000000',
  67542. '000000000000',
  67543. '0000000000000',
  67544. '00000000000000',
  67545. '000000000000000',
  67546. '0000000000000000',
  67547. '00000000000000000',
  67548. '000000000000000000',
  67549. '0000000000000000000',
  67550. '00000000000000000000',
  67551. '000000000000000000000',
  67552. '0000000000000000000000',
  67553. '00000000000000000000000',
  67554. '000000000000000000000000',
  67555. '0000000000000000000000000'
  67556. ];
  67557. var groupSizes = [
  67558. 0, 0,
  67559. 25, 16, 12, 11, 10, 9, 8,
  67560. 8, 7, 7, 7, 7, 6, 6,
  67561. 6, 6, 6, 6, 6, 5, 5,
  67562. 5, 5, 5, 5, 5, 5, 5,
  67563. 5, 5, 5, 5, 5, 5, 5
  67564. ];
  67565. var groupBases = [
  67566. 0, 0,
  67567. 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
  67568. 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
  67569. 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
  67570. 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
  67571. 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
  67572. ];
  67573. BN.prototype.toString = function toString (base, padding) {
  67574. base = base || 10;
  67575. padding = padding | 0 || 1;
  67576. var out;
  67577. if (base === 16 || base === 'hex') {
  67578. out = '';
  67579. var off = 0;
  67580. var carry = 0;
  67581. for (var i = 0; i < this.length; i++) {
  67582. var w = this.words[i];
  67583. var word = (((w << off) | carry) & 0xffffff).toString(16);
  67584. carry = (w >>> (24 - off)) & 0xffffff;
  67585. if (carry !== 0 || i !== this.length - 1) {
  67586. out = zeros[6 - word.length] + word + out;
  67587. } else {
  67588. out = word + out;
  67589. }
  67590. off += 2;
  67591. if (off >= 26) {
  67592. off -= 26;
  67593. i--;
  67594. }
  67595. }
  67596. if (carry !== 0) {
  67597. out = carry.toString(16) + out;
  67598. }
  67599. while (out.length % padding !== 0) {
  67600. out = '0' + out;
  67601. }
  67602. if (this.negative !== 0) {
  67603. out = '-' + out;
  67604. }
  67605. return out;
  67606. }
  67607. if (base === (base | 0) && base >= 2 && base <= 36) {
  67608. // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
  67609. var groupSize = groupSizes[base];
  67610. // var groupBase = Math.pow(base, groupSize);
  67611. var groupBase = groupBases[base];
  67612. out = '';
  67613. var c = this.clone();
  67614. c.negative = 0;
  67615. while (!c.isZero()) {
  67616. var r = c.modn(groupBase).toString(base);
  67617. c = c.idivn(groupBase);
  67618. if (!c.isZero()) {
  67619. out = zeros[groupSize - r.length] + r + out;
  67620. } else {
  67621. out = r + out;
  67622. }
  67623. }
  67624. if (this.isZero()) {
  67625. out = '0' + out;
  67626. }
  67627. while (out.length % padding !== 0) {
  67628. out = '0' + out;
  67629. }
  67630. if (this.negative !== 0) {
  67631. out = '-' + out;
  67632. }
  67633. return out;
  67634. }
  67635. assert(false, 'Base should be between 2 and 36');
  67636. };
  67637. BN.prototype.toNumber = function toNumber () {
  67638. var ret = this.words[0];
  67639. if (this.length === 2) {
  67640. ret += this.words[1] * 0x4000000;
  67641. } else if (this.length === 3 && this.words[2] === 0x01) {
  67642. // NOTE: at this stage it is known that the top bit is set
  67643. ret += 0x10000000000000 + (this.words[1] * 0x4000000);
  67644. } else if (this.length > 2) {
  67645. assert(false, 'Number can only safely store up to 53 bits');
  67646. }
  67647. return (this.negative !== 0) ? -ret : ret;
  67648. };
  67649. BN.prototype.toJSON = function toJSON () {
  67650. return this.toString(16);
  67651. };
  67652. BN.prototype.toBuffer = function toBuffer (endian, length) {
  67653. assert(typeof Buffer !== 'undefined');
  67654. return this.toArrayLike(Buffer, endian, length);
  67655. };
  67656. BN.prototype.toArray = function toArray (endian, length) {
  67657. return this.toArrayLike(Array, endian, length);
  67658. };
  67659. BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
  67660. var byteLength = this.byteLength();
  67661. var reqLength = length || Math.max(1, byteLength);
  67662. assert(byteLength <= reqLength, 'byte array longer than desired length');
  67663. assert(reqLength > 0, 'Requested array length <= 0');
  67664. this.strip();
  67665. var littleEndian = endian === 'le';
  67666. var res = new ArrayType(reqLength);
  67667. var b, i;
  67668. var q = this.clone();
  67669. if (!littleEndian) {
  67670. // Assume big-endian
  67671. for (i = 0; i < reqLength - byteLength; i++) {
  67672. res[i] = 0;
  67673. }
  67674. for (i = 0; !q.isZero(); i++) {
  67675. b = q.andln(0xff);
  67676. q.iushrn(8);
  67677. res[reqLength - i - 1] = b;
  67678. }
  67679. } else {
  67680. for (i = 0; !q.isZero(); i++) {
  67681. b = q.andln(0xff);
  67682. q.iushrn(8);
  67683. res[i] = b;
  67684. }
  67685. for (; i < reqLength; i++) {
  67686. res[i] = 0;
  67687. }
  67688. }
  67689. return res;
  67690. };
  67691. if (Math.clz32) {
  67692. BN.prototype._countBits = function _countBits (w) {
  67693. return 32 - Math.clz32(w);
  67694. };
  67695. } else {
  67696. BN.prototype._countBits = function _countBits (w) {
  67697. var t = w;
  67698. var r = 0;
  67699. if (t >= 0x1000) {
  67700. r += 13;
  67701. t >>>= 13;
  67702. }
  67703. if (t >= 0x40) {
  67704. r += 7;
  67705. t >>>= 7;
  67706. }
  67707. if (t >= 0x8) {
  67708. r += 4;
  67709. t >>>= 4;
  67710. }
  67711. if (t >= 0x02) {
  67712. r += 2;
  67713. t >>>= 2;
  67714. }
  67715. return r + t;
  67716. };
  67717. }
  67718. BN.prototype._zeroBits = function _zeroBits (w) {
  67719. // Short-cut
  67720. if (w === 0) return 26;
  67721. var t = w;
  67722. var r = 0;
  67723. if ((t & 0x1fff) === 0) {
  67724. r += 13;
  67725. t >>>= 13;
  67726. }
  67727. if ((t & 0x7f) === 0) {
  67728. r += 7;
  67729. t >>>= 7;
  67730. }
  67731. if ((t & 0xf) === 0) {
  67732. r += 4;
  67733. t >>>= 4;
  67734. }
  67735. if ((t & 0x3) === 0) {
  67736. r += 2;
  67737. t >>>= 2;
  67738. }
  67739. if ((t & 0x1) === 0) {
  67740. r++;
  67741. }
  67742. return r;
  67743. };
  67744. // Return number of used bits in a BN
  67745. BN.prototype.bitLength = function bitLength () {
  67746. var w = this.words[this.length - 1];
  67747. var hi = this._countBits(w);
  67748. return (this.length - 1) * 26 + hi;
  67749. };
  67750. function toBitArray (num) {
  67751. var w = new Array(num.bitLength());
  67752. for (var bit = 0; bit < w.length; bit++) {
  67753. var off = (bit / 26) | 0;
  67754. var wbit = bit % 26;
  67755. w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
  67756. }
  67757. return w;
  67758. }
  67759. // Number of trailing zero bits
  67760. BN.prototype.zeroBits = function zeroBits () {
  67761. if (this.isZero()) return 0;
  67762. var r = 0;
  67763. for (var i = 0; i < this.length; i++) {
  67764. var b = this._zeroBits(this.words[i]);
  67765. r += b;
  67766. if (b !== 26) break;
  67767. }
  67768. return r;
  67769. };
  67770. BN.prototype.byteLength = function byteLength () {
  67771. return Math.ceil(this.bitLength() / 8);
  67772. };
  67773. BN.prototype.toTwos = function toTwos (width) {
  67774. if (this.negative !== 0) {
  67775. return this.abs().inotn(width).iaddn(1);
  67776. }
  67777. return this.clone();
  67778. };
  67779. BN.prototype.fromTwos = function fromTwos (width) {
  67780. if (this.testn(width - 1)) {
  67781. return this.notn(width).iaddn(1).ineg();
  67782. }
  67783. return this.clone();
  67784. };
  67785. BN.prototype.isNeg = function isNeg () {
  67786. return this.negative !== 0;
  67787. };
  67788. // Return negative clone of `this`
  67789. BN.prototype.neg = function neg () {
  67790. return this.clone().ineg();
  67791. };
  67792. BN.prototype.ineg = function ineg () {
  67793. if (!this.isZero()) {
  67794. this.negative ^= 1;
  67795. }
  67796. return this;
  67797. };
  67798. // Or `num` with `this` in-place
  67799. BN.prototype.iuor = function iuor (num) {
  67800. while (this.length < num.length) {
  67801. this.words[this.length++] = 0;
  67802. }
  67803. for (var i = 0; i < num.length; i++) {
  67804. this.words[i] = this.words[i] | num.words[i];
  67805. }
  67806. return this.strip();
  67807. };
  67808. BN.prototype.ior = function ior (num) {
  67809. assert((this.negative | num.negative) === 0);
  67810. return this.iuor(num);
  67811. };
  67812. // Or `num` with `this`
  67813. BN.prototype.or = function or (num) {
  67814. if (this.length > num.length) return this.clone().ior(num);
  67815. return num.clone().ior(this);
  67816. };
  67817. BN.prototype.uor = function uor (num) {
  67818. if (this.length > num.length) return this.clone().iuor(num);
  67819. return num.clone().iuor(this);
  67820. };
  67821. // And `num` with `this` in-place
  67822. BN.prototype.iuand = function iuand (num) {
  67823. // b = min-length(num, this)
  67824. var b;
  67825. if (this.length > num.length) {
  67826. b = num;
  67827. } else {
  67828. b = this;
  67829. }
  67830. for (var i = 0; i < b.length; i++) {
  67831. this.words[i] = this.words[i] & num.words[i];
  67832. }
  67833. this.length = b.length;
  67834. return this.strip();
  67835. };
  67836. BN.prototype.iand = function iand (num) {
  67837. assert((this.negative | num.negative) === 0);
  67838. return this.iuand(num);
  67839. };
  67840. // And `num` with `this`
  67841. BN.prototype.and = function and (num) {
  67842. if (this.length > num.length) return this.clone().iand(num);
  67843. return num.clone().iand(this);
  67844. };
  67845. BN.prototype.uand = function uand (num) {
  67846. if (this.length > num.length) return this.clone().iuand(num);
  67847. return num.clone().iuand(this);
  67848. };
  67849. // Xor `num` with `this` in-place
  67850. BN.prototype.iuxor = function iuxor (num) {
  67851. // a.length > b.length
  67852. var a;
  67853. var b;
  67854. if (this.length > num.length) {
  67855. a = this;
  67856. b = num;
  67857. } else {
  67858. a = num;
  67859. b = this;
  67860. }
  67861. for (var i = 0; i < b.length; i++) {
  67862. this.words[i] = a.words[i] ^ b.words[i];
  67863. }
  67864. if (this !== a) {
  67865. for (; i < a.length; i++) {
  67866. this.words[i] = a.words[i];
  67867. }
  67868. }
  67869. this.length = a.length;
  67870. return this.strip();
  67871. };
  67872. BN.prototype.ixor = function ixor (num) {
  67873. assert((this.negative | num.negative) === 0);
  67874. return this.iuxor(num);
  67875. };
  67876. // Xor `num` with `this`
  67877. BN.prototype.xor = function xor (num) {
  67878. if (this.length > num.length) return this.clone().ixor(num);
  67879. return num.clone().ixor(this);
  67880. };
  67881. BN.prototype.uxor = function uxor (num) {
  67882. if (this.length > num.length) return this.clone().iuxor(num);
  67883. return num.clone().iuxor(this);
  67884. };
  67885. // Not ``this`` with ``width`` bitwidth
  67886. BN.prototype.inotn = function inotn (width) {
  67887. assert(typeof width === 'number' && width >= 0);
  67888. var bytesNeeded = Math.ceil(width / 26) | 0;
  67889. var bitsLeft = width % 26;
  67890. // Extend the buffer with leading zeroes
  67891. this._expand(bytesNeeded);
  67892. if (bitsLeft > 0) {
  67893. bytesNeeded--;
  67894. }
  67895. // Handle complete words
  67896. for (var i = 0; i < bytesNeeded; i++) {
  67897. this.words[i] = ~this.words[i] & 0x3ffffff;
  67898. }
  67899. // Handle the residue
  67900. if (bitsLeft > 0) {
  67901. this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
  67902. }
  67903. // And remove leading zeroes
  67904. return this.strip();
  67905. };
  67906. BN.prototype.notn = function notn (width) {
  67907. return this.clone().inotn(width);
  67908. };
  67909. // Set `bit` of `this`
  67910. BN.prototype.setn = function setn (bit, val) {
  67911. assert(typeof bit === 'number' && bit >= 0);
  67912. var off = (bit / 26) | 0;
  67913. var wbit = bit % 26;
  67914. this._expand(off + 1);
  67915. if (val) {
  67916. this.words[off] = this.words[off] | (1 << wbit);
  67917. } else {
  67918. this.words[off] = this.words[off] & ~(1 << wbit);
  67919. }
  67920. return this.strip();
  67921. };
  67922. // Add `num` to `this` in-place
  67923. BN.prototype.iadd = function iadd (num) {
  67924. var r;
  67925. // negative + positive
  67926. if (this.negative !== 0 && num.negative === 0) {
  67927. this.negative = 0;
  67928. r = this.isub(num);
  67929. this.negative ^= 1;
  67930. return this._normSign();
  67931. // positive + negative
  67932. } else if (this.negative === 0 && num.negative !== 0) {
  67933. num.negative = 0;
  67934. r = this.isub(num);
  67935. num.negative = 1;
  67936. return r._normSign();
  67937. }
  67938. // a.length > b.length
  67939. var a, b;
  67940. if (this.length > num.length) {
  67941. a = this;
  67942. b = num;
  67943. } else {
  67944. a = num;
  67945. b = this;
  67946. }
  67947. var carry = 0;
  67948. for (var i = 0; i < b.length; i++) {
  67949. r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
  67950. this.words[i] = r & 0x3ffffff;
  67951. carry = r >>> 26;
  67952. }
  67953. for (; carry !== 0 && i < a.length; i++) {
  67954. r = (a.words[i] | 0) + carry;
  67955. this.words[i] = r & 0x3ffffff;
  67956. carry = r >>> 26;
  67957. }
  67958. this.length = a.length;
  67959. if (carry !== 0) {
  67960. this.words[this.length] = carry;
  67961. this.length++;
  67962. // Copy the rest of the words
  67963. } else if (a !== this) {
  67964. for (; i < a.length; i++) {
  67965. this.words[i] = a.words[i];
  67966. }
  67967. }
  67968. return this;
  67969. };
  67970. // Add `num` to `this`
  67971. BN.prototype.add = function add (num) {
  67972. var res;
  67973. if (num.negative !== 0 && this.negative === 0) {
  67974. num.negative = 0;
  67975. res = this.sub(num);
  67976. num.negative ^= 1;
  67977. return res;
  67978. } else if (num.negative === 0 && this.negative !== 0) {
  67979. this.negative = 0;
  67980. res = num.sub(this);
  67981. this.negative = 1;
  67982. return res;
  67983. }
  67984. if (this.length > num.length) return this.clone().iadd(num);
  67985. return num.clone().iadd(this);
  67986. };
  67987. // Subtract `num` from `this` in-place
  67988. BN.prototype.isub = function isub (num) {
  67989. // this - (-num) = this + num
  67990. if (num.negative !== 0) {
  67991. num.negative = 0;
  67992. var r = this.iadd(num);
  67993. num.negative = 1;
  67994. return r._normSign();
  67995. // -this - num = -(this + num)
  67996. } else if (this.negative !== 0) {
  67997. this.negative = 0;
  67998. this.iadd(num);
  67999. this.negative = 1;
  68000. return this._normSign();
  68001. }
  68002. // At this point both numbers are positive
  68003. var cmp = this.cmp(num);
  68004. // Optimization - zeroify
  68005. if (cmp === 0) {
  68006. this.negative = 0;
  68007. this.length = 1;
  68008. this.words[0] = 0;
  68009. return this;
  68010. }
  68011. // a > b
  68012. var a, b;
  68013. if (cmp > 0) {
  68014. a = this;
  68015. b = num;
  68016. } else {
  68017. a = num;
  68018. b = this;
  68019. }
  68020. var carry = 0;
  68021. for (var i = 0; i < b.length; i++) {
  68022. r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
  68023. carry = r >> 26;
  68024. this.words[i] = r & 0x3ffffff;
  68025. }
  68026. for (; carry !== 0 && i < a.length; i++) {
  68027. r = (a.words[i] | 0) + carry;
  68028. carry = r >> 26;
  68029. this.words[i] = r & 0x3ffffff;
  68030. }
  68031. // Copy rest of the words
  68032. if (carry === 0 && i < a.length && a !== this) {
  68033. for (; i < a.length; i++) {
  68034. this.words[i] = a.words[i];
  68035. }
  68036. }
  68037. this.length = Math.max(this.length, i);
  68038. if (a !== this) {
  68039. this.negative = 1;
  68040. }
  68041. return this.strip();
  68042. };
  68043. // Subtract `num` from `this`
  68044. BN.prototype.sub = function sub (num) {
  68045. return this.clone().isub(num);
  68046. };
  68047. function smallMulTo (self, num, out) {
  68048. out.negative = num.negative ^ self.negative;
  68049. var len = (self.length + num.length) | 0;
  68050. out.length = len;
  68051. len = (len - 1) | 0;
  68052. // Peel one iteration (compiler can't do it, because of code complexity)
  68053. var a = self.words[0] | 0;
  68054. var b = num.words[0] | 0;
  68055. var r = a * b;
  68056. var lo = r & 0x3ffffff;
  68057. var carry = (r / 0x4000000) | 0;
  68058. out.words[0] = lo;
  68059. for (var k = 1; k < len; k++) {
  68060. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  68061. // note that ncarry could be >= 0x3ffffff
  68062. var ncarry = carry >>> 26;
  68063. var rword = carry & 0x3ffffff;
  68064. var maxJ = Math.min(k, num.length - 1);
  68065. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  68066. var i = (k - j) | 0;
  68067. a = self.words[i] | 0;
  68068. b = num.words[j] | 0;
  68069. r = a * b + rword;
  68070. ncarry += (r / 0x4000000) | 0;
  68071. rword = r & 0x3ffffff;
  68072. }
  68073. out.words[k] = rword | 0;
  68074. carry = ncarry | 0;
  68075. }
  68076. if (carry !== 0) {
  68077. out.words[k] = carry | 0;
  68078. } else {
  68079. out.length--;
  68080. }
  68081. return out.strip();
  68082. }
  68083. // TODO(indutny): it may be reasonable to omit it for users who don't need
  68084. // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
  68085. // multiplication (like elliptic secp256k1).
  68086. var comb10MulTo = function comb10MulTo (self, num, out) {
  68087. var a = self.words;
  68088. var b = num.words;
  68089. var o = out.words;
  68090. var c = 0;
  68091. var lo;
  68092. var mid;
  68093. var hi;
  68094. var a0 = a[0] | 0;
  68095. var al0 = a0 & 0x1fff;
  68096. var ah0 = a0 >>> 13;
  68097. var a1 = a[1] | 0;
  68098. var al1 = a1 & 0x1fff;
  68099. var ah1 = a1 >>> 13;
  68100. var a2 = a[2] | 0;
  68101. var al2 = a2 & 0x1fff;
  68102. var ah2 = a2 >>> 13;
  68103. var a3 = a[3] | 0;
  68104. var al3 = a3 & 0x1fff;
  68105. var ah3 = a3 >>> 13;
  68106. var a4 = a[4] | 0;
  68107. var al4 = a4 & 0x1fff;
  68108. var ah4 = a4 >>> 13;
  68109. var a5 = a[5] | 0;
  68110. var al5 = a5 & 0x1fff;
  68111. var ah5 = a5 >>> 13;
  68112. var a6 = a[6] | 0;
  68113. var al6 = a6 & 0x1fff;
  68114. var ah6 = a6 >>> 13;
  68115. var a7 = a[7] | 0;
  68116. var al7 = a7 & 0x1fff;
  68117. var ah7 = a7 >>> 13;
  68118. var a8 = a[8] | 0;
  68119. var al8 = a8 & 0x1fff;
  68120. var ah8 = a8 >>> 13;
  68121. var a9 = a[9] | 0;
  68122. var al9 = a9 & 0x1fff;
  68123. var ah9 = a9 >>> 13;
  68124. var b0 = b[0] | 0;
  68125. var bl0 = b0 & 0x1fff;
  68126. var bh0 = b0 >>> 13;
  68127. var b1 = b[1] | 0;
  68128. var bl1 = b1 & 0x1fff;
  68129. var bh1 = b1 >>> 13;
  68130. var b2 = b[2] | 0;
  68131. var bl2 = b2 & 0x1fff;
  68132. var bh2 = b2 >>> 13;
  68133. var b3 = b[3] | 0;
  68134. var bl3 = b3 & 0x1fff;
  68135. var bh3 = b3 >>> 13;
  68136. var b4 = b[4] | 0;
  68137. var bl4 = b4 & 0x1fff;
  68138. var bh4 = b4 >>> 13;
  68139. var b5 = b[5] | 0;
  68140. var bl5 = b5 & 0x1fff;
  68141. var bh5 = b5 >>> 13;
  68142. var b6 = b[6] | 0;
  68143. var bl6 = b6 & 0x1fff;
  68144. var bh6 = b6 >>> 13;
  68145. var b7 = b[7] | 0;
  68146. var bl7 = b7 & 0x1fff;
  68147. var bh7 = b7 >>> 13;
  68148. var b8 = b[8] | 0;
  68149. var bl8 = b8 & 0x1fff;
  68150. var bh8 = b8 >>> 13;
  68151. var b9 = b[9] | 0;
  68152. var bl9 = b9 & 0x1fff;
  68153. var bh9 = b9 >>> 13;
  68154. out.negative = self.negative ^ num.negative;
  68155. out.length = 19;
  68156. /* k = 0 */
  68157. lo = Math.imul(al0, bl0);
  68158. mid = Math.imul(al0, bh0);
  68159. mid = (mid + Math.imul(ah0, bl0)) | 0;
  68160. hi = Math.imul(ah0, bh0);
  68161. var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68162. c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
  68163. w0 &= 0x3ffffff;
  68164. /* k = 1 */
  68165. lo = Math.imul(al1, bl0);
  68166. mid = Math.imul(al1, bh0);
  68167. mid = (mid + Math.imul(ah1, bl0)) | 0;
  68168. hi = Math.imul(ah1, bh0);
  68169. lo = (lo + Math.imul(al0, bl1)) | 0;
  68170. mid = (mid + Math.imul(al0, bh1)) | 0;
  68171. mid = (mid + Math.imul(ah0, bl1)) | 0;
  68172. hi = (hi + Math.imul(ah0, bh1)) | 0;
  68173. var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68174. c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
  68175. w1 &= 0x3ffffff;
  68176. /* k = 2 */
  68177. lo = Math.imul(al2, bl0);
  68178. mid = Math.imul(al2, bh0);
  68179. mid = (mid + Math.imul(ah2, bl0)) | 0;
  68180. hi = Math.imul(ah2, bh0);
  68181. lo = (lo + Math.imul(al1, bl1)) | 0;
  68182. mid = (mid + Math.imul(al1, bh1)) | 0;
  68183. mid = (mid + Math.imul(ah1, bl1)) | 0;
  68184. hi = (hi + Math.imul(ah1, bh1)) | 0;
  68185. lo = (lo + Math.imul(al0, bl2)) | 0;
  68186. mid = (mid + Math.imul(al0, bh2)) | 0;
  68187. mid = (mid + Math.imul(ah0, bl2)) | 0;
  68188. hi = (hi + Math.imul(ah0, bh2)) | 0;
  68189. var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68190. c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
  68191. w2 &= 0x3ffffff;
  68192. /* k = 3 */
  68193. lo = Math.imul(al3, bl0);
  68194. mid = Math.imul(al3, bh0);
  68195. mid = (mid + Math.imul(ah3, bl0)) | 0;
  68196. hi = Math.imul(ah3, bh0);
  68197. lo = (lo + Math.imul(al2, bl1)) | 0;
  68198. mid = (mid + Math.imul(al2, bh1)) | 0;
  68199. mid = (mid + Math.imul(ah2, bl1)) | 0;
  68200. hi = (hi + Math.imul(ah2, bh1)) | 0;
  68201. lo = (lo + Math.imul(al1, bl2)) | 0;
  68202. mid = (mid + Math.imul(al1, bh2)) | 0;
  68203. mid = (mid + Math.imul(ah1, bl2)) | 0;
  68204. hi = (hi + Math.imul(ah1, bh2)) | 0;
  68205. lo = (lo + Math.imul(al0, bl3)) | 0;
  68206. mid = (mid + Math.imul(al0, bh3)) | 0;
  68207. mid = (mid + Math.imul(ah0, bl3)) | 0;
  68208. hi = (hi + Math.imul(ah0, bh3)) | 0;
  68209. var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68210. c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
  68211. w3 &= 0x3ffffff;
  68212. /* k = 4 */
  68213. lo = Math.imul(al4, bl0);
  68214. mid = Math.imul(al4, bh0);
  68215. mid = (mid + Math.imul(ah4, bl0)) | 0;
  68216. hi = Math.imul(ah4, bh0);
  68217. lo = (lo + Math.imul(al3, bl1)) | 0;
  68218. mid = (mid + Math.imul(al3, bh1)) | 0;
  68219. mid = (mid + Math.imul(ah3, bl1)) | 0;
  68220. hi = (hi + Math.imul(ah3, bh1)) | 0;
  68221. lo = (lo + Math.imul(al2, bl2)) | 0;
  68222. mid = (mid + Math.imul(al2, bh2)) | 0;
  68223. mid = (mid + Math.imul(ah2, bl2)) | 0;
  68224. hi = (hi + Math.imul(ah2, bh2)) | 0;
  68225. lo = (lo + Math.imul(al1, bl3)) | 0;
  68226. mid = (mid + Math.imul(al1, bh3)) | 0;
  68227. mid = (mid + Math.imul(ah1, bl3)) | 0;
  68228. hi = (hi + Math.imul(ah1, bh3)) | 0;
  68229. lo = (lo + Math.imul(al0, bl4)) | 0;
  68230. mid = (mid + Math.imul(al0, bh4)) | 0;
  68231. mid = (mid + Math.imul(ah0, bl4)) | 0;
  68232. hi = (hi + Math.imul(ah0, bh4)) | 0;
  68233. var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68234. c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
  68235. w4 &= 0x3ffffff;
  68236. /* k = 5 */
  68237. lo = Math.imul(al5, bl0);
  68238. mid = Math.imul(al5, bh0);
  68239. mid = (mid + Math.imul(ah5, bl0)) | 0;
  68240. hi = Math.imul(ah5, bh0);
  68241. lo = (lo + Math.imul(al4, bl1)) | 0;
  68242. mid = (mid + Math.imul(al4, bh1)) | 0;
  68243. mid = (mid + Math.imul(ah4, bl1)) | 0;
  68244. hi = (hi + Math.imul(ah4, bh1)) | 0;
  68245. lo = (lo + Math.imul(al3, bl2)) | 0;
  68246. mid = (mid + Math.imul(al3, bh2)) | 0;
  68247. mid = (mid + Math.imul(ah3, bl2)) | 0;
  68248. hi = (hi + Math.imul(ah3, bh2)) | 0;
  68249. lo = (lo + Math.imul(al2, bl3)) | 0;
  68250. mid = (mid + Math.imul(al2, bh3)) | 0;
  68251. mid = (mid + Math.imul(ah2, bl3)) | 0;
  68252. hi = (hi + Math.imul(ah2, bh3)) | 0;
  68253. lo = (lo + Math.imul(al1, bl4)) | 0;
  68254. mid = (mid + Math.imul(al1, bh4)) | 0;
  68255. mid = (mid + Math.imul(ah1, bl4)) | 0;
  68256. hi = (hi + Math.imul(ah1, bh4)) | 0;
  68257. lo = (lo + Math.imul(al0, bl5)) | 0;
  68258. mid = (mid + Math.imul(al0, bh5)) | 0;
  68259. mid = (mid + Math.imul(ah0, bl5)) | 0;
  68260. hi = (hi + Math.imul(ah0, bh5)) | 0;
  68261. var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68262. c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
  68263. w5 &= 0x3ffffff;
  68264. /* k = 6 */
  68265. lo = Math.imul(al6, bl0);
  68266. mid = Math.imul(al6, bh0);
  68267. mid = (mid + Math.imul(ah6, bl0)) | 0;
  68268. hi = Math.imul(ah6, bh0);
  68269. lo = (lo + Math.imul(al5, bl1)) | 0;
  68270. mid = (mid + Math.imul(al5, bh1)) | 0;
  68271. mid = (mid + Math.imul(ah5, bl1)) | 0;
  68272. hi = (hi + Math.imul(ah5, bh1)) | 0;
  68273. lo = (lo + Math.imul(al4, bl2)) | 0;
  68274. mid = (mid + Math.imul(al4, bh2)) | 0;
  68275. mid = (mid + Math.imul(ah4, bl2)) | 0;
  68276. hi = (hi + Math.imul(ah4, bh2)) | 0;
  68277. lo = (lo + Math.imul(al3, bl3)) | 0;
  68278. mid = (mid + Math.imul(al3, bh3)) | 0;
  68279. mid = (mid + Math.imul(ah3, bl3)) | 0;
  68280. hi = (hi + Math.imul(ah3, bh3)) | 0;
  68281. lo = (lo + Math.imul(al2, bl4)) | 0;
  68282. mid = (mid + Math.imul(al2, bh4)) | 0;
  68283. mid = (mid + Math.imul(ah2, bl4)) | 0;
  68284. hi = (hi + Math.imul(ah2, bh4)) | 0;
  68285. lo = (lo + Math.imul(al1, bl5)) | 0;
  68286. mid = (mid + Math.imul(al1, bh5)) | 0;
  68287. mid = (mid + Math.imul(ah1, bl5)) | 0;
  68288. hi = (hi + Math.imul(ah1, bh5)) | 0;
  68289. lo = (lo + Math.imul(al0, bl6)) | 0;
  68290. mid = (mid + Math.imul(al0, bh6)) | 0;
  68291. mid = (mid + Math.imul(ah0, bl6)) | 0;
  68292. hi = (hi + Math.imul(ah0, bh6)) | 0;
  68293. var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68294. c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
  68295. w6 &= 0x3ffffff;
  68296. /* k = 7 */
  68297. lo = Math.imul(al7, bl0);
  68298. mid = Math.imul(al7, bh0);
  68299. mid = (mid + Math.imul(ah7, bl0)) | 0;
  68300. hi = Math.imul(ah7, bh0);
  68301. lo = (lo + Math.imul(al6, bl1)) | 0;
  68302. mid = (mid + Math.imul(al6, bh1)) | 0;
  68303. mid = (mid + Math.imul(ah6, bl1)) | 0;
  68304. hi = (hi + Math.imul(ah6, bh1)) | 0;
  68305. lo = (lo + Math.imul(al5, bl2)) | 0;
  68306. mid = (mid + Math.imul(al5, bh2)) | 0;
  68307. mid = (mid + Math.imul(ah5, bl2)) | 0;
  68308. hi = (hi + Math.imul(ah5, bh2)) | 0;
  68309. lo = (lo + Math.imul(al4, bl3)) | 0;
  68310. mid = (mid + Math.imul(al4, bh3)) | 0;
  68311. mid = (mid + Math.imul(ah4, bl3)) | 0;
  68312. hi = (hi + Math.imul(ah4, bh3)) | 0;
  68313. lo = (lo + Math.imul(al3, bl4)) | 0;
  68314. mid = (mid + Math.imul(al3, bh4)) | 0;
  68315. mid = (mid + Math.imul(ah3, bl4)) | 0;
  68316. hi = (hi + Math.imul(ah3, bh4)) | 0;
  68317. lo = (lo + Math.imul(al2, bl5)) | 0;
  68318. mid = (mid + Math.imul(al2, bh5)) | 0;
  68319. mid = (mid + Math.imul(ah2, bl5)) | 0;
  68320. hi = (hi + Math.imul(ah2, bh5)) | 0;
  68321. lo = (lo + Math.imul(al1, bl6)) | 0;
  68322. mid = (mid + Math.imul(al1, bh6)) | 0;
  68323. mid = (mid + Math.imul(ah1, bl6)) | 0;
  68324. hi = (hi + Math.imul(ah1, bh6)) | 0;
  68325. lo = (lo + Math.imul(al0, bl7)) | 0;
  68326. mid = (mid + Math.imul(al0, bh7)) | 0;
  68327. mid = (mid + Math.imul(ah0, bl7)) | 0;
  68328. hi = (hi + Math.imul(ah0, bh7)) | 0;
  68329. var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68330. c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
  68331. w7 &= 0x3ffffff;
  68332. /* k = 8 */
  68333. lo = Math.imul(al8, bl0);
  68334. mid = Math.imul(al8, bh0);
  68335. mid = (mid + Math.imul(ah8, bl0)) | 0;
  68336. hi = Math.imul(ah8, bh0);
  68337. lo = (lo + Math.imul(al7, bl1)) | 0;
  68338. mid = (mid + Math.imul(al7, bh1)) | 0;
  68339. mid = (mid + Math.imul(ah7, bl1)) | 0;
  68340. hi = (hi + Math.imul(ah7, bh1)) | 0;
  68341. lo = (lo + Math.imul(al6, bl2)) | 0;
  68342. mid = (mid + Math.imul(al6, bh2)) | 0;
  68343. mid = (mid + Math.imul(ah6, bl2)) | 0;
  68344. hi = (hi + Math.imul(ah6, bh2)) | 0;
  68345. lo = (lo + Math.imul(al5, bl3)) | 0;
  68346. mid = (mid + Math.imul(al5, bh3)) | 0;
  68347. mid = (mid + Math.imul(ah5, bl3)) | 0;
  68348. hi = (hi + Math.imul(ah5, bh3)) | 0;
  68349. lo = (lo + Math.imul(al4, bl4)) | 0;
  68350. mid = (mid + Math.imul(al4, bh4)) | 0;
  68351. mid = (mid + Math.imul(ah4, bl4)) | 0;
  68352. hi = (hi + Math.imul(ah4, bh4)) | 0;
  68353. lo = (lo + Math.imul(al3, bl5)) | 0;
  68354. mid = (mid + Math.imul(al3, bh5)) | 0;
  68355. mid = (mid + Math.imul(ah3, bl5)) | 0;
  68356. hi = (hi + Math.imul(ah3, bh5)) | 0;
  68357. lo = (lo + Math.imul(al2, bl6)) | 0;
  68358. mid = (mid + Math.imul(al2, bh6)) | 0;
  68359. mid = (mid + Math.imul(ah2, bl6)) | 0;
  68360. hi = (hi + Math.imul(ah2, bh6)) | 0;
  68361. lo = (lo + Math.imul(al1, bl7)) | 0;
  68362. mid = (mid + Math.imul(al1, bh7)) | 0;
  68363. mid = (mid + Math.imul(ah1, bl7)) | 0;
  68364. hi = (hi + Math.imul(ah1, bh7)) | 0;
  68365. lo = (lo + Math.imul(al0, bl8)) | 0;
  68366. mid = (mid + Math.imul(al0, bh8)) | 0;
  68367. mid = (mid + Math.imul(ah0, bl8)) | 0;
  68368. hi = (hi + Math.imul(ah0, bh8)) | 0;
  68369. var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68370. c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
  68371. w8 &= 0x3ffffff;
  68372. /* k = 9 */
  68373. lo = Math.imul(al9, bl0);
  68374. mid = Math.imul(al9, bh0);
  68375. mid = (mid + Math.imul(ah9, bl0)) | 0;
  68376. hi = Math.imul(ah9, bh0);
  68377. lo = (lo + Math.imul(al8, bl1)) | 0;
  68378. mid = (mid + Math.imul(al8, bh1)) | 0;
  68379. mid = (mid + Math.imul(ah8, bl1)) | 0;
  68380. hi = (hi + Math.imul(ah8, bh1)) | 0;
  68381. lo = (lo + Math.imul(al7, bl2)) | 0;
  68382. mid = (mid + Math.imul(al7, bh2)) | 0;
  68383. mid = (mid + Math.imul(ah7, bl2)) | 0;
  68384. hi = (hi + Math.imul(ah7, bh2)) | 0;
  68385. lo = (lo + Math.imul(al6, bl3)) | 0;
  68386. mid = (mid + Math.imul(al6, bh3)) | 0;
  68387. mid = (mid + Math.imul(ah6, bl3)) | 0;
  68388. hi = (hi + Math.imul(ah6, bh3)) | 0;
  68389. lo = (lo + Math.imul(al5, bl4)) | 0;
  68390. mid = (mid + Math.imul(al5, bh4)) | 0;
  68391. mid = (mid + Math.imul(ah5, bl4)) | 0;
  68392. hi = (hi + Math.imul(ah5, bh4)) | 0;
  68393. lo = (lo + Math.imul(al4, bl5)) | 0;
  68394. mid = (mid + Math.imul(al4, bh5)) | 0;
  68395. mid = (mid + Math.imul(ah4, bl5)) | 0;
  68396. hi = (hi + Math.imul(ah4, bh5)) | 0;
  68397. lo = (lo + Math.imul(al3, bl6)) | 0;
  68398. mid = (mid + Math.imul(al3, bh6)) | 0;
  68399. mid = (mid + Math.imul(ah3, bl6)) | 0;
  68400. hi = (hi + Math.imul(ah3, bh6)) | 0;
  68401. lo = (lo + Math.imul(al2, bl7)) | 0;
  68402. mid = (mid + Math.imul(al2, bh7)) | 0;
  68403. mid = (mid + Math.imul(ah2, bl7)) | 0;
  68404. hi = (hi + Math.imul(ah2, bh7)) | 0;
  68405. lo = (lo + Math.imul(al1, bl8)) | 0;
  68406. mid = (mid + Math.imul(al1, bh8)) | 0;
  68407. mid = (mid + Math.imul(ah1, bl8)) | 0;
  68408. hi = (hi + Math.imul(ah1, bh8)) | 0;
  68409. lo = (lo + Math.imul(al0, bl9)) | 0;
  68410. mid = (mid + Math.imul(al0, bh9)) | 0;
  68411. mid = (mid + Math.imul(ah0, bl9)) | 0;
  68412. hi = (hi + Math.imul(ah0, bh9)) | 0;
  68413. var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68414. c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
  68415. w9 &= 0x3ffffff;
  68416. /* k = 10 */
  68417. lo = Math.imul(al9, bl1);
  68418. mid = Math.imul(al9, bh1);
  68419. mid = (mid + Math.imul(ah9, bl1)) | 0;
  68420. hi = Math.imul(ah9, bh1);
  68421. lo = (lo + Math.imul(al8, bl2)) | 0;
  68422. mid = (mid + Math.imul(al8, bh2)) | 0;
  68423. mid = (mid + Math.imul(ah8, bl2)) | 0;
  68424. hi = (hi + Math.imul(ah8, bh2)) | 0;
  68425. lo = (lo + Math.imul(al7, bl3)) | 0;
  68426. mid = (mid + Math.imul(al7, bh3)) | 0;
  68427. mid = (mid + Math.imul(ah7, bl3)) | 0;
  68428. hi = (hi + Math.imul(ah7, bh3)) | 0;
  68429. lo = (lo + Math.imul(al6, bl4)) | 0;
  68430. mid = (mid + Math.imul(al6, bh4)) | 0;
  68431. mid = (mid + Math.imul(ah6, bl4)) | 0;
  68432. hi = (hi + Math.imul(ah6, bh4)) | 0;
  68433. lo = (lo + Math.imul(al5, bl5)) | 0;
  68434. mid = (mid + Math.imul(al5, bh5)) | 0;
  68435. mid = (mid + Math.imul(ah5, bl5)) | 0;
  68436. hi = (hi + Math.imul(ah5, bh5)) | 0;
  68437. lo = (lo + Math.imul(al4, bl6)) | 0;
  68438. mid = (mid + Math.imul(al4, bh6)) | 0;
  68439. mid = (mid + Math.imul(ah4, bl6)) | 0;
  68440. hi = (hi + Math.imul(ah4, bh6)) | 0;
  68441. lo = (lo + Math.imul(al3, bl7)) | 0;
  68442. mid = (mid + Math.imul(al3, bh7)) | 0;
  68443. mid = (mid + Math.imul(ah3, bl7)) | 0;
  68444. hi = (hi + Math.imul(ah3, bh7)) | 0;
  68445. lo = (lo + Math.imul(al2, bl8)) | 0;
  68446. mid = (mid + Math.imul(al2, bh8)) | 0;
  68447. mid = (mid + Math.imul(ah2, bl8)) | 0;
  68448. hi = (hi + Math.imul(ah2, bh8)) | 0;
  68449. lo = (lo + Math.imul(al1, bl9)) | 0;
  68450. mid = (mid + Math.imul(al1, bh9)) | 0;
  68451. mid = (mid + Math.imul(ah1, bl9)) | 0;
  68452. hi = (hi + Math.imul(ah1, bh9)) | 0;
  68453. var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68454. c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
  68455. w10 &= 0x3ffffff;
  68456. /* k = 11 */
  68457. lo = Math.imul(al9, bl2);
  68458. mid = Math.imul(al9, bh2);
  68459. mid = (mid + Math.imul(ah9, bl2)) | 0;
  68460. hi = Math.imul(ah9, bh2);
  68461. lo = (lo + Math.imul(al8, bl3)) | 0;
  68462. mid = (mid + Math.imul(al8, bh3)) | 0;
  68463. mid = (mid + Math.imul(ah8, bl3)) | 0;
  68464. hi = (hi + Math.imul(ah8, bh3)) | 0;
  68465. lo = (lo + Math.imul(al7, bl4)) | 0;
  68466. mid = (mid + Math.imul(al7, bh4)) | 0;
  68467. mid = (mid + Math.imul(ah7, bl4)) | 0;
  68468. hi = (hi + Math.imul(ah7, bh4)) | 0;
  68469. lo = (lo + Math.imul(al6, bl5)) | 0;
  68470. mid = (mid + Math.imul(al6, bh5)) | 0;
  68471. mid = (mid + Math.imul(ah6, bl5)) | 0;
  68472. hi = (hi + Math.imul(ah6, bh5)) | 0;
  68473. lo = (lo + Math.imul(al5, bl6)) | 0;
  68474. mid = (mid + Math.imul(al5, bh6)) | 0;
  68475. mid = (mid + Math.imul(ah5, bl6)) | 0;
  68476. hi = (hi + Math.imul(ah5, bh6)) | 0;
  68477. lo = (lo + Math.imul(al4, bl7)) | 0;
  68478. mid = (mid + Math.imul(al4, bh7)) | 0;
  68479. mid = (mid + Math.imul(ah4, bl7)) | 0;
  68480. hi = (hi + Math.imul(ah4, bh7)) | 0;
  68481. lo = (lo + Math.imul(al3, bl8)) | 0;
  68482. mid = (mid + Math.imul(al3, bh8)) | 0;
  68483. mid = (mid + Math.imul(ah3, bl8)) | 0;
  68484. hi = (hi + Math.imul(ah3, bh8)) | 0;
  68485. lo = (lo + Math.imul(al2, bl9)) | 0;
  68486. mid = (mid + Math.imul(al2, bh9)) | 0;
  68487. mid = (mid + Math.imul(ah2, bl9)) | 0;
  68488. hi = (hi + Math.imul(ah2, bh9)) | 0;
  68489. var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68490. c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
  68491. w11 &= 0x3ffffff;
  68492. /* k = 12 */
  68493. lo = Math.imul(al9, bl3);
  68494. mid = Math.imul(al9, bh3);
  68495. mid = (mid + Math.imul(ah9, bl3)) | 0;
  68496. hi = Math.imul(ah9, bh3);
  68497. lo = (lo + Math.imul(al8, bl4)) | 0;
  68498. mid = (mid + Math.imul(al8, bh4)) | 0;
  68499. mid = (mid + Math.imul(ah8, bl4)) | 0;
  68500. hi = (hi + Math.imul(ah8, bh4)) | 0;
  68501. lo = (lo + Math.imul(al7, bl5)) | 0;
  68502. mid = (mid + Math.imul(al7, bh5)) | 0;
  68503. mid = (mid + Math.imul(ah7, bl5)) | 0;
  68504. hi = (hi + Math.imul(ah7, bh5)) | 0;
  68505. lo = (lo + Math.imul(al6, bl6)) | 0;
  68506. mid = (mid + Math.imul(al6, bh6)) | 0;
  68507. mid = (mid + Math.imul(ah6, bl6)) | 0;
  68508. hi = (hi + Math.imul(ah6, bh6)) | 0;
  68509. lo = (lo + Math.imul(al5, bl7)) | 0;
  68510. mid = (mid + Math.imul(al5, bh7)) | 0;
  68511. mid = (mid + Math.imul(ah5, bl7)) | 0;
  68512. hi = (hi + Math.imul(ah5, bh7)) | 0;
  68513. lo = (lo + Math.imul(al4, bl8)) | 0;
  68514. mid = (mid + Math.imul(al4, bh8)) | 0;
  68515. mid = (mid + Math.imul(ah4, bl8)) | 0;
  68516. hi = (hi + Math.imul(ah4, bh8)) | 0;
  68517. lo = (lo + Math.imul(al3, bl9)) | 0;
  68518. mid = (mid + Math.imul(al3, bh9)) | 0;
  68519. mid = (mid + Math.imul(ah3, bl9)) | 0;
  68520. hi = (hi + Math.imul(ah3, bh9)) | 0;
  68521. var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68522. c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
  68523. w12 &= 0x3ffffff;
  68524. /* k = 13 */
  68525. lo = Math.imul(al9, bl4);
  68526. mid = Math.imul(al9, bh4);
  68527. mid = (mid + Math.imul(ah9, bl4)) | 0;
  68528. hi = Math.imul(ah9, bh4);
  68529. lo = (lo + Math.imul(al8, bl5)) | 0;
  68530. mid = (mid + Math.imul(al8, bh5)) | 0;
  68531. mid = (mid + Math.imul(ah8, bl5)) | 0;
  68532. hi = (hi + Math.imul(ah8, bh5)) | 0;
  68533. lo = (lo + Math.imul(al7, bl6)) | 0;
  68534. mid = (mid + Math.imul(al7, bh6)) | 0;
  68535. mid = (mid + Math.imul(ah7, bl6)) | 0;
  68536. hi = (hi + Math.imul(ah7, bh6)) | 0;
  68537. lo = (lo + Math.imul(al6, bl7)) | 0;
  68538. mid = (mid + Math.imul(al6, bh7)) | 0;
  68539. mid = (mid + Math.imul(ah6, bl7)) | 0;
  68540. hi = (hi + Math.imul(ah6, bh7)) | 0;
  68541. lo = (lo + Math.imul(al5, bl8)) | 0;
  68542. mid = (mid + Math.imul(al5, bh8)) | 0;
  68543. mid = (mid + Math.imul(ah5, bl8)) | 0;
  68544. hi = (hi + Math.imul(ah5, bh8)) | 0;
  68545. lo = (lo + Math.imul(al4, bl9)) | 0;
  68546. mid = (mid + Math.imul(al4, bh9)) | 0;
  68547. mid = (mid + Math.imul(ah4, bl9)) | 0;
  68548. hi = (hi + Math.imul(ah4, bh9)) | 0;
  68549. var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68550. c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
  68551. w13 &= 0x3ffffff;
  68552. /* k = 14 */
  68553. lo = Math.imul(al9, bl5);
  68554. mid = Math.imul(al9, bh5);
  68555. mid = (mid + Math.imul(ah9, bl5)) | 0;
  68556. hi = Math.imul(ah9, bh5);
  68557. lo = (lo + Math.imul(al8, bl6)) | 0;
  68558. mid = (mid + Math.imul(al8, bh6)) | 0;
  68559. mid = (mid + Math.imul(ah8, bl6)) | 0;
  68560. hi = (hi + Math.imul(ah8, bh6)) | 0;
  68561. lo = (lo + Math.imul(al7, bl7)) | 0;
  68562. mid = (mid + Math.imul(al7, bh7)) | 0;
  68563. mid = (mid + Math.imul(ah7, bl7)) | 0;
  68564. hi = (hi + Math.imul(ah7, bh7)) | 0;
  68565. lo = (lo + Math.imul(al6, bl8)) | 0;
  68566. mid = (mid + Math.imul(al6, bh8)) | 0;
  68567. mid = (mid + Math.imul(ah6, bl8)) | 0;
  68568. hi = (hi + Math.imul(ah6, bh8)) | 0;
  68569. lo = (lo + Math.imul(al5, bl9)) | 0;
  68570. mid = (mid + Math.imul(al5, bh9)) | 0;
  68571. mid = (mid + Math.imul(ah5, bl9)) | 0;
  68572. hi = (hi + Math.imul(ah5, bh9)) | 0;
  68573. var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68574. c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
  68575. w14 &= 0x3ffffff;
  68576. /* k = 15 */
  68577. lo = Math.imul(al9, bl6);
  68578. mid = Math.imul(al9, bh6);
  68579. mid = (mid + Math.imul(ah9, bl6)) | 0;
  68580. hi = Math.imul(ah9, bh6);
  68581. lo = (lo + Math.imul(al8, bl7)) | 0;
  68582. mid = (mid + Math.imul(al8, bh7)) | 0;
  68583. mid = (mid + Math.imul(ah8, bl7)) | 0;
  68584. hi = (hi + Math.imul(ah8, bh7)) | 0;
  68585. lo = (lo + Math.imul(al7, bl8)) | 0;
  68586. mid = (mid + Math.imul(al7, bh8)) | 0;
  68587. mid = (mid + Math.imul(ah7, bl8)) | 0;
  68588. hi = (hi + Math.imul(ah7, bh8)) | 0;
  68589. lo = (lo + Math.imul(al6, bl9)) | 0;
  68590. mid = (mid + Math.imul(al6, bh9)) | 0;
  68591. mid = (mid + Math.imul(ah6, bl9)) | 0;
  68592. hi = (hi + Math.imul(ah6, bh9)) | 0;
  68593. var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68594. c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
  68595. w15 &= 0x3ffffff;
  68596. /* k = 16 */
  68597. lo = Math.imul(al9, bl7);
  68598. mid = Math.imul(al9, bh7);
  68599. mid = (mid + Math.imul(ah9, bl7)) | 0;
  68600. hi = Math.imul(ah9, bh7);
  68601. lo = (lo + Math.imul(al8, bl8)) | 0;
  68602. mid = (mid + Math.imul(al8, bh8)) | 0;
  68603. mid = (mid + Math.imul(ah8, bl8)) | 0;
  68604. hi = (hi + Math.imul(ah8, bh8)) | 0;
  68605. lo = (lo + Math.imul(al7, bl9)) | 0;
  68606. mid = (mid + Math.imul(al7, bh9)) | 0;
  68607. mid = (mid + Math.imul(ah7, bl9)) | 0;
  68608. hi = (hi + Math.imul(ah7, bh9)) | 0;
  68609. var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68610. c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
  68611. w16 &= 0x3ffffff;
  68612. /* k = 17 */
  68613. lo = Math.imul(al9, bl8);
  68614. mid = Math.imul(al9, bh8);
  68615. mid = (mid + Math.imul(ah9, bl8)) | 0;
  68616. hi = Math.imul(ah9, bh8);
  68617. lo = (lo + Math.imul(al8, bl9)) | 0;
  68618. mid = (mid + Math.imul(al8, bh9)) | 0;
  68619. mid = (mid + Math.imul(ah8, bl9)) | 0;
  68620. hi = (hi + Math.imul(ah8, bh9)) | 0;
  68621. var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68622. c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
  68623. w17 &= 0x3ffffff;
  68624. /* k = 18 */
  68625. lo = Math.imul(al9, bl9);
  68626. mid = Math.imul(al9, bh9);
  68627. mid = (mid + Math.imul(ah9, bl9)) | 0;
  68628. hi = Math.imul(ah9, bh9);
  68629. var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  68630. c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
  68631. w18 &= 0x3ffffff;
  68632. o[0] = w0;
  68633. o[1] = w1;
  68634. o[2] = w2;
  68635. o[3] = w3;
  68636. o[4] = w4;
  68637. o[5] = w5;
  68638. o[6] = w6;
  68639. o[7] = w7;
  68640. o[8] = w8;
  68641. o[9] = w9;
  68642. o[10] = w10;
  68643. o[11] = w11;
  68644. o[12] = w12;
  68645. o[13] = w13;
  68646. o[14] = w14;
  68647. o[15] = w15;
  68648. o[16] = w16;
  68649. o[17] = w17;
  68650. o[18] = w18;
  68651. if (c !== 0) {
  68652. o[19] = c;
  68653. out.length++;
  68654. }
  68655. return out;
  68656. };
  68657. // Polyfill comb
  68658. if (!Math.imul) {
  68659. comb10MulTo = smallMulTo;
  68660. }
  68661. function bigMulTo (self, num, out) {
  68662. out.negative = num.negative ^ self.negative;
  68663. out.length = self.length + num.length;
  68664. var carry = 0;
  68665. var hncarry = 0;
  68666. for (var k = 0; k < out.length - 1; k++) {
  68667. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  68668. // note that ncarry could be >= 0x3ffffff
  68669. var ncarry = hncarry;
  68670. hncarry = 0;
  68671. var rword = carry & 0x3ffffff;
  68672. var maxJ = Math.min(k, num.length - 1);
  68673. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  68674. var i = k - j;
  68675. var a = self.words[i] | 0;
  68676. var b = num.words[j] | 0;
  68677. var r = a * b;
  68678. var lo = r & 0x3ffffff;
  68679. ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
  68680. lo = (lo + rword) | 0;
  68681. rword = lo & 0x3ffffff;
  68682. ncarry = (ncarry + (lo >>> 26)) | 0;
  68683. hncarry += ncarry >>> 26;
  68684. ncarry &= 0x3ffffff;
  68685. }
  68686. out.words[k] = rword;
  68687. carry = ncarry;
  68688. ncarry = hncarry;
  68689. }
  68690. if (carry !== 0) {
  68691. out.words[k] = carry;
  68692. } else {
  68693. out.length--;
  68694. }
  68695. return out.strip();
  68696. }
  68697. function jumboMulTo (self, num, out) {
  68698. var fftm = new FFTM();
  68699. return fftm.mulp(self, num, out);
  68700. }
  68701. BN.prototype.mulTo = function mulTo (num, out) {
  68702. var res;
  68703. var len = this.length + num.length;
  68704. if (this.length === 10 && num.length === 10) {
  68705. res = comb10MulTo(this, num, out);
  68706. } else if (len < 63) {
  68707. res = smallMulTo(this, num, out);
  68708. } else if (len < 1024) {
  68709. res = bigMulTo(this, num, out);
  68710. } else {
  68711. res = jumboMulTo(this, num, out);
  68712. }
  68713. return res;
  68714. };
  68715. // Cooley-Tukey algorithm for FFT
  68716. // slightly revisited to rely on looping instead of recursion
  68717. function FFTM (x, y) {
  68718. this.x = x;
  68719. this.y = y;
  68720. }
  68721. FFTM.prototype.makeRBT = function makeRBT (N) {
  68722. var t = new Array(N);
  68723. var l = BN.prototype._countBits(N) - 1;
  68724. for (var i = 0; i < N; i++) {
  68725. t[i] = this.revBin(i, l, N);
  68726. }
  68727. return t;
  68728. };
  68729. // Returns binary-reversed representation of `x`
  68730. FFTM.prototype.revBin = function revBin (x, l, N) {
  68731. if (x === 0 || x === N - 1) return x;
  68732. var rb = 0;
  68733. for (var i = 0; i < l; i++) {
  68734. rb |= (x & 1) << (l - i - 1);
  68735. x >>= 1;
  68736. }
  68737. return rb;
  68738. };
  68739. // Performs "tweedling" phase, therefore 'emulating'
  68740. // behaviour of the recursive algorithm
  68741. FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
  68742. for (var i = 0; i < N; i++) {
  68743. rtws[i] = rws[rbt[i]];
  68744. itws[i] = iws[rbt[i]];
  68745. }
  68746. };
  68747. FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
  68748. this.permute(rbt, rws, iws, rtws, itws, N);
  68749. for (var s = 1; s < N; s <<= 1) {
  68750. var l = s << 1;
  68751. var rtwdf = Math.cos(2 * Math.PI / l);
  68752. var itwdf = Math.sin(2 * Math.PI / l);
  68753. for (var p = 0; p < N; p += l) {
  68754. var rtwdf_ = rtwdf;
  68755. var itwdf_ = itwdf;
  68756. for (var j = 0; j < s; j++) {
  68757. var re = rtws[p + j];
  68758. var ie = itws[p + j];
  68759. var ro = rtws[p + j + s];
  68760. var io = itws[p + j + s];
  68761. var rx = rtwdf_ * ro - itwdf_ * io;
  68762. io = rtwdf_ * io + itwdf_ * ro;
  68763. ro = rx;
  68764. rtws[p + j] = re + ro;
  68765. itws[p + j] = ie + io;
  68766. rtws[p + j + s] = re - ro;
  68767. itws[p + j + s] = ie - io;
  68768. /* jshint maxdepth : false */
  68769. if (j !== l) {
  68770. rx = rtwdf * rtwdf_ - itwdf * itwdf_;
  68771. itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
  68772. rtwdf_ = rx;
  68773. }
  68774. }
  68775. }
  68776. }
  68777. };
  68778. FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
  68779. var N = Math.max(m, n) | 1;
  68780. var odd = N & 1;
  68781. var i = 0;
  68782. for (N = N / 2 | 0; N; N = N >>> 1) {
  68783. i++;
  68784. }
  68785. return 1 << i + 1 + odd;
  68786. };
  68787. FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
  68788. if (N <= 1) return;
  68789. for (var i = 0; i < N / 2; i++) {
  68790. var t = rws[i];
  68791. rws[i] = rws[N - i - 1];
  68792. rws[N - i - 1] = t;
  68793. t = iws[i];
  68794. iws[i] = -iws[N - i - 1];
  68795. iws[N - i - 1] = -t;
  68796. }
  68797. };
  68798. FFTM.prototype.normalize13b = function normalize13b (ws, N) {
  68799. var carry = 0;
  68800. for (var i = 0; i < N / 2; i++) {
  68801. var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
  68802. Math.round(ws[2 * i] / N) +
  68803. carry;
  68804. ws[i] = w & 0x3ffffff;
  68805. if (w < 0x4000000) {
  68806. carry = 0;
  68807. } else {
  68808. carry = w / 0x4000000 | 0;
  68809. }
  68810. }
  68811. return ws;
  68812. };
  68813. FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
  68814. var carry = 0;
  68815. for (var i = 0; i < len; i++) {
  68816. carry = carry + (ws[i] | 0);
  68817. rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
  68818. rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
  68819. }
  68820. // Pad with zeroes
  68821. for (i = 2 * len; i < N; ++i) {
  68822. rws[i] = 0;
  68823. }
  68824. assert(carry === 0);
  68825. assert((carry & ~0x1fff) === 0);
  68826. };
  68827. FFTM.prototype.stub = function stub (N) {
  68828. var ph = new Array(N);
  68829. for (var i = 0; i < N; i++) {
  68830. ph[i] = 0;
  68831. }
  68832. return ph;
  68833. };
  68834. FFTM.prototype.mulp = function mulp (x, y, out) {
  68835. var N = 2 * this.guessLen13b(x.length, y.length);
  68836. var rbt = this.makeRBT(N);
  68837. var _ = this.stub(N);
  68838. var rws = new Array(N);
  68839. var rwst = new Array(N);
  68840. var iwst = new Array(N);
  68841. var nrws = new Array(N);
  68842. var nrwst = new Array(N);
  68843. var niwst = new Array(N);
  68844. var rmws = out.words;
  68845. rmws.length = N;
  68846. this.convert13b(x.words, x.length, rws, N);
  68847. this.convert13b(y.words, y.length, nrws, N);
  68848. this.transform(rws, _, rwst, iwst, N, rbt);
  68849. this.transform(nrws, _, nrwst, niwst, N, rbt);
  68850. for (var i = 0; i < N; i++) {
  68851. var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
  68852. iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
  68853. rwst[i] = rx;
  68854. }
  68855. this.conjugate(rwst, iwst, N);
  68856. this.transform(rwst, iwst, rmws, _, N, rbt);
  68857. this.conjugate(rmws, _, N);
  68858. this.normalize13b(rmws, N);
  68859. out.negative = x.negative ^ y.negative;
  68860. out.length = x.length + y.length;
  68861. return out.strip();
  68862. };
  68863. // Multiply `this` by `num`
  68864. BN.prototype.mul = function mul (num) {
  68865. var out = new BN(null);
  68866. out.words = new Array(this.length + num.length);
  68867. return this.mulTo(num, out);
  68868. };
  68869. // Multiply employing FFT
  68870. BN.prototype.mulf = function mulf (num) {
  68871. var out = new BN(null);
  68872. out.words = new Array(this.length + num.length);
  68873. return jumboMulTo(this, num, out);
  68874. };
  68875. // In-place Multiplication
  68876. BN.prototype.imul = function imul (num) {
  68877. return this.clone().mulTo(num, this);
  68878. };
  68879. BN.prototype.imuln = function imuln (num) {
  68880. assert(typeof num === 'number');
  68881. assert(num < 0x4000000);
  68882. // Carry
  68883. var carry = 0;
  68884. for (var i = 0; i < this.length; i++) {
  68885. var w = (this.words[i] | 0) * num;
  68886. var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
  68887. carry >>= 26;
  68888. carry += (w / 0x4000000) | 0;
  68889. // NOTE: lo is 27bit maximum
  68890. carry += lo >>> 26;
  68891. this.words[i] = lo & 0x3ffffff;
  68892. }
  68893. if (carry !== 0) {
  68894. this.words[i] = carry;
  68895. this.length++;
  68896. }
  68897. return this;
  68898. };
  68899. BN.prototype.muln = function muln (num) {
  68900. return this.clone().imuln(num);
  68901. };
  68902. // `this` * `this`
  68903. BN.prototype.sqr = function sqr () {
  68904. return this.mul(this);
  68905. };
  68906. // `this` * `this` in-place
  68907. BN.prototype.isqr = function isqr () {
  68908. return this.imul(this.clone());
  68909. };
  68910. // Math.pow(`this`, `num`)
  68911. BN.prototype.pow = function pow (num) {
  68912. var w = toBitArray(num);
  68913. if (w.length === 0) return new BN(1);
  68914. // Skip leading zeroes
  68915. var res = this;
  68916. for (var i = 0; i < w.length; i++, res = res.sqr()) {
  68917. if (w[i] !== 0) break;
  68918. }
  68919. if (++i < w.length) {
  68920. for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
  68921. if (w[i] === 0) continue;
  68922. res = res.mul(q);
  68923. }
  68924. }
  68925. return res;
  68926. };
  68927. // Shift-left in-place
  68928. BN.prototype.iushln = function iushln (bits) {
  68929. assert(typeof bits === 'number' && bits >= 0);
  68930. var r = bits % 26;
  68931. var s = (bits - r) / 26;
  68932. var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
  68933. var i;
  68934. if (r !== 0) {
  68935. var carry = 0;
  68936. for (i = 0; i < this.length; i++) {
  68937. var newCarry = this.words[i] & carryMask;
  68938. var c = ((this.words[i] | 0) - newCarry) << r;
  68939. this.words[i] = c | carry;
  68940. carry = newCarry >>> (26 - r);
  68941. }
  68942. if (carry) {
  68943. this.words[i] = carry;
  68944. this.length++;
  68945. }
  68946. }
  68947. if (s !== 0) {
  68948. for (i = this.length - 1; i >= 0; i--) {
  68949. this.words[i + s] = this.words[i];
  68950. }
  68951. for (i = 0; i < s; i++) {
  68952. this.words[i] = 0;
  68953. }
  68954. this.length += s;
  68955. }
  68956. return this.strip();
  68957. };
  68958. BN.prototype.ishln = function ishln (bits) {
  68959. // TODO(indutny): implement me
  68960. assert(this.negative === 0);
  68961. return this.iushln(bits);
  68962. };
  68963. // Shift-right in-place
  68964. // NOTE: `hint` is a lowest bit before trailing zeroes
  68965. // NOTE: if `extended` is present - it will be filled with destroyed bits
  68966. BN.prototype.iushrn = function iushrn (bits, hint, extended) {
  68967. assert(typeof bits === 'number' && bits >= 0);
  68968. var h;
  68969. if (hint) {
  68970. h = (hint - (hint % 26)) / 26;
  68971. } else {
  68972. h = 0;
  68973. }
  68974. var r = bits % 26;
  68975. var s = Math.min((bits - r) / 26, this.length);
  68976. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  68977. var maskedWords = extended;
  68978. h -= s;
  68979. h = Math.max(0, h);
  68980. // Extended mode, copy masked part
  68981. if (maskedWords) {
  68982. for (var i = 0; i < s; i++) {
  68983. maskedWords.words[i] = this.words[i];
  68984. }
  68985. maskedWords.length = s;
  68986. }
  68987. if (s === 0) {
  68988. // No-op, we should not move anything at all
  68989. } else if (this.length > s) {
  68990. this.length -= s;
  68991. for (i = 0; i < this.length; i++) {
  68992. this.words[i] = this.words[i + s];
  68993. }
  68994. } else {
  68995. this.words[0] = 0;
  68996. this.length = 1;
  68997. }
  68998. var carry = 0;
  68999. for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
  69000. var word = this.words[i] | 0;
  69001. this.words[i] = (carry << (26 - r)) | (word >>> r);
  69002. carry = word & mask;
  69003. }
  69004. // Push carried bits as a mask
  69005. if (maskedWords && carry !== 0) {
  69006. maskedWords.words[maskedWords.length++] = carry;
  69007. }
  69008. if (this.length === 0) {
  69009. this.words[0] = 0;
  69010. this.length = 1;
  69011. }
  69012. return this.strip();
  69013. };
  69014. BN.prototype.ishrn = function ishrn (bits, hint, extended) {
  69015. // TODO(indutny): implement me
  69016. assert(this.negative === 0);
  69017. return this.iushrn(bits, hint, extended);
  69018. };
  69019. // Shift-left
  69020. BN.prototype.shln = function shln (bits) {
  69021. return this.clone().ishln(bits);
  69022. };
  69023. BN.prototype.ushln = function ushln (bits) {
  69024. return this.clone().iushln(bits);
  69025. };
  69026. // Shift-right
  69027. BN.prototype.shrn = function shrn (bits) {
  69028. return this.clone().ishrn(bits);
  69029. };
  69030. BN.prototype.ushrn = function ushrn (bits) {
  69031. return this.clone().iushrn(bits);
  69032. };
  69033. // Test if n bit is set
  69034. BN.prototype.testn = function testn (bit) {
  69035. assert(typeof bit === 'number' && bit >= 0);
  69036. var r = bit % 26;
  69037. var s = (bit - r) / 26;
  69038. var q = 1 << r;
  69039. // Fast case: bit is much higher than all existing words
  69040. if (this.length <= s) return false;
  69041. // Check bit and return
  69042. var w = this.words[s];
  69043. return !!(w & q);
  69044. };
  69045. // Return only lowers bits of number (in-place)
  69046. BN.prototype.imaskn = function imaskn (bits) {
  69047. assert(typeof bits === 'number' && bits >= 0);
  69048. var r = bits % 26;
  69049. var s = (bits - r) / 26;
  69050. assert(this.negative === 0, 'imaskn works only with positive numbers');
  69051. if (this.length <= s) {
  69052. return this;
  69053. }
  69054. if (r !== 0) {
  69055. s++;
  69056. }
  69057. this.length = Math.min(s, this.length);
  69058. if (r !== 0) {
  69059. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  69060. this.words[this.length - 1] &= mask;
  69061. }
  69062. return this.strip();
  69063. };
  69064. // Return only lowers bits of number
  69065. BN.prototype.maskn = function maskn (bits) {
  69066. return this.clone().imaskn(bits);
  69067. };
  69068. // Add plain number `num` to `this`
  69069. BN.prototype.iaddn = function iaddn (num) {
  69070. assert(typeof num === 'number');
  69071. assert(num < 0x4000000);
  69072. if (num < 0) return this.isubn(-num);
  69073. // Possible sign change
  69074. if (this.negative !== 0) {
  69075. if (this.length === 1 && (this.words[0] | 0) < num) {
  69076. this.words[0] = num - (this.words[0] | 0);
  69077. this.negative = 0;
  69078. return this;
  69079. }
  69080. this.negative = 0;
  69081. this.isubn(num);
  69082. this.negative = 1;
  69083. return this;
  69084. }
  69085. // Add without checks
  69086. return this._iaddn(num);
  69087. };
  69088. BN.prototype._iaddn = function _iaddn (num) {
  69089. this.words[0] += num;
  69090. // Carry
  69091. for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
  69092. this.words[i] -= 0x4000000;
  69093. if (i === this.length - 1) {
  69094. this.words[i + 1] = 1;
  69095. } else {
  69096. this.words[i + 1]++;
  69097. }
  69098. }
  69099. this.length = Math.max(this.length, i + 1);
  69100. return this;
  69101. };
  69102. // Subtract plain number `num` from `this`
  69103. BN.prototype.isubn = function isubn (num) {
  69104. assert(typeof num === 'number');
  69105. assert(num < 0x4000000);
  69106. if (num < 0) return this.iaddn(-num);
  69107. if (this.negative !== 0) {
  69108. this.negative = 0;
  69109. this.iaddn(num);
  69110. this.negative = 1;
  69111. return this;
  69112. }
  69113. this.words[0] -= num;
  69114. if (this.length === 1 && this.words[0] < 0) {
  69115. this.words[0] = -this.words[0];
  69116. this.negative = 1;
  69117. } else {
  69118. // Carry
  69119. for (var i = 0; i < this.length && this.words[i] < 0; i++) {
  69120. this.words[i] += 0x4000000;
  69121. this.words[i + 1] -= 1;
  69122. }
  69123. }
  69124. return this.strip();
  69125. };
  69126. BN.prototype.addn = function addn (num) {
  69127. return this.clone().iaddn(num);
  69128. };
  69129. BN.prototype.subn = function subn (num) {
  69130. return this.clone().isubn(num);
  69131. };
  69132. BN.prototype.iabs = function iabs () {
  69133. this.negative = 0;
  69134. return this;
  69135. };
  69136. BN.prototype.abs = function abs () {
  69137. return this.clone().iabs();
  69138. };
  69139. BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
  69140. var len = num.length + shift;
  69141. var i;
  69142. this._expand(len);
  69143. var w;
  69144. var carry = 0;
  69145. for (i = 0; i < num.length; i++) {
  69146. w = (this.words[i + shift] | 0) + carry;
  69147. var right = (num.words[i] | 0) * mul;
  69148. w -= right & 0x3ffffff;
  69149. carry = (w >> 26) - ((right / 0x4000000) | 0);
  69150. this.words[i + shift] = w & 0x3ffffff;
  69151. }
  69152. for (; i < this.length - shift; i++) {
  69153. w = (this.words[i + shift] | 0) + carry;
  69154. carry = w >> 26;
  69155. this.words[i + shift] = w & 0x3ffffff;
  69156. }
  69157. if (carry === 0) return this.strip();
  69158. // Subtraction overflow
  69159. assert(carry === -1);
  69160. carry = 0;
  69161. for (i = 0; i < this.length; i++) {
  69162. w = -(this.words[i] | 0) + carry;
  69163. carry = w >> 26;
  69164. this.words[i] = w & 0x3ffffff;
  69165. }
  69166. this.negative = 1;
  69167. return this.strip();
  69168. };
  69169. BN.prototype._wordDiv = function _wordDiv (num, mode) {
  69170. var shift = this.length - num.length;
  69171. var a = this.clone();
  69172. var b = num;
  69173. // Normalize
  69174. var bhi = b.words[b.length - 1] | 0;
  69175. var bhiBits = this._countBits(bhi);
  69176. shift = 26 - bhiBits;
  69177. if (shift !== 0) {
  69178. b = b.ushln(shift);
  69179. a.iushln(shift);
  69180. bhi = b.words[b.length - 1] | 0;
  69181. }
  69182. // Initialize quotient
  69183. var m = a.length - b.length;
  69184. var q;
  69185. if (mode !== 'mod') {
  69186. q = new BN(null);
  69187. q.length = m + 1;
  69188. q.words = new Array(q.length);
  69189. for (var i = 0; i < q.length; i++) {
  69190. q.words[i] = 0;
  69191. }
  69192. }
  69193. var diff = a.clone()._ishlnsubmul(b, 1, m);
  69194. if (diff.negative === 0) {
  69195. a = diff;
  69196. if (q) {
  69197. q.words[m] = 1;
  69198. }
  69199. }
  69200. for (var j = m - 1; j >= 0; j--) {
  69201. var qj = (a.words[b.length + j] | 0) * 0x4000000 +
  69202. (a.words[b.length + j - 1] | 0);
  69203. // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
  69204. // (0x7ffffff)
  69205. qj = Math.min((qj / bhi) | 0, 0x3ffffff);
  69206. a._ishlnsubmul(b, qj, j);
  69207. while (a.negative !== 0) {
  69208. qj--;
  69209. a.negative = 0;
  69210. a._ishlnsubmul(b, 1, j);
  69211. if (!a.isZero()) {
  69212. a.negative ^= 1;
  69213. }
  69214. }
  69215. if (q) {
  69216. q.words[j] = qj;
  69217. }
  69218. }
  69219. if (q) {
  69220. q.strip();
  69221. }
  69222. a.strip();
  69223. // Denormalize
  69224. if (mode !== 'div' && shift !== 0) {
  69225. a.iushrn(shift);
  69226. }
  69227. return {
  69228. div: q || null,
  69229. mod: a
  69230. };
  69231. };
  69232. // NOTE: 1) `mode` can be set to `mod` to request mod only,
  69233. // to `div` to request div only, or be absent to
  69234. // request both div & mod
  69235. // 2) `positive` is true if unsigned mod is requested
  69236. BN.prototype.divmod = function divmod (num, mode, positive) {
  69237. assert(!num.isZero());
  69238. if (this.isZero()) {
  69239. return {
  69240. div: new BN(0),
  69241. mod: new BN(0)
  69242. };
  69243. }
  69244. var div, mod, res;
  69245. if (this.negative !== 0 && num.negative === 0) {
  69246. res = this.neg().divmod(num, mode);
  69247. if (mode !== 'mod') {
  69248. div = res.div.neg();
  69249. }
  69250. if (mode !== 'div') {
  69251. mod = res.mod.neg();
  69252. if (positive && mod.negative !== 0) {
  69253. mod.iadd(num);
  69254. }
  69255. }
  69256. return {
  69257. div: div,
  69258. mod: mod
  69259. };
  69260. }
  69261. if (this.negative === 0 && num.negative !== 0) {
  69262. res = this.divmod(num.neg(), mode);
  69263. if (mode !== 'mod') {
  69264. div = res.div.neg();
  69265. }
  69266. return {
  69267. div: div,
  69268. mod: res.mod
  69269. };
  69270. }
  69271. if ((this.negative & num.negative) !== 0) {
  69272. res = this.neg().divmod(num.neg(), mode);
  69273. if (mode !== 'div') {
  69274. mod = res.mod.neg();
  69275. if (positive && mod.negative !== 0) {
  69276. mod.isub(num);
  69277. }
  69278. }
  69279. return {
  69280. div: res.div,
  69281. mod: mod
  69282. };
  69283. }
  69284. // Both numbers are positive at this point
  69285. // Strip both numbers to approximate shift value
  69286. if (num.length > this.length || this.cmp(num) < 0) {
  69287. return {
  69288. div: new BN(0),
  69289. mod: this
  69290. };
  69291. }
  69292. // Very short reduction
  69293. if (num.length === 1) {
  69294. if (mode === 'div') {
  69295. return {
  69296. div: this.divn(num.words[0]),
  69297. mod: null
  69298. };
  69299. }
  69300. if (mode === 'mod') {
  69301. return {
  69302. div: null,
  69303. mod: new BN(this.modn(num.words[0]))
  69304. };
  69305. }
  69306. return {
  69307. div: this.divn(num.words[0]),
  69308. mod: new BN(this.modn(num.words[0]))
  69309. };
  69310. }
  69311. return this._wordDiv(num, mode);
  69312. };
  69313. // Find `this` / `num`
  69314. BN.prototype.div = function div (num) {
  69315. return this.divmod(num, 'div', false).div;
  69316. };
  69317. // Find `this` % `num`
  69318. BN.prototype.mod = function mod (num) {
  69319. return this.divmod(num, 'mod', false).mod;
  69320. };
  69321. BN.prototype.umod = function umod (num) {
  69322. return this.divmod(num, 'mod', true).mod;
  69323. };
  69324. // Find Round(`this` / `num`)
  69325. BN.prototype.divRound = function divRound (num) {
  69326. var dm = this.divmod(num);
  69327. // Fast case - exact division
  69328. if (dm.mod.isZero()) return dm.div;
  69329. var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
  69330. var half = num.ushrn(1);
  69331. var r2 = num.andln(1);
  69332. var cmp = mod.cmp(half);
  69333. // Round down
  69334. if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
  69335. // Round up
  69336. return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
  69337. };
  69338. BN.prototype.modn = function modn (num) {
  69339. assert(num <= 0x3ffffff);
  69340. var p = (1 << 26) % num;
  69341. var acc = 0;
  69342. for (var i = this.length - 1; i >= 0; i--) {
  69343. acc = (p * acc + (this.words[i] | 0)) % num;
  69344. }
  69345. return acc;
  69346. };
  69347. // In-place division by number
  69348. BN.prototype.idivn = function idivn (num) {
  69349. assert(num <= 0x3ffffff);
  69350. var carry = 0;
  69351. for (var i = this.length - 1; i >= 0; i--) {
  69352. var w = (this.words[i] | 0) + carry * 0x4000000;
  69353. this.words[i] = (w / num) | 0;
  69354. carry = w % num;
  69355. }
  69356. return this.strip();
  69357. };
  69358. BN.prototype.divn = function divn (num) {
  69359. return this.clone().idivn(num);
  69360. };
  69361. BN.prototype.egcd = function egcd (p) {
  69362. assert(p.negative === 0);
  69363. assert(!p.isZero());
  69364. var x = this;
  69365. var y = p.clone();
  69366. if (x.negative !== 0) {
  69367. x = x.umod(p);
  69368. } else {
  69369. x = x.clone();
  69370. }
  69371. // A * x + B * y = x
  69372. var A = new BN(1);
  69373. var B = new BN(0);
  69374. // C * x + D * y = y
  69375. var C = new BN(0);
  69376. var D = new BN(1);
  69377. var g = 0;
  69378. while (x.isEven() && y.isEven()) {
  69379. x.iushrn(1);
  69380. y.iushrn(1);
  69381. ++g;
  69382. }
  69383. var yp = y.clone();
  69384. var xp = x.clone();
  69385. while (!x.isZero()) {
  69386. for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  69387. if (i > 0) {
  69388. x.iushrn(i);
  69389. while (i-- > 0) {
  69390. if (A.isOdd() || B.isOdd()) {
  69391. A.iadd(yp);
  69392. B.isub(xp);
  69393. }
  69394. A.iushrn(1);
  69395. B.iushrn(1);
  69396. }
  69397. }
  69398. for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  69399. if (j > 0) {
  69400. y.iushrn(j);
  69401. while (j-- > 0) {
  69402. if (C.isOdd() || D.isOdd()) {
  69403. C.iadd(yp);
  69404. D.isub(xp);
  69405. }
  69406. C.iushrn(1);
  69407. D.iushrn(1);
  69408. }
  69409. }
  69410. if (x.cmp(y) >= 0) {
  69411. x.isub(y);
  69412. A.isub(C);
  69413. B.isub(D);
  69414. } else {
  69415. y.isub(x);
  69416. C.isub(A);
  69417. D.isub(B);
  69418. }
  69419. }
  69420. return {
  69421. a: C,
  69422. b: D,
  69423. gcd: y.iushln(g)
  69424. };
  69425. };
  69426. // This is reduced incarnation of the binary EEA
  69427. // above, designated to invert members of the
  69428. // _prime_ fields F(p) at a maximal speed
  69429. BN.prototype._invmp = function _invmp (p) {
  69430. assert(p.negative === 0);
  69431. assert(!p.isZero());
  69432. var a = this;
  69433. var b = p.clone();
  69434. if (a.negative !== 0) {
  69435. a = a.umod(p);
  69436. } else {
  69437. a = a.clone();
  69438. }
  69439. var x1 = new BN(1);
  69440. var x2 = new BN(0);
  69441. var delta = b.clone();
  69442. while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
  69443. for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  69444. if (i > 0) {
  69445. a.iushrn(i);
  69446. while (i-- > 0) {
  69447. if (x1.isOdd()) {
  69448. x1.iadd(delta);
  69449. }
  69450. x1.iushrn(1);
  69451. }
  69452. }
  69453. for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  69454. if (j > 0) {
  69455. b.iushrn(j);
  69456. while (j-- > 0) {
  69457. if (x2.isOdd()) {
  69458. x2.iadd(delta);
  69459. }
  69460. x2.iushrn(1);
  69461. }
  69462. }
  69463. if (a.cmp(b) >= 0) {
  69464. a.isub(b);
  69465. x1.isub(x2);
  69466. } else {
  69467. b.isub(a);
  69468. x2.isub(x1);
  69469. }
  69470. }
  69471. var res;
  69472. if (a.cmpn(1) === 0) {
  69473. res = x1;
  69474. } else {
  69475. res = x2;
  69476. }
  69477. if (res.cmpn(0) < 0) {
  69478. res.iadd(p);
  69479. }
  69480. return res;
  69481. };
  69482. BN.prototype.gcd = function gcd (num) {
  69483. if (this.isZero()) return num.abs();
  69484. if (num.isZero()) return this.abs();
  69485. var a = this.clone();
  69486. var b = num.clone();
  69487. a.negative = 0;
  69488. b.negative = 0;
  69489. // Remove common factor of two
  69490. for (var shift = 0; a.isEven() && b.isEven(); shift++) {
  69491. a.iushrn(1);
  69492. b.iushrn(1);
  69493. }
  69494. do {
  69495. while (a.isEven()) {
  69496. a.iushrn(1);
  69497. }
  69498. while (b.isEven()) {
  69499. b.iushrn(1);
  69500. }
  69501. var r = a.cmp(b);
  69502. if (r < 0) {
  69503. // Swap `a` and `b` to make `a` always bigger than `b`
  69504. var t = a;
  69505. a = b;
  69506. b = t;
  69507. } else if (r === 0 || b.cmpn(1) === 0) {
  69508. break;
  69509. }
  69510. a.isub(b);
  69511. } while (true);
  69512. return b.iushln(shift);
  69513. };
  69514. // Invert number in the field F(num)
  69515. BN.prototype.invm = function invm (num) {
  69516. return this.egcd(num).a.umod(num);
  69517. };
  69518. BN.prototype.isEven = function isEven () {
  69519. return (this.words[0] & 1) === 0;
  69520. };
  69521. BN.prototype.isOdd = function isOdd () {
  69522. return (this.words[0] & 1) === 1;
  69523. };
  69524. // And first word and num
  69525. BN.prototype.andln = function andln (num) {
  69526. return this.words[0] & num;
  69527. };
  69528. // Increment at the bit position in-line
  69529. BN.prototype.bincn = function bincn (bit) {
  69530. assert(typeof bit === 'number');
  69531. var r = bit % 26;
  69532. var s = (bit - r) / 26;
  69533. var q = 1 << r;
  69534. // Fast case: bit is much higher than all existing words
  69535. if (this.length <= s) {
  69536. this._expand(s + 1);
  69537. this.words[s] |= q;
  69538. return this;
  69539. }
  69540. // Add bit and propagate, if needed
  69541. var carry = q;
  69542. for (var i = s; carry !== 0 && i < this.length; i++) {
  69543. var w = this.words[i] | 0;
  69544. w += carry;
  69545. carry = w >>> 26;
  69546. w &= 0x3ffffff;
  69547. this.words[i] = w;
  69548. }
  69549. if (carry !== 0) {
  69550. this.words[i] = carry;
  69551. this.length++;
  69552. }
  69553. return this;
  69554. };
  69555. BN.prototype.isZero = function isZero () {
  69556. return this.length === 1 && this.words[0] === 0;
  69557. };
  69558. BN.prototype.cmpn = function cmpn (num) {
  69559. var negative = num < 0;
  69560. if (this.negative !== 0 && !negative) return -1;
  69561. if (this.negative === 0 && negative) return 1;
  69562. this.strip();
  69563. var res;
  69564. if (this.length > 1) {
  69565. res = 1;
  69566. } else {
  69567. if (negative) {
  69568. num = -num;
  69569. }
  69570. assert(num <= 0x3ffffff, 'Number is too big');
  69571. var w = this.words[0] | 0;
  69572. res = w === num ? 0 : w < num ? -1 : 1;
  69573. }
  69574. if (this.negative !== 0) return -res | 0;
  69575. return res;
  69576. };
  69577. // Compare two numbers and return:
  69578. // 1 - if `this` > `num`
  69579. // 0 - if `this` == `num`
  69580. // -1 - if `this` < `num`
  69581. BN.prototype.cmp = function cmp (num) {
  69582. if (this.negative !== 0 && num.negative === 0) return -1;
  69583. if (this.negative === 0 && num.negative !== 0) return 1;
  69584. var res = this.ucmp(num);
  69585. if (this.negative !== 0) return -res | 0;
  69586. return res;
  69587. };
  69588. // Unsigned comparison
  69589. BN.prototype.ucmp = function ucmp (num) {
  69590. // At this point both numbers have the same sign
  69591. if (this.length > num.length) return 1;
  69592. if (this.length < num.length) return -1;
  69593. var res = 0;
  69594. for (var i = this.length - 1; i >= 0; i--) {
  69595. var a = this.words[i] | 0;
  69596. var b = num.words[i] | 0;
  69597. if (a === b) continue;
  69598. if (a < b) {
  69599. res = -1;
  69600. } else if (a > b) {
  69601. res = 1;
  69602. }
  69603. break;
  69604. }
  69605. return res;
  69606. };
  69607. BN.prototype.gtn = function gtn (num) {
  69608. return this.cmpn(num) === 1;
  69609. };
  69610. BN.prototype.gt = function gt (num) {
  69611. return this.cmp(num) === 1;
  69612. };
  69613. BN.prototype.gten = function gten (num) {
  69614. return this.cmpn(num) >= 0;
  69615. };
  69616. BN.prototype.gte = function gte (num) {
  69617. return this.cmp(num) >= 0;
  69618. };
  69619. BN.prototype.ltn = function ltn (num) {
  69620. return this.cmpn(num) === -1;
  69621. };
  69622. BN.prototype.lt = function lt (num) {
  69623. return this.cmp(num) === -1;
  69624. };
  69625. BN.prototype.lten = function lten (num) {
  69626. return this.cmpn(num) <= 0;
  69627. };
  69628. BN.prototype.lte = function lte (num) {
  69629. return this.cmp(num) <= 0;
  69630. };
  69631. BN.prototype.eqn = function eqn (num) {
  69632. return this.cmpn(num) === 0;
  69633. };
  69634. BN.prototype.eq = function eq (num) {
  69635. return this.cmp(num) === 0;
  69636. };
  69637. //
  69638. // A reduce context, could be using montgomery or something better, depending
  69639. // on the `m` itself.
  69640. //
  69641. BN.red = function red (num) {
  69642. return new Red(num);
  69643. };
  69644. BN.prototype.toRed = function toRed (ctx) {
  69645. assert(!this.red, 'Already a number in reduction context');
  69646. assert(this.negative === 0, 'red works only with positives');
  69647. return ctx.convertTo(this)._forceRed(ctx);
  69648. };
  69649. BN.prototype.fromRed = function fromRed () {
  69650. assert(this.red, 'fromRed works only with numbers in reduction context');
  69651. return this.red.convertFrom(this);
  69652. };
  69653. BN.prototype._forceRed = function _forceRed (ctx) {
  69654. this.red = ctx;
  69655. return this;
  69656. };
  69657. BN.prototype.forceRed = function forceRed (ctx) {
  69658. assert(!this.red, 'Already a number in reduction context');
  69659. return this._forceRed(ctx);
  69660. };
  69661. BN.prototype.redAdd = function redAdd (num) {
  69662. assert(this.red, 'redAdd works only with red numbers');
  69663. return this.red.add(this, num);
  69664. };
  69665. BN.prototype.redIAdd = function redIAdd (num) {
  69666. assert(this.red, 'redIAdd works only with red numbers');
  69667. return this.red.iadd(this, num);
  69668. };
  69669. BN.prototype.redSub = function redSub (num) {
  69670. assert(this.red, 'redSub works only with red numbers');
  69671. return this.red.sub(this, num);
  69672. };
  69673. BN.prototype.redISub = function redISub (num) {
  69674. assert(this.red, 'redISub works only with red numbers');
  69675. return this.red.isub(this, num);
  69676. };
  69677. BN.prototype.redShl = function redShl (num) {
  69678. assert(this.red, 'redShl works only with red numbers');
  69679. return this.red.shl(this, num);
  69680. };
  69681. BN.prototype.redMul = function redMul (num) {
  69682. assert(this.red, 'redMul works only with red numbers');
  69683. this.red._verify2(this, num);
  69684. return this.red.mul(this, num);
  69685. };
  69686. BN.prototype.redIMul = function redIMul (num) {
  69687. assert(this.red, 'redMul works only with red numbers');
  69688. this.red._verify2(this, num);
  69689. return this.red.imul(this, num);
  69690. };
  69691. BN.prototype.redSqr = function redSqr () {
  69692. assert(this.red, 'redSqr works only with red numbers');
  69693. this.red._verify1(this);
  69694. return this.red.sqr(this);
  69695. };
  69696. BN.prototype.redISqr = function redISqr () {
  69697. assert(this.red, 'redISqr works only with red numbers');
  69698. this.red._verify1(this);
  69699. return this.red.isqr(this);
  69700. };
  69701. // Square root over p
  69702. BN.prototype.redSqrt = function redSqrt () {
  69703. assert(this.red, 'redSqrt works only with red numbers');
  69704. this.red._verify1(this);
  69705. return this.red.sqrt(this);
  69706. };
  69707. BN.prototype.redInvm = function redInvm () {
  69708. assert(this.red, 'redInvm works only with red numbers');
  69709. this.red._verify1(this);
  69710. return this.red.invm(this);
  69711. };
  69712. // Return negative clone of `this` % `red modulo`
  69713. BN.prototype.redNeg = function redNeg () {
  69714. assert(this.red, 'redNeg works only with red numbers');
  69715. this.red._verify1(this);
  69716. return this.red.neg(this);
  69717. };
  69718. BN.prototype.redPow = function redPow (num) {
  69719. assert(this.red && !num.red, 'redPow(normalNum)');
  69720. this.red._verify1(this);
  69721. return this.red.pow(this, num);
  69722. };
  69723. // Prime numbers with efficient reduction
  69724. var primes = {
  69725. k256: null,
  69726. p224: null,
  69727. p192: null,
  69728. p25519: null
  69729. };
  69730. // Pseudo-Mersenne prime
  69731. function MPrime (name, p) {
  69732. // P = 2 ^ N - K
  69733. this.name = name;
  69734. this.p = new BN(p, 16);
  69735. this.n = this.p.bitLength();
  69736. this.k = new BN(1).iushln(this.n).isub(this.p);
  69737. this.tmp = this._tmp();
  69738. }
  69739. MPrime.prototype._tmp = function _tmp () {
  69740. var tmp = new BN(null);
  69741. tmp.words = new Array(Math.ceil(this.n / 13));
  69742. return tmp;
  69743. };
  69744. MPrime.prototype.ireduce = function ireduce (num) {
  69745. // Assumes that `num` is less than `P^2`
  69746. // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
  69747. var r = num;
  69748. var rlen;
  69749. do {
  69750. this.split(r, this.tmp);
  69751. r = this.imulK(r);
  69752. r = r.iadd(this.tmp);
  69753. rlen = r.bitLength();
  69754. } while (rlen > this.n);
  69755. var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
  69756. if (cmp === 0) {
  69757. r.words[0] = 0;
  69758. r.length = 1;
  69759. } else if (cmp > 0) {
  69760. r.isub(this.p);
  69761. } else {
  69762. if (r.strip !== undefined) {
  69763. // r is BN v4 instance
  69764. r.strip();
  69765. } else {
  69766. // r is BN v5 instance
  69767. r._strip();
  69768. }
  69769. }
  69770. return r;
  69771. };
  69772. MPrime.prototype.split = function split (input, out) {
  69773. input.iushrn(this.n, 0, out);
  69774. };
  69775. MPrime.prototype.imulK = function imulK (num) {
  69776. return num.imul(this.k);
  69777. };
  69778. function K256 () {
  69779. MPrime.call(
  69780. this,
  69781. 'k256',
  69782. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
  69783. }
  69784. inherits(K256, MPrime);
  69785. K256.prototype.split = function split (input, output) {
  69786. // 256 = 9 * 26 + 22
  69787. var mask = 0x3fffff;
  69788. var outLen = Math.min(input.length, 9);
  69789. for (var i = 0; i < outLen; i++) {
  69790. output.words[i] = input.words[i];
  69791. }
  69792. output.length = outLen;
  69793. if (input.length <= 9) {
  69794. input.words[0] = 0;
  69795. input.length = 1;
  69796. return;
  69797. }
  69798. // Shift by 9 limbs
  69799. var prev = input.words[9];
  69800. output.words[output.length++] = prev & mask;
  69801. for (i = 10; i < input.length; i++) {
  69802. var next = input.words[i] | 0;
  69803. input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
  69804. prev = next;
  69805. }
  69806. prev >>>= 22;
  69807. input.words[i - 10] = prev;
  69808. if (prev === 0 && input.length > 10) {
  69809. input.length -= 10;
  69810. } else {
  69811. input.length -= 9;
  69812. }
  69813. };
  69814. K256.prototype.imulK = function imulK (num) {
  69815. // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
  69816. num.words[num.length] = 0;
  69817. num.words[num.length + 1] = 0;
  69818. num.length += 2;
  69819. // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
  69820. var lo = 0;
  69821. for (var i = 0; i < num.length; i++) {
  69822. var w = num.words[i] | 0;
  69823. lo += w * 0x3d1;
  69824. num.words[i] = lo & 0x3ffffff;
  69825. lo = w * 0x40 + ((lo / 0x4000000) | 0);
  69826. }
  69827. // Fast length reduction
  69828. if (num.words[num.length - 1] === 0) {
  69829. num.length--;
  69830. if (num.words[num.length - 1] === 0) {
  69831. num.length--;
  69832. }
  69833. }
  69834. return num;
  69835. };
  69836. function P224 () {
  69837. MPrime.call(
  69838. this,
  69839. 'p224',
  69840. 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
  69841. }
  69842. inherits(P224, MPrime);
  69843. function P192 () {
  69844. MPrime.call(
  69845. this,
  69846. 'p192',
  69847. 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
  69848. }
  69849. inherits(P192, MPrime);
  69850. function P25519 () {
  69851. // 2 ^ 255 - 19
  69852. MPrime.call(
  69853. this,
  69854. '25519',
  69855. '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
  69856. }
  69857. inherits(P25519, MPrime);
  69858. P25519.prototype.imulK = function imulK (num) {
  69859. // K = 0x13
  69860. var carry = 0;
  69861. for (var i = 0; i < num.length; i++) {
  69862. var hi = (num.words[i] | 0) * 0x13 + carry;
  69863. var lo = hi & 0x3ffffff;
  69864. hi >>>= 26;
  69865. num.words[i] = lo;
  69866. carry = hi;
  69867. }
  69868. if (carry !== 0) {
  69869. num.words[num.length++] = carry;
  69870. }
  69871. return num;
  69872. };
  69873. // Exported mostly for testing purposes, use plain name instead
  69874. BN._prime = function prime (name) {
  69875. // Cached version of prime
  69876. if (primes[name]) return primes[name];
  69877. var prime;
  69878. if (name === 'k256') {
  69879. prime = new K256();
  69880. } else if (name === 'p224') {
  69881. prime = new P224();
  69882. } else if (name === 'p192') {
  69883. prime = new P192();
  69884. } else if (name === 'p25519') {
  69885. prime = new P25519();
  69886. } else {
  69887. throw new Error('Unknown prime ' + name);
  69888. }
  69889. primes[name] = prime;
  69890. return prime;
  69891. };
  69892. //
  69893. // Base reduction engine
  69894. //
  69895. function Red (m) {
  69896. if (typeof m === 'string') {
  69897. var prime = BN._prime(m);
  69898. this.m = prime.p;
  69899. this.prime = prime;
  69900. } else {
  69901. assert(m.gtn(1), 'modulus must be greater than 1');
  69902. this.m = m;
  69903. this.prime = null;
  69904. }
  69905. }
  69906. Red.prototype._verify1 = function _verify1 (a) {
  69907. assert(a.negative === 0, 'red works only with positives');
  69908. assert(a.red, 'red works only with red numbers');
  69909. };
  69910. Red.prototype._verify2 = function _verify2 (a, b) {
  69911. assert((a.negative | b.negative) === 0, 'red works only with positives');
  69912. assert(a.red && a.red === b.red,
  69913. 'red works only with red numbers');
  69914. };
  69915. Red.prototype.imod = function imod (a) {
  69916. if (this.prime) return this.prime.ireduce(a)._forceRed(this);
  69917. return a.umod(this.m)._forceRed(this);
  69918. };
  69919. Red.prototype.neg = function neg (a) {
  69920. if (a.isZero()) {
  69921. return a.clone();
  69922. }
  69923. return this.m.sub(a)._forceRed(this);
  69924. };
  69925. Red.prototype.add = function add (a, b) {
  69926. this._verify2(a, b);
  69927. var res = a.add(b);
  69928. if (res.cmp(this.m) >= 0) {
  69929. res.isub(this.m);
  69930. }
  69931. return res._forceRed(this);
  69932. };
  69933. Red.prototype.iadd = function iadd (a, b) {
  69934. this._verify2(a, b);
  69935. var res = a.iadd(b);
  69936. if (res.cmp(this.m) >= 0) {
  69937. res.isub(this.m);
  69938. }
  69939. return res;
  69940. };
  69941. Red.prototype.sub = function sub (a, b) {
  69942. this._verify2(a, b);
  69943. var res = a.sub(b);
  69944. if (res.cmpn(0) < 0) {
  69945. res.iadd(this.m);
  69946. }
  69947. return res._forceRed(this);
  69948. };
  69949. Red.prototype.isub = function isub (a, b) {
  69950. this._verify2(a, b);
  69951. var res = a.isub(b);
  69952. if (res.cmpn(0) < 0) {
  69953. res.iadd(this.m);
  69954. }
  69955. return res;
  69956. };
  69957. Red.prototype.shl = function shl (a, num) {
  69958. this._verify1(a);
  69959. return this.imod(a.ushln(num));
  69960. };
  69961. Red.prototype.imul = function imul (a, b) {
  69962. this._verify2(a, b);
  69963. return this.imod(a.imul(b));
  69964. };
  69965. Red.prototype.mul = function mul (a, b) {
  69966. this._verify2(a, b);
  69967. return this.imod(a.mul(b));
  69968. };
  69969. Red.prototype.isqr = function isqr (a) {
  69970. return this.imul(a, a.clone());
  69971. };
  69972. Red.prototype.sqr = function sqr (a) {
  69973. return this.mul(a, a);
  69974. };
  69975. Red.prototype.sqrt = function sqrt (a) {
  69976. if (a.isZero()) return a.clone();
  69977. var mod3 = this.m.andln(3);
  69978. assert(mod3 % 2 === 1);
  69979. // Fast case
  69980. if (mod3 === 3) {
  69981. var pow = this.m.add(new BN(1)).iushrn(2);
  69982. return this.pow(a, pow);
  69983. }
  69984. // Tonelli-Shanks algorithm (Totally unoptimized and slow)
  69985. //
  69986. // Find Q and S, that Q * 2 ^ S = (P - 1)
  69987. var q = this.m.subn(1);
  69988. var s = 0;
  69989. while (!q.isZero() && q.andln(1) === 0) {
  69990. s++;
  69991. q.iushrn(1);
  69992. }
  69993. assert(!q.isZero());
  69994. var one = new BN(1).toRed(this);
  69995. var nOne = one.redNeg();
  69996. // Find quadratic non-residue
  69997. // NOTE: Max is such because of generalized Riemann hypothesis.
  69998. var lpow = this.m.subn(1).iushrn(1);
  69999. var z = this.m.bitLength();
  70000. z = new BN(2 * z * z).toRed(this);
  70001. while (this.pow(z, lpow).cmp(nOne) !== 0) {
  70002. z.redIAdd(nOne);
  70003. }
  70004. var c = this.pow(z, q);
  70005. var r = this.pow(a, q.addn(1).iushrn(1));
  70006. var t = this.pow(a, q);
  70007. var m = s;
  70008. while (t.cmp(one) !== 0) {
  70009. var tmp = t;
  70010. for (var i = 0; tmp.cmp(one) !== 0; i++) {
  70011. tmp = tmp.redSqr();
  70012. }
  70013. assert(i < m);
  70014. var b = this.pow(c, new BN(1).iushln(m - i - 1));
  70015. r = r.redMul(b);
  70016. c = b.redSqr();
  70017. t = t.redMul(c);
  70018. m = i;
  70019. }
  70020. return r;
  70021. };
  70022. Red.prototype.invm = function invm (a) {
  70023. var inv = a._invmp(this.m);
  70024. if (inv.negative !== 0) {
  70025. inv.negative = 0;
  70026. return this.imod(inv).redNeg();
  70027. } else {
  70028. return this.imod(inv);
  70029. }
  70030. };
  70031. Red.prototype.pow = function pow (a, num) {
  70032. if (num.isZero()) return new BN(1).toRed(this);
  70033. if (num.cmpn(1) === 0) return a.clone();
  70034. var windowSize = 4;
  70035. var wnd = new Array(1 << windowSize);
  70036. wnd[0] = new BN(1).toRed(this);
  70037. wnd[1] = a;
  70038. for (var i = 2; i < wnd.length; i++) {
  70039. wnd[i] = this.mul(wnd[i - 1], a);
  70040. }
  70041. var res = wnd[0];
  70042. var current = 0;
  70043. var currentLen = 0;
  70044. var start = num.bitLength() % 26;
  70045. if (start === 0) {
  70046. start = 26;
  70047. }
  70048. for (i = num.length - 1; i >= 0; i--) {
  70049. var word = num.words[i];
  70050. for (var j = start - 1; j >= 0; j--) {
  70051. var bit = (word >> j) & 1;
  70052. if (res !== wnd[0]) {
  70053. res = this.sqr(res);
  70054. }
  70055. if (bit === 0 && current === 0) {
  70056. currentLen = 0;
  70057. continue;
  70058. }
  70059. current <<= 1;
  70060. current |= bit;
  70061. currentLen++;
  70062. if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
  70063. res = this.mul(res, wnd[current]);
  70064. currentLen = 0;
  70065. current = 0;
  70066. }
  70067. start = 26;
  70068. }
  70069. return res;
  70070. };
  70071. Red.prototype.convertTo = function convertTo (num) {
  70072. var r = num.umod(this.m);
  70073. return r === num ? r.clone() : r;
  70074. };
  70075. Red.prototype.convertFrom = function convertFrom (num) {
  70076. var res = num.clone();
  70077. res.red = null;
  70078. return res;
  70079. };
  70080. //
  70081. // Montgomery method engine
  70082. //
  70083. BN.mont = function mont (num) {
  70084. return new Mont(num);
  70085. };
  70086. function Mont (m) {
  70087. Red.call(this, m);
  70088. this.shift = this.m.bitLength();
  70089. if (this.shift % 26 !== 0) {
  70090. this.shift += 26 - (this.shift % 26);
  70091. }
  70092. this.r = new BN(1).iushln(this.shift);
  70093. this.r2 = this.imod(this.r.sqr());
  70094. this.rinv = this.r._invmp(this.m);
  70095. this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
  70096. this.minv = this.minv.umod(this.r);
  70097. this.minv = this.r.sub(this.minv);
  70098. }
  70099. inherits(Mont, Red);
  70100. Mont.prototype.convertTo = function convertTo (num) {
  70101. return this.imod(num.ushln(this.shift));
  70102. };
  70103. Mont.prototype.convertFrom = function convertFrom (num) {
  70104. var r = this.imod(num.mul(this.rinv));
  70105. r.red = null;
  70106. return r;
  70107. };
  70108. Mont.prototype.imul = function imul (a, b) {
  70109. if (a.isZero() || b.isZero()) {
  70110. a.words[0] = 0;
  70111. a.length = 1;
  70112. return a;
  70113. }
  70114. var t = a.imul(b);
  70115. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  70116. var u = t.isub(c).iushrn(this.shift);
  70117. var res = u;
  70118. if (u.cmp(this.m) >= 0) {
  70119. res = u.isub(this.m);
  70120. } else if (u.cmpn(0) < 0) {
  70121. res = u.iadd(this.m);
  70122. }
  70123. return res._forceRed(this);
  70124. };
  70125. Mont.prototype.mul = function mul (a, b) {
  70126. if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
  70127. var t = a.mul(b);
  70128. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  70129. var u = t.isub(c).iushrn(this.shift);
  70130. var res = u;
  70131. if (u.cmp(this.m) >= 0) {
  70132. res = u.isub(this.m);
  70133. } else if (u.cmpn(0) < 0) {
  70134. res = u.iadd(this.m);
  70135. }
  70136. return res._forceRed(this);
  70137. };
  70138. Mont.prototype.invm = function invm (a) {
  70139. // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
  70140. var res = this.imod(a._invmp(this.m).mul(this.r2));
  70141. return res._forceRed(this);
  70142. };
  70143. })( false || module, this);
  70144. /***/ }),
  70145. /***/ 26138:
  70146. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  70147. var parseKeys = __webpack_require__(70980)
  70148. var mgf = __webpack_require__(99199)
  70149. var xor = __webpack_require__(57859)
  70150. var BN = __webpack_require__(92144)
  70151. var crt = __webpack_require__(23663)
  70152. var createHash = __webpack_require__(23482)
  70153. var withPublic = __webpack_require__(84818)
  70154. var Buffer = (__webpack_require__(89509).Buffer)
  70155. module.exports = function privateDecrypt (privateKey, enc, reverse) {
  70156. var padding
  70157. if (privateKey.padding) {
  70158. padding = privateKey.padding
  70159. } else if (reverse) {
  70160. padding = 1
  70161. } else {
  70162. padding = 4
  70163. }
  70164. var key = parseKeys(privateKey)
  70165. var k = key.modulus.byteLength()
  70166. if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {
  70167. throw new Error('decryption error')
  70168. }
  70169. var msg
  70170. if (reverse) {
  70171. msg = withPublic(new BN(enc), key)
  70172. } else {
  70173. msg = crt(enc, key)
  70174. }
  70175. var zBuffer = Buffer.alloc(k - msg.length)
  70176. msg = Buffer.concat([zBuffer, msg], k)
  70177. if (padding === 4) {
  70178. return oaep(key, msg)
  70179. } else if (padding === 1) {
  70180. return pkcs1(key, msg, reverse)
  70181. } else if (padding === 3) {
  70182. return msg
  70183. } else {
  70184. throw new Error('unknown padding')
  70185. }
  70186. }
  70187. function oaep (key, msg) {
  70188. var k = key.modulus.byteLength()
  70189. var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()
  70190. var hLen = iHash.length
  70191. if (msg[0] !== 0) {
  70192. throw new Error('decryption error')
  70193. }
  70194. var maskedSeed = msg.slice(1, hLen + 1)
  70195. var maskedDb = msg.slice(hLen + 1)
  70196. var seed = xor(maskedSeed, mgf(maskedDb, hLen))
  70197. var db = xor(maskedDb, mgf(seed, k - hLen - 1))
  70198. if (compare(iHash, db.slice(0, hLen))) {
  70199. throw new Error('decryption error')
  70200. }
  70201. var i = hLen
  70202. while (db[i] === 0) {
  70203. i++
  70204. }
  70205. if (db[i++] !== 1) {
  70206. throw new Error('decryption error')
  70207. }
  70208. return db.slice(i)
  70209. }
  70210. function pkcs1 (key, msg, reverse) {
  70211. var p1 = msg.slice(0, 2)
  70212. var i = 2
  70213. var status = 0
  70214. while (msg[i++] !== 0) {
  70215. if (i >= msg.length) {
  70216. status++
  70217. break
  70218. }
  70219. }
  70220. var ps = msg.slice(2, i - 1)
  70221. if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {
  70222. status++
  70223. }
  70224. if (ps.length < 8) {
  70225. status++
  70226. }
  70227. if (status) {
  70228. throw new Error('decryption error')
  70229. }
  70230. return msg.slice(i)
  70231. }
  70232. function compare (a, b) {
  70233. a = Buffer.from(a)
  70234. b = Buffer.from(b)
  70235. var dif = 0
  70236. var len = a.length
  70237. if (a.length !== b.length) {
  70238. dif++
  70239. len = Math.min(a.length, b.length)
  70240. }
  70241. var i = -1
  70242. while (++i < len) {
  70243. dif += (a[i] ^ b[i])
  70244. }
  70245. return dif
  70246. }
  70247. /***/ }),
  70248. /***/ 16559:
  70249. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  70250. var parseKeys = __webpack_require__(70980)
  70251. var randomBytes = __webpack_require__(61798)
  70252. var createHash = __webpack_require__(23482)
  70253. var mgf = __webpack_require__(99199)
  70254. var xor = __webpack_require__(57859)
  70255. var BN = __webpack_require__(92144)
  70256. var withPublic = __webpack_require__(84818)
  70257. var crt = __webpack_require__(23663)
  70258. var Buffer = (__webpack_require__(89509).Buffer)
  70259. module.exports = function publicEncrypt (publicKey, msg, reverse) {
  70260. var padding
  70261. if (publicKey.padding) {
  70262. padding = publicKey.padding
  70263. } else if (reverse) {
  70264. padding = 1
  70265. } else {
  70266. padding = 4
  70267. }
  70268. var key = parseKeys(publicKey)
  70269. var paddedMsg
  70270. if (padding === 4) {
  70271. paddedMsg = oaep(key, msg)
  70272. } else if (padding === 1) {
  70273. paddedMsg = pkcs1(key, msg, reverse)
  70274. } else if (padding === 3) {
  70275. paddedMsg = new BN(msg)
  70276. if (paddedMsg.cmp(key.modulus) >= 0) {
  70277. throw new Error('data too long for modulus')
  70278. }
  70279. } else {
  70280. throw new Error('unknown padding')
  70281. }
  70282. if (reverse) {
  70283. return crt(paddedMsg, key)
  70284. } else {
  70285. return withPublic(paddedMsg, key)
  70286. }
  70287. }
  70288. function oaep (key, msg) {
  70289. var k = key.modulus.byteLength()
  70290. var mLen = msg.length
  70291. var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()
  70292. var hLen = iHash.length
  70293. var hLen2 = 2 * hLen
  70294. if (mLen > k - hLen2 - 2) {
  70295. throw new Error('message too long')
  70296. }
  70297. var ps = Buffer.alloc(k - mLen - hLen2 - 2)
  70298. var dblen = k - hLen - 1
  70299. var seed = randomBytes(hLen)
  70300. var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))
  70301. var maskedSeed = xor(seed, mgf(maskedDb, hLen))
  70302. return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))
  70303. }
  70304. function pkcs1 (key, msg, reverse) {
  70305. var mLen = msg.length
  70306. var k = key.modulus.byteLength()
  70307. if (mLen > k - 11) {
  70308. throw new Error('message too long')
  70309. }
  70310. var ps
  70311. if (reverse) {
  70312. ps = Buffer.alloc(k - mLen - 3, 0xff)
  70313. } else {
  70314. ps = nonZero(k - mLen - 3)
  70315. }
  70316. return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))
  70317. }
  70318. function nonZero (len) {
  70319. var out = Buffer.allocUnsafe(len)
  70320. var i = 0
  70321. var cache = randomBytes(len * 2)
  70322. var cur = 0
  70323. var num
  70324. while (i < len) {
  70325. if (cur === cache.length) {
  70326. cache = randomBytes(len * 2)
  70327. cur = 0
  70328. }
  70329. num = cache[cur++]
  70330. if (num) {
  70331. out[i++] = num
  70332. }
  70333. }
  70334. return out
  70335. }
  70336. /***/ }),
  70337. /***/ 84818:
  70338. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  70339. var BN = __webpack_require__(92144)
  70340. var Buffer = (__webpack_require__(89509).Buffer)
  70341. function withPublic (paddedMsg, key) {
  70342. return Buffer.from(paddedMsg
  70343. .toRed(BN.mont(key.modulus))
  70344. .redPow(new BN(key.publicExponent))
  70345. .fromRed()
  70346. .toArray())
  70347. }
  70348. module.exports = withPublic
  70349. /***/ }),
  70350. /***/ 57859:
  70351. /***/ ((module) => {
  70352. module.exports = function xor (a, b) {
  70353. var len = a.length
  70354. var i = -1
  70355. while (++i < len) {
  70356. a[i] ^= b[i]
  70357. }
  70358. return a
  70359. }
  70360. /***/ }),
  70361. /***/ 62587:
  70362. /***/ ((module) => {
  70363. "use strict";
  70364. // Copyright Joyent, Inc. and other Node contributors.
  70365. //
  70366. // Permission is hereby granted, free of charge, to any person obtaining a
  70367. // copy of this software and associated documentation files (the
  70368. // "Software"), to deal in the Software without restriction, including
  70369. // without limitation the rights to use, copy, modify, merge, publish,
  70370. // distribute, sublicense, and/or sell copies of the Software, and to permit
  70371. // persons to whom the Software is furnished to do so, subject to the
  70372. // following conditions:
  70373. //
  70374. // The above copyright notice and this permission notice shall be included
  70375. // in all copies or substantial portions of the Software.
  70376. //
  70377. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  70378. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  70379. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  70380. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  70381. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  70382. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  70383. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  70384. // If obj.hasOwnProperty has been overridden, then calling
  70385. // obj.hasOwnProperty(prop) will break.
  70386. // See: https://github.com/joyent/node/issues/1707
  70387. function hasOwnProperty(obj, prop) {
  70388. return Object.prototype.hasOwnProperty.call(obj, prop);
  70389. }
  70390. module.exports = function(qs, sep, eq, options) {
  70391. sep = sep || '&';
  70392. eq = eq || '=';
  70393. var obj = {};
  70394. if (typeof qs !== 'string' || qs.length === 0) {
  70395. return obj;
  70396. }
  70397. var regexp = /\+/g;
  70398. qs = qs.split(sep);
  70399. var maxKeys = 1000;
  70400. if (options && typeof options.maxKeys === 'number') {
  70401. maxKeys = options.maxKeys;
  70402. }
  70403. var len = qs.length;
  70404. // maxKeys <= 0 means that we should not limit keys count
  70405. if (maxKeys > 0 && len > maxKeys) {
  70406. len = maxKeys;
  70407. }
  70408. for (var i = 0; i < len; ++i) {
  70409. var x = qs[i].replace(regexp, '%20'),
  70410. idx = x.indexOf(eq),
  70411. kstr, vstr, k, v;
  70412. if (idx >= 0) {
  70413. kstr = x.substr(0, idx);
  70414. vstr = x.substr(idx + 1);
  70415. } else {
  70416. kstr = x;
  70417. vstr = '';
  70418. }
  70419. k = decodeURIComponent(kstr);
  70420. v = decodeURIComponent(vstr);
  70421. if (!hasOwnProperty(obj, k)) {
  70422. obj[k] = v;
  70423. } else if (Array.isArray(obj[k])) {
  70424. obj[k].push(v);
  70425. } else {
  70426. obj[k] = [obj[k], v];
  70427. }
  70428. }
  70429. return obj;
  70430. };
  70431. /***/ }),
  70432. /***/ 12361:
  70433. /***/ ((module) => {
  70434. "use strict";
  70435. // Copyright Joyent, Inc. and other Node contributors.
  70436. //
  70437. // Permission is hereby granted, free of charge, to any person obtaining a
  70438. // copy of this software and associated documentation files (the
  70439. // "Software"), to deal in the Software without restriction, including
  70440. // without limitation the rights to use, copy, modify, merge, publish,
  70441. // distribute, sublicense, and/or sell copies of the Software, and to permit
  70442. // persons to whom the Software is furnished to do so, subject to the
  70443. // following conditions:
  70444. //
  70445. // The above copyright notice and this permission notice shall be included
  70446. // in all copies or substantial portions of the Software.
  70447. //
  70448. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  70449. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  70450. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  70451. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  70452. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  70453. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  70454. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  70455. var stringifyPrimitive = function(v) {
  70456. switch (typeof v) {
  70457. case 'string':
  70458. return v;
  70459. case 'boolean':
  70460. return v ? 'true' : 'false';
  70461. case 'number':
  70462. return isFinite(v) ? v : '';
  70463. default:
  70464. return '';
  70465. }
  70466. };
  70467. module.exports = function(obj, sep, eq, name) {
  70468. sep = sep || '&';
  70469. eq = eq || '=';
  70470. if (obj === null) {
  70471. obj = undefined;
  70472. }
  70473. if (typeof obj === 'object') {
  70474. return Object.keys(obj).map(function(k) {
  70475. var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
  70476. if (Array.isArray(obj[k])) {
  70477. return obj[k].map(function(v) {
  70478. return ks + encodeURIComponent(stringifyPrimitive(v));
  70479. }).join(sep);
  70480. } else {
  70481. return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
  70482. }
  70483. }).join(sep);
  70484. }
  70485. if (!name) return '';
  70486. return encodeURIComponent(stringifyPrimitive(name)) + eq +
  70487. encodeURIComponent(stringifyPrimitive(obj));
  70488. };
  70489. /***/ }),
  70490. /***/ 17673:
  70491. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  70492. "use strict";
  70493. exports.decode = exports.parse = __webpack_require__(62587);
  70494. exports.encode = exports.stringify = __webpack_require__(12361);
  70495. /***/ }),
  70496. /***/ 61798:
  70497. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  70498. "use strict";
  70499. /* provided dependency */ var process = __webpack_require__(34155);
  70500. // limit of Crypto.getRandomValues()
  70501. // https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
  70502. var MAX_BYTES = 65536
  70503. // Node supports requesting up to this number of bytes
  70504. // https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48
  70505. var MAX_UINT32 = 4294967295
  70506. function oldBrowser () {
  70507. throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
  70508. }
  70509. var Buffer = (__webpack_require__(89509).Buffer)
  70510. var crypto = __webpack_require__.g.crypto || __webpack_require__.g.msCrypto
  70511. if (crypto && crypto.getRandomValues) {
  70512. module.exports = randomBytes
  70513. } else {
  70514. module.exports = oldBrowser
  70515. }
  70516. function randomBytes (size, cb) {
  70517. // phantomjs needs to throw
  70518. if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')
  70519. var bytes = Buffer.allocUnsafe(size)
  70520. if (size > 0) { // getRandomValues fails on IE if size == 0
  70521. if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues
  70522. // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
  70523. for (var generated = 0; generated < size; generated += MAX_BYTES) {
  70524. // buffer.slice automatically checks if the end is past the end of
  70525. // the buffer so we don't have to here
  70526. crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))
  70527. }
  70528. } else {
  70529. crypto.getRandomValues(bytes)
  70530. }
  70531. }
  70532. if (typeof cb === 'function') {
  70533. return process.nextTick(function () {
  70534. cb(null, bytes)
  70535. })
  70536. }
  70537. return bytes
  70538. }
  70539. /***/ }),
  70540. /***/ 77963:
  70541. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  70542. "use strict";
  70543. /* provided dependency */ var process = __webpack_require__(34155);
  70544. function oldBrowser () {
  70545. throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
  70546. }
  70547. var safeBuffer = __webpack_require__(89509)
  70548. var randombytes = __webpack_require__(61798)
  70549. var Buffer = safeBuffer.Buffer
  70550. var kBufferMaxLength = safeBuffer.kMaxLength
  70551. var crypto = __webpack_require__.g.crypto || __webpack_require__.g.msCrypto
  70552. var kMaxUint32 = Math.pow(2, 32) - 1
  70553. function assertOffset (offset, length) {
  70554. if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare
  70555. throw new TypeError('offset must be a number')
  70556. }
  70557. if (offset > kMaxUint32 || offset < 0) {
  70558. throw new TypeError('offset must be a uint32')
  70559. }
  70560. if (offset > kBufferMaxLength || offset > length) {
  70561. throw new RangeError('offset out of range')
  70562. }
  70563. }
  70564. function assertSize (size, offset, length) {
  70565. if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare
  70566. throw new TypeError('size must be a number')
  70567. }
  70568. if (size > kMaxUint32 || size < 0) {
  70569. throw new TypeError('size must be a uint32')
  70570. }
  70571. if (size + offset > length || size > kBufferMaxLength) {
  70572. throw new RangeError('buffer too small')
  70573. }
  70574. }
  70575. if ((crypto && crypto.getRandomValues) || !process.browser) {
  70576. exports.randomFill = randomFill
  70577. exports.randomFillSync = randomFillSync
  70578. } else {
  70579. exports.randomFill = oldBrowser
  70580. exports.randomFillSync = oldBrowser
  70581. }
  70582. function randomFill (buf, offset, size, cb) {
  70583. if (!Buffer.isBuffer(buf) && !(buf instanceof __webpack_require__.g.Uint8Array)) {
  70584. throw new TypeError('"buf" argument must be a Buffer or Uint8Array')
  70585. }
  70586. if (typeof offset === 'function') {
  70587. cb = offset
  70588. offset = 0
  70589. size = buf.length
  70590. } else if (typeof size === 'function') {
  70591. cb = size
  70592. size = buf.length - offset
  70593. } else if (typeof cb !== 'function') {
  70594. throw new TypeError('"cb" argument must be a function')
  70595. }
  70596. assertOffset(offset, buf.length)
  70597. assertSize(size, offset, buf.length)
  70598. return actualFill(buf, offset, size, cb)
  70599. }
  70600. function actualFill (buf, offset, size, cb) {
  70601. if (process.browser) {
  70602. var ourBuf = buf.buffer
  70603. var uint = new Uint8Array(ourBuf, offset, size)
  70604. crypto.getRandomValues(uint)
  70605. if (cb) {
  70606. process.nextTick(function () {
  70607. cb(null, buf)
  70608. })
  70609. return
  70610. }
  70611. return buf
  70612. }
  70613. if (cb) {
  70614. randombytes(size, function (err, bytes) {
  70615. if (err) {
  70616. return cb(err)
  70617. }
  70618. bytes.copy(buf, offset)
  70619. cb(null, buf)
  70620. })
  70621. return
  70622. }
  70623. var bytes = randombytes(size)
  70624. bytes.copy(buf, offset)
  70625. return buf
  70626. }
  70627. function randomFillSync (buf, offset, size) {
  70628. if (typeof offset === 'undefined') {
  70629. offset = 0
  70630. }
  70631. if (!Buffer.isBuffer(buf) && !(buf instanceof __webpack_require__.g.Uint8Array)) {
  70632. throw new TypeError('"buf" argument must be a Buffer or Uint8Array')
  70633. }
  70634. assertOffset(offset, buf.length)
  70635. if (size === undefined) size = buf.length - offset
  70636. assertSize(size, offset, buf.length)
  70637. return actualFill(buf, offset, size)
  70638. }
  70639. /***/ }),
  70640. /***/ 94281:
  70641. /***/ ((module) => {
  70642. "use strict";
  70643. function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
  70644. var codes = {};
  70645. function createErrorType(code, message, Base) {
  70646. if (!Base) {
  70647. Base = Error;
  70648. }
  70649. function getMessage(arg1, arg2, arg3) {
  70650. if (typeof message === 'string') {
  70651. return message;
  70652. } else {
  70653. return message(arg1, arg2, arg3);
  70654. }
  70655. }
  70656. var NodeError =
  70657. /*#__PURE__*/
  70658. function (_Base) {
  70659. _inheritsLoose(NodeError, _Base);
  70660. function NodeError(arg1, arg2, arg3) {
  70661. return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;
  70662. }
  70663. return NodeError;
  70664. }(Base);
  70665. NodeError.prototype.name = Base.name;
  70666. NodeError.prototype.code = code;
  70667. codes[code] = NodeError;
  70668. } // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
  70669. function oneOf(expected, thing) {
  70670. if (Array.isArray(expected)) {
  70671. var len = expected.length;
  70672. expected = expected.map(function (i) {
  70673. return String(i);
  70674. });
  70675. if (len > 2) {
  70676. return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1];
  70677. } else if (len === 2) {
  70678. return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]);
  70679. } else {
  70680. return "of ".concat(thing, " ").concat(expected[0]);
  70681. }
  70682. } else {
  70683. return "of ".concat(thing, " ").concat(String(expected));
  70684. }
  70685. } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
  70686. function startsWith(str, search, pos) {
  70687. return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
  70688. } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
  70689. function endsWith(str, search, this_len) {
  70690. if (this_len === undefined || this_len > str.length) {
  70691. this_len = str.length;
  70692. }
  70693. return str.substring(this_len - search.length, this_len) === search;
  70694. } // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
  70695. function includes(str, search, start) {
  70696. if (typeof start !== 'number') {
  70697. start = 0;
  70698. }
  70699. if (start + search.length > str.length) {
  70700. return false;
  70701. } else {
  70702. return str.indexOf(search, start) !== -1;
  70703. }
  70704. }
  70705. createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
  70706. return 'The value "' + value + '" is invalid for option "' + name + '"';
  70707. }, TypeError);
  70708. createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
  70709. // determiner: 'must be' or 'must not be'
  70710. var determiner;
  70711. if (typeof expected === 'string' && startsWith(expected, 'not ')) {
  70712. determiner = 'must not be';
  70713. expected = expected.replace(/^not /, '');
  70714. } else {
  70715. determiner = 'must be';
  70716. }
  70717. var msg;
  70718. if (endsWith(name, ' argument')) {
  70719. // For cases like 'first argument'
  70720. msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
  70721. } else {
  70722. var type = includes(name, '.') ? 'property' : 'argument';
  70723. msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
  70724. }
  70725. msg += ". Received type ".concat(typeof actual);
  70726. return msg;
  70727. }, TypeError);
  70728. createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
  70729. createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
  70730. return 'The ' + name + ' method is not implemented';
  70731. });
  70732. createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
  70733. createErrorType('ERR_STREAM_DESTROYED', function (name) {
  70734. return 'Cannot call ' + name + ' after a stream was destroyed';
  70735. });
  70736. createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
  70737. createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
  70738. createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
  70739. createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
  70740. createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
  70741. return 'Unknown encoding: ' + arg;
  70742. }, TypeError);
  70743. createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');
  70744. module.exports.q = codes;
  70745. /***/ }),
  70746. /***/ 56753:
  70747. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  70748. "use strict";
  70749. /* provided dependency */ var process = __webpack_require__(34155);
  70750. // Copyright Joyent, Inc. and other Node contributors.
  70751. //
  70752. // Permission is hereby granted, free of charge, to any person obtaining a
  70753. // copy of this software and associated documentation files (the
  70754. // "Software"), to deal in the Software without restriction, including
  70755. // without limitation the rights to use, copy, modify, merge, publish,
  70756. // distribute, sublicense, and/or sell copies of the Software, and to permit
  70757. // persons to whom the Software is furnished to do so, subject to the
  70758. // following conditions:
  70759. //
  70760. // The above copyright notice and this permission notice shall be included
  70761. // in all copies or substantial portions of the Software.
  70762. //
  70763. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  70764. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  70765. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  70766. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  70767. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  70768. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  70769. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  70770. // a duplex stream is just a stream that is both readable and writable.
  70771. // Since JS doesn't have multiple prototypal inheritance, this class
  70772. // prototypally inherits from Readable, and then parasitically from
  70773. // Writable.
  70774. /*<replacement>*/
  70775. var objectKeys = Object.keys || function (obj) {
  70776. var keys = [];
  70777. for (var key in obj) {
  70778. keys.push(key);
  70779. }
  70780. return keys;
  70781. };
  70782. /*</replacement>*/
  70783. module.exports = Duplex;
  70784. var Readable = __webpack_require__(79481);
  70785. var Writable = __webpack_require__(64229);
  70786. __webpack_require__(35717)(Duplex, Readable);
  70787. {
  70788. // Allow the keys array to be GC'ed.
  70789. var keys = objectKeys(Writable.prototype);
  70790. for (var v = 0; v < keys.length; v++) {
  70791. var method = keys[v];
  70792. if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
  70793. }
  70794. }
  70795. function Duplex(options) {
  70796. if (!(this instanceof Duplex)) return new Duplex(options);
  70797. Readable.call(this, options);
  70798. Writable.call(this, options);
  70799. this.allowHalfOpen = true;
  70800. if (options) {
  70801. if (options.readable === false) this.readable = false;
  70802. if (options.writable === false) this.writable = false;
  70803. if (options.allowHalfOpen === false) {
  70804. this.allowHalfOpen = false;
  70805. this.once('end', onend);
  70806. }
  70807. }
  70808. }
  70809. Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
  70810. // making it explicit this property is not enumerable
  70811. // because otherwise some prototype manipulation in
  70812. // userland will fail
  70813. enumerable: false,
  70814. get: function get() {
  70815. return this._writableState.highWaterMark;
  70816. }
  70817. });
  70818. Object.defineProperty(Duplex.prototype, 'writableBuffer', {
  70819. // making it explicit this property is not enumerable
  70820. // because otherwise some prototype manipulation in
  70821. // userland will fail
  70822. enumerable: false,
  70823. get: function get() {
  70824. return this._writableState && this._writableState.getBuffer();
  70825. }
  70826. });
  70827. Object.defineProperty(Duplex.prototype, 'writableLength', {
  70828. // making it explicit this property is not enumerable
  70829. // because otherwise some prototype manipulation in
  70830. // userland will fail
  70831. enumerable: false,
  70832. get: function get() {
  70833. return this._writableState.length;
  70834. }
  70835. }); // the no-half-open enforcer
  70836. function onend() {
  70837. // If the writable side ended, then we're ok.
  70838. if (this._writableState.ended) return; // no more data can be written.
  70839. // But allow more writes to happen in this tick.
  70840. process.nextTick(onEndNT, this);
  70841. }
  70842. function onEndNT(self) {
  70843. self.end();
  70844. }
  70845. Object.defineProperty(Duplex.prototype, 'destroyed', {
  70846. // making it explicit this property is not enumerable
  70847. // because otherwise some prototype manipulation in
  70848. // userland will fail
  70849. enumerable: false,
  70850. get: function get() {
  70851. if (this._readableState === undefined || this._writableState === undefined) {
  70852. return false;
  70853. }
  70854. return this._readableState.destroyed && this._writableState.destroyed;
  70855. },
  70856. set: function set(value) {
  70857. // we ignore the value if the stream
  70858. // has not been initialized yet
  70859. if (this._readableState === undefined || this._writableState === undefined) {
  70860. return;
  70861. } // backward compatibility, the user is explicitly
  70862. // managing destroyed
  70863. this._readableState.destroyed = value;
  70864. this._writableState.destroyed = value;
  70865. }
  70866. });
  70867. /***/ }),
  70868. /***/ 82725:
  70869. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  70870. "use strict";
  70871. // Copyright Joyent, Inc. and other Node contributors.
  70872. //
  70873. // Permission is hereby granted, free of charge, to any person obtaining a
  70874. // copy of this software and associated documentation files (the
  70875. // "Software"), to deal in the Software without restriction, including
  70876. // without limitation the rights to use, copy, modify, merge, publish,
  70877. // distribute, sublicense, and/or sell copies of the Software, and to permit
  70878. // persons to whom the Software is furnished to do so, subject to the
  70879. // following conditions:
  70880. //
  70881. // The above copyright notice and this permission notice shall be included
  70882. // in all copies or substantial portions of the Software.
  70883. //
  70884. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  70885. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  70886. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  70887. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  70888. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  70889. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  70890. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  70891. // a passthrough stream.
  70892. // basically just the most minimal sort of Transform stream.
  70893. // Every written chunk gets output as-is.
  70894. module.exports = PassThrough;
  70895. var Transform = __webpack_require__(74605);
  70896. __webpack_require__(35717)(PassThrough, Transform);
  70897. function PassThrough(options) {
  70898. if (!(this instanceof PassThrough)) return new PassThrough(options);
  70899. Transform.call(this, options);
  70900. }
  70901. PassThrough.prototype._transform = function (chunk, encoding, cb) {
  70902. cb(null, chunk);
  70903. };
  70904. /***/ }),
  70905. /***/ 79481:
  70906. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  70907. "use strict";
  70908. /* provided dependency */ var process = __webpack_require__(34155);
  70909. // Copyright Joyent, Inc. and other Node contributors.
  70910. //
  70911. // Permission is hereby granted, free of charge, to any person obtaining a
  70912. // copy of this software and associated documentation files (the
  70913. // "Software"), to deal in the Software without restriction, including
  70914. // without limitation the rights to use, copy, modify, merge, publish,
  70915. // distribute, sublicense, and/or sell copies of the Software, and to permit
  70916. // persons to whom the Software is furnished to do so, subject to the
  70917. // following conditions:
  70918. //
  70919. // The above copyright notice and this permission notice shall be included
  70920. // in all copies or substantial portions of the Software.
  70921. //
  70922. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  70923. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  70924. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  70925. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  70926. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  70927. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  70928. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  70929. module.exports = Readable;
  70930. /*<replacement>*/
  70931. var Duplex;
  70932. /*</replacement>*/
  70933. Readable.ReadableState = ReadableState;
  70934. /*<replacement>*/
  70935. var EE = (__webpack_require__(17187).EventEmitter);
  70936. var EElistenerCount = function EElistenerCount(emitter, type) {
  70937. return emitter.listeners(type).length;
  70938. };
  70939. /*</replacement>*/
  70940. /*<replacement>*/
  70941. var Stream = __webpack_require__(22503);
  70942. /*</replacement>*/
  70943. var Buffer = (__webpack_require__(48764).Buffer);
  70944. var OurUint8Array = __webpack_require__.g.Uint8Array || function () {};
  70945. function _uint8ArrayToBuffer(chunk) {
  70946. return Buffer.from(chunk);
  70947. }
  70948. function _isUint8Array(obj) {
  70949. return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
  70950. }
  70951. /*<replacement>*/
  70952. var debugUtil = __webpack_require__(94616);
  70953. var debug;
  70954. if (debugUtil && debugUtil.debuglog) {
  70955. debug = debugUtil.debuglog('stream');
  70956. } else {
  70957. debug = function debug() {};
  70958. }
  70959. /*</replacement>*/
  70960. var BufferList = __webpack_require__(57327);
  70961. var destroyImpl = __webpack_require__(61195);
  70962. var _require = __webpack_require__(82457),
  70963. getHighWaterMark = _require.getHighWaterMark;
  70964. var _require$codes = (__webpack_require__(94281)/* .codes */ .q),
  70965. ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
  70966. ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
  70967. ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
  70968. ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.
  70969. var StringDecoder;
  70970. var createReadableStreamAsyncIterator;
  70971. var from;
  70972. __webpack_require__(35717)(Readable, Stream);
  70973. var errorOrDestroy = destroyImpl.errorOrDestroy;
  70974. var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
  70975. function prependListener(emitter, event, fn) {
  70976. // Sadly this is not cacheable as some libraries bundle their own
  70977. // event emitter implementation with them.
  70978. if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any
  70979. // userland ones. NEVER DO THIS. This is here only because this code needs
  70980. // to continue to work with older versions of Node.js that do not include
  70981. // the prependListener() method. The goal is to eventually remove this hack.
  70982. if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
  70983. }
  70984. function ReadableState(options, stream, isDuplex) {
  70985. Duplex = Duplex || __webpack_require__(56753);
  70986. options = options || {}; // Duplex streams are both readable and writable, but share
  70987. // the same options object.
  70988. // However, some cases require setting options to different
  70989. // values for the readable and the writable sides of the duplex stream.
  70990. // These options can be provided separately as readableXXX and writableXXX.
  70991. if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to
  70992. // make all the buffer merging and length checks go away
  70993. this.objectMode = !!options.objectMode;
  70994. if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer
  70995. // Note: 0 is a valid value, means "don't call _read preemptively ever"
  70996. this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the
  70997. // linked list can remove elements from the beginning faster than
  70998. // array.shift()
  70999. this.buffer = new BufferList();
  71000. this.length = 0;
  71001. this.pipes = null;
  71002. this.pipesCount = 0;
  71003. this.flowing = null;
  71004. this.ended = false;
  71005. this.endEmitted = false;
  71006. this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted
  71007. // immediately, or on a later tick. We set this to true at first, because
  71008. // any actions that shouldn't happen until "later" should generally also
  71009. // not happen before the first read call.
  71010. this.sync = true; // whenever we return null, then we set a flag to say
  71011. // that we're awaiting a 'readable' event emission.
  71012. this.needReadable = false;
  71013. this.emittedReadable = false;
  71014. this.readableListening = false;
  71015. this.resumeScheduled = false;
  71016. this.paused = true; // Should close be emitted on destroy. Defaults to true.
  71017. this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')
  71018. this.autoDestroy = !!options.autoDestroy; // has it been destroyed
  71019. this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string
  71020. // encoding is 'binary' so we have to make this configurable.
  71021. // Everything else in the universe uses 'utf8', though.
  71022. this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s
  71023. this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled
  71024. this.readingMore = false;
  71025. this.decoder = null;
  71026. this.encoding = null;
  71027. if (options.encoding) {
  71028. if (!StringDecoder) StringDecoder = (__webpack_require__(32553)/* .StringDecoder */ .s);
  71029. this.decoder = new StringDecoder(options.encoding);
  71030. this.encoding = options.encoding;
  71031. }
  71032. }
  71033. function Readable(options) {
  71034. Duplex = Duplex || __webpack_require__(56753);
  71035. if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside
  71036. // the ReadableState constructor, at least with V8 6.5
  71037. var isDuplex = this instanceof Duplex;
  71038. this._readableState = new ReadableState(options, this, isDuplex); // legacy
  71039. this.readable = true;
  71040. if (options) {
  71041. if (typeof options.read === 'function') this._read = options.read;
  71042. if (typeof options.destroy === 'function') this._destroy = options.destroy;
  71043. }
  71044. Stream.call(this);
  71045. }
  71046. Object.defineProperty(Readable.prototype, 'destroyed', {
  71047. // making it explicit this property is not enumerable
  71048. // because otherwise some prototype manipulation in
  71049. // userland will fail
  71050. enumerable: false,
  71051. get: function get() {
  71052. if (this._readableState === undefined) {
  71053. return false;
  71054. }
  71055. return this._readableState.destroyed;
  71056. },
  71057. set: function set(value) {
  71058. // we ignore the value if the stream
  71059. // has not been initialized yet
  71060. if (!this._readableState) {
  71061. return;
  71062. } // backward compatibility, the user is explicitly
  71063. // managing destroyed
  71064. this._readableState.destroyed = value;
  71065. }
  71066. });
  71067. Readable.prototype.destroy = destroyImpl.destroy;
  71068. Readable.prototype._undestroy = destroyImpl.undestroy;
  71069. Readable.prototype._destroy = function (err, cb) {
  71070. cb(err);
  71071. }; // Manually shove something into the read() buffer.
  71072. // This returns true if the highWaterMark has not been hit yet,
  71073. // similar to how Writable.write() returns true if you should
  71074. // write() some more.
  71075. Readable.prototype.push = function (chunk, encoding) {
  71076. var state = this._readableState;
  71077. var skipChunkCheck;
  71078. if (!state.objectMode) {
  71079. if (typeof chunk === 'string') {
  71080. encoding = encoding || state.defaultEncoding;
  71081. if (encoding !== state.encoding) {
  71082. chunk = Buffer.from(chunk, encoding);
  71083. encoding = '';
  71084. }
  71085. skipChunkCheck = true;
  71086. }
  71087. } else {
  71088. skipChunkCheck = true;
  71089. }
  71090. return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
  71091. }; // Unshift should *always* be something directly out of read()
  71092. Readable.prototype.unshift = function (chunk) {
  71093. return readableAddChunk(this, chunk, null, true, false);
  71094. };
  71095. function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
  71096. debug('readableAddChunk', chunk);
  71097. var state = stream._readableState;
  71098. if (chunk === null) {
  71099. state.reading = false;
  71100. onEofChunk(stream, state);
  71101. } else {
  71102. var er;
  71103. if (!skipChunkCheck) er = chunkInvalid(state, chunk);
  71104. if (er) {
  71105. errorOrDestroy(stream, er);
  71106. } else if (state.objectMode || chunk && chunk.length > 0) {
  71107. if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
  71108. chunk = _uint8ArrayToBuffer(chunk);
  71109. }
  71110. if (addToFront) {
  71111. if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
  71112. } else if (state.ended) {
  71113. errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
  71114. } else if (state.destroyed) {
  71115. return false;
  71116. } else {
  71117. state.reading = false;
  71118. if (state.decoder && !encoding) {
  71119. chunk = state.decoder.write(chunk);
  71120. if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
  71121. } else {
  71122. addChunk(stream, state, chunk, false);
  71123. }
  71124. }
  71125. } else if (!addToFront) {
  71126. state.reading = false;
  71127. maybeReadMore(stream, state);
  71128. }
  71129. } // We can push more data if we are below the highWaterMark.
  71130. // Also, if we have no data yet, we can stand some more bytes.
  71131. // This is to work around cases where hwm=0, such as the repl.
  71132. return !state.ended && (state.length < state.highWaterMark || state.length === 0);
  71133. }
  71134. function addChunk(stream, state, chunk, addToFront) {
  71135. if (state.flowing && state.length === 0 && !state.sync) {
  71136. state.awaitDrain = 0;
  71137. stream.emit('data', chunk);
  71138. } else {
  71139. // update the buffer info.
  71140. state.length += state.objectMode ? 1 : chunk.length;
  71141. if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
  71142. if (state.needReadable) emitReadable(stream);
  71143. }
  71144. maybeReadMore(stream, state);
  71145. }
  71146. function chunkInvalid(state, chunk) {
  71147. var er;
  71148. if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
  71149. er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
  71150. }
  71151. return er;
  71152. }
  71153. Readable.prototype.isPaused = function () {
  71154. return this._readableState.flowing === false;
  71155. }; // backwards compatibility.
  71156. Readable.prototype.setEncoding = function (enc) {
  71157. if (!StringDecoder) StringDecoder = (__webpack_require__(32553)/* .StringDecoder */ .s);
  71158. var decoder = new StringDecoder(enc);
  71159. this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8
  71160. this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:
  71161. var p = this._readableState.buffer.head;
  71162. var content = '';
  71163. while (p !== null) {
  71164. content += decoder.write(p.data);
  71165. p = p.next;
  71166. }
  71167. this._readableState.buffer.clear();
  71168. if (content !== '') this._readableState.buffer.push(content);
  71169. this._readableState.length = content.length;
  71170. return this;
  71171. }; // Don't raise the hwm > 1GB
  71172. var MAX_HWM = 0x40000000;
  71173. function computeNewHighWaterMark(n) {
  71174. if (n >= MAX_HWM) {
  71175. // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
  71176. n = MAX_HWM;
  71177. } else {
  71178. // Get the next highest power of 2 to prevent increasing hwm excessively in
  71179. // tiny amounts
  71180. n--;
  71181. n |= n >>> 1;
  71182. n |= n >>> 2;
  71183. n |= n >>> 4;
  71184. n |= n >>> 8;
  71185. n |= n >>> 16;
  71186. n++;
  71187. }
  71188. return n;
  71189. } // This function is designed to be inlinable, so please take care when making
  71190. // changes to the function body.
  71191. function howMuchToRead(n, state) {
  71192. if (n <= 0 || state.length === 0 && state.ended) return 0;
  71193. if (state.objectMode) return 1;
  71194. if (n !== n) {
  71195. // Only flow one buffer at a time
  71196. if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
  71197. } // If we're asking for more than the current hwm, then raise the hwm.
  71198. if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
  71199. if (n <= state.length) return n; // Don't have enough
  71200. if (!state.ended) {
  71201. state.needReadable = true;
  71202. return 0;
  71203. }
  71204. return state.length;
  71205. } // you can override either this method, or the async _read(n) below.
  71206. Readable.prototype.read = function (n) {
  71207. debug('read', n);
  71208. n = parseInt(n, 10);
  71209. var state = this._readableState;
  71210. var nOrig = n;
  71211. if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we
  71212. // already have a bunch of data in the buffer, then just trigger
  71213. // the 'readable' event and move on.
  71214. if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
  71215. debug('read: emitReadable', state.length, state.ended);
  71216. if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
  71217. return null;
  71218. }
  71219. n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.
  71220. if (n === 0 && state.ended) {
  71221. if (state.length === 0) endReadable(this);
  71222. return null;
  71223. } // All the actual chunk generation logic needs to be
  71224. // *below* the call to _read. The reason is that in certain
  71225. // synthetic stream cases, such as passthrough streams, _read
  71226. // may be a completely synchronous operation which may change
  71227. // the state of the read buffer, providing enough data when
  71228. // before there was *not* enough.
  71229. //
  71230. // So, the steps are:
  71231. // 1. Figure out what the state of things will be after we do
  71232. // a read from the buffer.
  71233. //
  71234. // 2. If that resulting state will trigger a _read, then call _read.
  71235. // Note that this may be asynchronous, or synchronous. Yes, it is
  71236. // deeply ugly to write APIs this way, but that still doesn't mean
  71237. // that the Readable class should behave improperly, as streams are
  71238. // designed to be sync/async agnostic.
  71239. // Take note if the _read call is sync or async (ie, if the read call
  71240. // has returned yet), so that we know whether or not it's safe to emit
  71241. // 'readable' etc.
  71242. //
  71243. // 3. Actually pull the requested chunks out of the buffer and return.
  71244. // if we need a readable event, then we need to do some reading.
  71245. var doRead = state.needReadable;
  71246. debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some
  71247. if (state.length === 0 || state.length - n < state.highWaterMark) {
  71248. doRead = true;
  71249. debug('length less than watermark', doRead);
  71250. } // however, if we've ended, then there's no point, and if we're already
  71251. // reading, then it's unnecessary.
  71252. if (state.ended || state.reading) {
  71253. doRead = false;
  71254. debug('reading or ended', doRead);
  71255. } else if (doRead) {
  71256. debug('do read');
  71257. state.reading = true;
  71258. state.sync = true; // if the length is currently zero, then we *need* a readable event.
  71259. if (state.length === 0) state.needReadable = true; // call internal read method
  71260. this._read(state.highWaterMark);
  71261. state.sync = false; // If _read pushed data synchronously, then `reading` will be false,
  71262. // and we need to re-evaluate how much data we can return to the user.
  71263. if (!state.reading) n = howMuchToRead(nOrig, state);
  71264. }
  71265. var ret;
  71266. if (n > 0) ret = fromList(n, state);else ret = null;
  71267. if (ret === null) {
  71268. state.needReadable = state.length <= state.highWaterMark;
  71269. n = 0;
  71270. } else {
  71271. state.length -= n;
  71272. state.awaitDrain = 0;
  71273. }
  71274. if (state.length === 0) {
  71275. // If we have nothing in the buffer, then we want to know
  71276. // as soon as we *do* get something into the buffer.
  71277. if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.
  71278. if (nOrig !== n && state.ended) endReadable(this);
  71279. }
  71280. if (ret !== null) this.emit('data', ret);
  71281. return ret;
  71282. };
  71283. function onEofChunk(stream, state) {
  71284. debug('onEofChunk');
  71285. if (state.ended) return;
  71286. if (state.decoder) {
  71287. var chunk = state.decoder.end();
  71288. if (chunk && chunk.length) {
  71289. state.buffer.push(chunk);
  71290. state.length += state.objectMode ? 1 : chunk.length;
  71291. }
  71292. }
  71293. state.ended = true;
  71294. if (state.sync) {
  71295. // if we are sync, wait until next tick to emit the data.
  71296. // Otherwise we risk emitting data in the flow()
  71297. // the readable code triggers during a read() call
  71298. emitReadable(stream);
  71299. } else {
  71300. // emit 'readable' now to make sure it gets picked up.
  71301. state.needReadable = false;
  71302. if (!state.emittedReadable) {
  71303. state.emittedReadable = true;
  71304. emitReadable_(stream);
  71305. }
  71306. }
  71307. } // Don't emit readable right away in sync mode, because this can trigger
  71308. // another read() call => stack overflow. This way, it might trigger
  71309. // a nextTick recursion warning, but that's not so bad.
  71310. function emitReadable(stream) {
  71311. var state = stream._readableState;
  71312. debug('emitReadable', state.needReadable, state.emittedReadable);
  71313. state.needReadable = false;
  71314. if (!state.emittedReadable) {
  71315. debug('emitReadable', state.flowing);
  71316. state.emittedReadable = true;
  71317. process.nextTick(emitReadable_, stream);
  71318. }
  71319. }
  71320. function emitReadable_(stream) {
  71321. var state = stream._readableState;
  71322. debug('emitReadable_', state.destroyed, state.length, state.ended);
  71323. if (!state.destroyed && (state.length || state.ended)) {
  71324. stream.emit('readable');
  71325. state.emittedReadable = false;
  71326. } // The stream needs another readable event if
  71327. // 1. It is not flowing, as the flow mechanism will take
  71328. // care of it.
  71329. // 2. It is not ended.
  71330. // 3. It is below the highWaterMark, so we can schedule
  71331. // another readable later.
  71332. state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
  71333. flow(stream);
  71334. } // at this point, the user has presumably seen the 'readable' event,
  71335. // and called read() to consume some data. that may have triggered
  71336. // in turn another _read(n) call, in which case reading = true if
  71337. // it's in progress.
  71338. // However, if we're not ended, or reading, and the length < hwm,
  71339. // then go ahead and try to read some more preemptively.
  71340. function maybeReadMore(stream, state) {
  71341. if (!state.readingMore) {
  71342. state.readingMore = true;
  71343. process.nextTick(maybeReadMore_, stream, state);
  71344. }
  71345. }
  71346. function maybeReadMore_(stream, state) {
  71347. // Attempt to read more data if we should.
  71348. //
  71349. // The conditions for reading more data are (one of):
  71350. // - Not enough data buffered (state.length < state.highWaterMark). The loop
  71351. // is responsible for filling the buffer with enough data if such data
  71352. // is available. If highWaterMark is 0 and we are not in the flowing mode
  71353. // we should _not_ attempt to buffer any extra data. We'll get more data
  71354. // when the stream consumer calls read() instead.
  71355. // - No data in the buffer, and the stream is in flowing mode. In this mode
  71356. // the loop below is responsible for ensuring read() is called. Failing to
  71357. // call read here would abort the flow and there's no other mechanism for
  71358. // continuing the flow if the stream consumer has just subscribed to the
  71359. // 'data' event.
  71360. //
  71361. // In addition to the above conditions to keep reading data, the following
  71362. // conditions prevent the data from being read:
  71363. // - The stream has ended (state.ended).
  71364. // - There is already a pending 'read' operation (state.reading). This is a
  71365. // case where the the stream has called the implementation defined _read()
  71366. // method, but they are processing the call asynchronously and have _not_
  71367. // called push() with new data. In this case we skip performing more
  71368. // read()s. The execution ends in this method again after the _read() ends
  71369. // up calling push() with more data.
  71370. while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
  71371. var len = state.length;
  71372. debug('maybeReadMore read 0');
  71373. stream.read(0);
  71374. if (len === state.length) // didn't get any data, stop spinning.
  71375. break;
  71376. }
  71377. state.readingMore = false;
  71378. } // abstract method. to be overridden in specific implementation classes.
  71379. // call cb(er, data) where data is <= n in length.
  71380. // for virtual (non-string, non-buffer) streams, "length" is somewhat
  71381. // arbitrary, and perhaps not very meaningful.
  71382. Readable.prototype._read = function (n) {
  71383. errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
  71384. };
  71385. Readable.prototype.pipe = function (dest, pipeOpts) {
  71386. var src = this;
  71387. var state = this._readableState;
  71388. switch (state.pipesCount) {
  71389. case 0:
  71390. state.pipes = dest;
  71391. break;
  71392. case 1:
  71393. state.pipes = [state.pipes, dest];
  71394. break;
  71395. default:
  71396. state.pipes.push(dest);
  71397. break;
  71398. }
  71399. state.pipesCount += 1;
  71400. debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
  71401. var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
  71402. var endFn = doEnd ? onend : unpipe;
  71403. if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
  71404. dest.on('unpipe', onunpipe);
  71405. function onunpipe(readable, unpipeInfo) {
  71406. debug('onunpipe');
  71407. if (readable === src) {
  71408. if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
  71409. unpipeInfo.hasUnpiped = true;
  71410. cleanup();
  71411. }
  71412. }
  71413. }
  71414. function onend() {
  71415. debug('onend');
  71416. dest.end();
  71417. } // when the dest drains, it reduces the awaitDrain counter
  71418. // on the source. This would be more elegant with a .once()
  71419. // handler in flow(), but adding and removing repeatedly is
  71420. // too slow.
  71421. var ondrain = pipeOnDrain(src);
  71422. dest.on('drain', ondrain);
  71423. var cleanedUp = false;
  71424. function cleanup() {
  71425. debug('cleanup'); // cleanup event handlers once the pipe is broken
  71426. dest.removeListener('close', onclose);
  71427. dest.removeListener('finish', onfinish);
  71428. dest.removeListener('drain', ondrain);
  71429. dest.removeListener('error', onerror);
  71430. dest.removeListener('unpipe', onunpipe);
  71431. src.removeListener('end', onend);
  71432. src.removeListener('end', unpipe);
  71433. src.removeListener('data', ondata);
  71434. cleanedUp = true; // if the reader is waiting for a drain event from this
  71435. // specific writer, then it would cause it to never start
  71436. // flowing again.
  71437. // So, if this is awaiting a drain, then we just call it now.
  71438. // If we don't know, then assume that we are waiting for one.
  71439. if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
  71440. }
  71441. src.on('data', ondata);
  71442. function ondata(chunk) {
  71443. debug('ondata');
  71444. var ret = dest.write(chunk);
  71445. debug('dest.write', ret);
  71446. if (ret === false) {
  71447. // If the user unpiped during `dest.write()`, it is possible
  71448. // to get stuck in a permanently paused state if that write
  71449. // also returned false.
  71450. // => Check whether `dest` is still a piping destination.
  71451. if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
  71452. debug('false write response, pause', state.awaitDrain);
  71453. state.awaitDrain++;
  71454. }
  71455. src.pause();
  71456. }
  71457. } // if the dest has an error, then stop piping into it.
  71458. // however, don't suppress the throwing behavior for this.
  71459. function onerror(er) {
  71460. debug('onerror', er);
  71461. unpipe();
  71462. dest.removeListener('error', onerror);
  71463. if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
  71464. } // Make sure our error handler is attached before userland ones.
  71465. prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.
  71466. function onclose() {
  71467. dest.removeListener('finish', onfinish);
  71468. unpipe();
  71469. }
  71470. dest.once('close', onclose);
  71471. function onfinish() {
  71472. debug('onfinish');
  71473. dest.removeListener('close', onclose);
  71474. unpipe();
  71475. }
  71476. dest.once('finish', onfinish);
  71477. function unpipe() {
  71478. debug('unpipe');
  71479. src.unpipe(dest);
  71480. } // tell the dest that it's being piped to
  71481. dest.emit('pipe', src); // start the flow if it hasn't been started already.
  71482. if (!state.flowing) {
  71483. debug('pipe resume');
  71484. src.resume();
  71485. }
  71486. return dest;
  71487. };
  71488. function pipeOnDrain(src) {
  71489. return function pipeOnDrainFunctionResult() {
  71490. var state = src._readableState;
  71491. debug('pipeOnDrain', state.awaitDrain);
  71492. if (state.awaitDrain) state.awaitDrain--;
  71493. if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
  71494. state.flowing = true;
  71495. flow(src);
  71496. }
  71497. };
  71498. }
  71499. Readable.prototype.unpipe = function (dest) {
  71500. var state = this._readableState;
  71501. var unpipeInfo = {
  71502. hasUnpiped: false
  71503. }; // if we're not piping anywhere, then do nothing.
  71504. if (state.pipesCount === 0) return this; // just one destination. most common case.
  71505. if (state.pipesCount === 1) {
  71506. // passed in one, but it's not the right one.
  71507. if (dest && dest !== state.pipes) return this;
  71508. if (!dest) dest = state.pipes; // got a match.
  71509. state.pipes = null;
  71510. state.pipesCount = 0;
  71511. state.flowing = false;
  71512. if (dest) dest.emit('unpipe', this, unpipeInfo);
  71513. return this;
  71514. } // slow case. multiple pipe destinations.
  71515. if (!dest) {
  71516. // remove all.
  71517. var dests = state.pipes;
  71518. var len = state.pipesCount;
  71519. state.pipes = null;
  71520. state.pipesCount = 0;
  71521. state.flowing = false;
  71522. for (var i = 0; i < len; i++) {
  71523. dests[i].emit('unpipe', this, {
  71524. hasUnpiped: false
  71525. });
  71526. }
  71527. return this;
  71528. } // try to find the right one.
  71529. var index = indexOf(state.pipes, dest);
  71530. if (index === -1) return this;
  71531. state.pipes.splice(index, 1);
  71532. state.pipesCount -= 1;
  71533. if (state.pipesCount === 1) state.pipes = state.pipes[0];
  71534. dest.emit('unpipe', this, unpipeInfo);
  71535. return this;
  71536. }; // set up data events if they are asked for
  71537. // Ensure readable listeners eventually get something
  71538. Readable.prototype.on = function (ev, fn) {
  71539. var res = Stream.prototype.on.call(this, ev, fn);
  71540. var state = this._readableState;
  71541. if (ev === 'data') {
  71542. // update readableListening so that resume() may be a no-op
  71543. // a few lines down. This is needed to support once('readable').
  71544. state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused
  71545. if (state.flowing !== false) this.resume();
  71546. } else if (ev === 'readable') {
  71547. if (!state.endEmitted && !state.readableListening) {
  71548. state.readableListening = state.needReadable = true;
  71549. state.flowing = false;
  71550. state.emittedReadable = false;
  71551. debug('on readable', state.length, state.reading);
  71552. if (state.length) {
  71553. emitReadable(this);
  71554. } else if (!state.reading) {
  71555. process.nextTick(nReadingNextTick, this);
  71556. }
  71557. }
  71558. }
  71559. return res;
  71560. };
  71561. Readable.prototype.addListener = Readable.prototype.on;
  71562. Readable.prototype.removeListener = function (ev, fn) {
  71563. var res = Stream.prototype.removeListener.call(this, ev, fn);
  71564. if (ev === 'readable') {
  71565. // We need to check if there is someone still listening to
  71566. // readable and reset the state. However this needs to happen
  71567. // after readable has been emitted but before I/O (nextTick) to
  71568. // support once('readable', fn) cycles. This means that calling
  71569. // resume within the same tick will have no
  71570. // effect.
  71571. process.nextTick(updateReadableListening, this);
  71572. }
  71573. return res;
  71574. };
  71575. Readable.prototype.removeAllListeners = function (ev) {
  71576. var res = Stream.prototype.removeAllListeners.apply(this, arguments);
  71577. if (ev === 'readable' || ev === undefined) {
  71578. // We need to check if there is someone still listening to
  71579. // readable and reset the state. However this needs to happen
  71580. // after readable has been emitted but before I/O (nextTick) to
  71581. // support once('readable', fn) cycles. This means that calling
  71582. // resume within the same tick will have no
  71583. // effect.
  71584. process.nextTick(updateReadableListening, this);
  71585. }
  71586. return res;
  71587. };
  71588. function updateReadableListening(self) {
  71589. var state = self._readableState;
  71590. state.readableListening = self.listenerCount('readable') > 0;
  71591. if (state.resumeScheduled && !state.paused) {
  71592. // flowing needs to be set to true now, otherwise
  71593. // the upcoming resume will not flow.
  71594. state.flowing = true; // crude way to check if we should resume
  71595. } else if (self.listenerCount('data') > 0) {
  71596. self.resume();
  71597. }
  71598. }
  71599. function nReadingNextTick(self) {
  71600. debug('readable nexttick read 0');
  71601. self.read(0);
  71602. } // pause() and resume() are remnants of the legacy readable stream API
  71603. // If the user uses them, then switch into old mode.
  71604. Readable.prototype.resume = function () {
  71605. var state = this._readableState;
  71606. if (!state.flowing) {
  71607. debug('resume'); // we flow only if there is no one listening
  71608. // for readable, but we still have to call
  71609. // resume()
  71610. state.flowing = !state.readableListening;
  71611. resume(this, state);
  71612. }
  71613. state.paused = false;
  71614. return this;
  71615. };
  71616. function resume(stream, state) {
  71617. if (!state.resumeScheduled) {
  71618. state.resumeScheduled = true;
  71619. process.nextTick(resume_, stream, state);
  71620. }
  71621. }
  71622. function resume_(stream, state) {
  71623. debug('resume', state.reading);
  71624. if (!state.reading) {
  71625. stream.read(0);
  71626. }
  71627. state.resumeScheduled = false;
  71628. stream.emit('resume');
  71629. flow(stream);
  71630. if (state.flowing && !state.reading) stream.read(0);
  71631. }
  71632. Readable.prototype.pause = function () {
  71633. debug('call pause flowing=%j', this._readableState.flowing);
  71634. if (this._readableState.flowing !== false) {
  71635. debug('pause');
  71636. this._readableState.flowing = false;
  71637. this.emit('pause');
  71638. }
  71639. this._readableState.paused = true;
  71640. return this;
  71641. };
  71642. function flow(stream) {
  71643. var state = stream._readableState;
  71644. debug('flow', state.flowing);
  71645. while (state.flowing && stream.read() !== null) {
  71646. ;
  71647. }
  71648. } // wrap an old-style stream as the async data source.
  71649. // This is *not* part of the readable stream interface.
  71650. // It is an ugly unfortunate mess of history.
  71651. Readable.prototype.wrap = function (stream) {
  71652. var _this = this;
  71653. var state = this._readableState;
  71654. var paused = false;
  71655. stream.on('end', function () {
  71656. debug('wrapped end');
  71657. if (state.decoder && !state.ended) {
  71658. var chunk = state.decoder.end();
  71659. if (chunk && chunk.length) _this.push(chunk);
  71660. }
  71661. _this.push(null);
  71662. });
  71663. stream.on('data', function (chunk) {
  71664. debug('wrapped data');
  71665. if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode
  71666. if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
  71667. var ret = _this.push(chunk);
  71668. if (!ret) {
  71669. paused = true;
  71670. stream.pause();
  71671. }
  71672. }); // proxy all the other methods.
  71673. // important when wrapping filters and duplexes.
  71674. for (var i in stream) {
  71675. if (this[i] === undefined && typeof stream[i] === 'function') {
  71676. this[i] = function methodWrap(method) {
  71677. return function methodWrapReturnFunction() {
  71678. return stream[method].apply(stream, arguments);
  71679. };
  71680. }(i);
  71681. }
  71682. } // proxy certain important events.
  71683. for (var n = 0; n < kProxyEvents.length; n++) {
  71684. stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
  71685. } // when we try to consume some more bytes, simply unpause the
  71686. // underlying stream.
  71687. this._read = function (n) {
  71688. debug('wrapped _read', n);
  71689. if (paused) {
  71690. paused = false;
  71691. stream.resume();
  71692. }
  71693. };
  71694. return this;
  71695. };
  71696. if (typeof Symbol === 'function') {
  71697. Readable.prototype[Symbol.asyncIterator] = function () {
  71698. if (createReadableStreamAsyncIterator === undefined) {
  71699. createReadableStreamAsyncIterator = __webpack_require__(45850);
  71700. }
  71701. return createReadableStreamAsyncIterator(this);
  71702. };
  71703. }
  71704. Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
  71705. // making it explicit this property is not enumerable
  71706. // because otherwise some prototype manipulation in
  71707. // userland will fail
  71708. enumerable: false,
  71709. get: function get() {
  71710. return this._readableState.highWaterMark;
  71711. }
  71712. });
  71713. Object.defineProperty(Readable.prototype, 'readableBuffer', {
  71714. // making it explicit this property is not enumerable
  71715. // because otherwise some prototype manipulation in
  71716. // userland will fail
  71717. enumerable: false,
  71718. get: function get() {
  71719. return this._readableState && this._readableState.buffer;
  71720. }
  71721. });
  71722. Object.defineProperty(Readable.prototype, 'readableFlowing', {
  71723. // making it explicit this property is not enumerable
  71724. // because otherwise some prototype manipulation in
  71725. // userland will fail
  71726. enumerable: false,
  71727. get: function get() {
  71728. return this._readableState.flowing;
  71729. },
  71730. set: function set(state) {
  71731. if (this._readableState) {
  71732. this._readableState.flowing = state;
  71733. }
  71734. }
  71735. }); // exposed for testing purposes only.
  71736. Readable._fromList = fromList;
  71737. Object.defineProperty(Readable.prototype, 'readableLength', {
  71738. // making it explicit this property is not enumerable
  71739. // because otherwise some prototype manipulation in
  71740. // userland will fail
  71741. enumerable: false,
  71742. get: function get() {
  71743. return this._readableState.length;
  71744. }
  71745. }); // Pluck off n bytes from an array of buffers.
  71746. // Length is the combined lengths of all the buffers in the list.
  71747. // This function is designed to be inlinable, so please take care when making
  71748. // changes to the function body.
  71749. function fromList(n, state) {
  71750. // nothing buffered
  71751. if (state.length === 0) return null;
  71752. var ret;
  71753. if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
  71754. // read it all, truncate the list
  71755. if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
  71756. state.buffer.clear();
  71757. } else {
  71758. // read part of list
  71759. ret = state.buffer.consume(n, state.decoder);
  71760. }
  71761. return ret;
  71762. }
  71763. function endReadable(stream) {
  71764. var state = stream._readableState;
  71765. debug('endReadable', state.endEmitted);
  71766. if (!state.endEmitted) {
  71767. state.ended = true;
  71768. process.nextTick(endReadableNT, state, stream);
  71769. }
  71770. }
  71771. function endReadableNT(state, stream) {
  71772. debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.
  71773. if (!state.endEmitted && state.length === 0) {
  71774. state.endEmitted = true;
  71775. stream.readable = false;
  71776. stream.emit('end');
  71777. if (state.autoDestroy) {
  71778. // In case of duplex streams we need a way to detect
  71779. // if the writable side is ready for autoDestroy as well
  71780. var wState = stream._writableState;
  71781. if (!wState || wState.autoDestroy && wState.finished) {
  71782. stream.destroy();
  71783. }
  71784. }
  71785. }
  71786. }
  71787. if (typeof Symbol === 'function') {
  71788. Readable.from = function (iterable, opts) {
  71789. if (from === undefined) {
  71790. from = __webpack_require__(15167);
  71791. }
  71792. return from(Readable, iterable, opts);
  71793. };
  71794. }
  71795. function indexOf(xs, x) {
  71796. for (var i = 0, l = xs.length; i < l; i++) {
  71797. if (xs[i] === x) return i;
  71798. }
  71799. return -1;
  71800. }
  71801. /***/ }),
  71802. /***/ 74605:
  71803. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  71804. "use strict";
  71805. // Copyright Joyent, Inc. and other Node contributors.
  71806. //
  71807. // Permission is hereby granted, free of charge, to any person obtaining a
  71808. // copy of this software and associated documentation files (the
  71809. // "Software"), to deal in the Software without restriction, including
  71810. // without limitation the rights to use, copy, modify, merge, publish,
  71811. // distribute, sublicense, and/or sell copies of the Software, and to permit
  71812. // persons to whom the Software is furnished to do so, subject to the
  71813. // following conditions:
  71814. //
  71815. // The above copyright notice and this permission notice shall be included
  71816. // in all copies or substantial portions of the Software.
  71817. //
  71818. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  71819. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  71820. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  71821. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  71822. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  71823. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  71824. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  71825. // a transform stream is a readable/writable stream where you do
  71826. // something with the data. Sometimes it's called a "filter",
  71827. // but that's not a great name for it, since that implies a thing where
  71828. // some bits pass through, and others are simply ignored. (That would
  71829. // be a valid example of a transform, of course.)
  71830. //
  71831. // While the output is causally related to the input, it's not a
  71832. // necessarily symmetric or synchronous transformation. For example,
  71833. // a zlib stream might take multiple plain-text writes(), and then
  71834. // emit a single compressed chunk some time in the future.
  71835. //
  71836. // Here's how this works:
  71837. //
  71838. // The Transform stream has all the aspects of the readable and writable
  71839. // stream classes. When you write(chunk), that calls _write(chunk,cb)
  71840. // internally, and returns false if there's a lot of pending writes
  71841. // buffered up. When you call read(), that calls _read(n) until
  71842. // there's enough pending readable data buffered up.
  71843. //
  71844. // In a transform stream, the written data is placed in a buffer. When
  71845. // _read(n) is called, it transforms the queued up data, calling the
  71846. // buffered _write cb's as it consumes chunks. If consuming a single
  71847. // written chunk would result in multiple output chunks, then the first
  71848. // outputted bit calls the readcb, and subsequent chunks just go into
  71849. // the read buffer, and will cause it to emit 'readable' if necessary.
  71850. //
  71851. // This way, back-pressure is actually determined by the reading side,
  71852. // since _read has to be called to start processing a new chunk. However,
  71853. // a pathological inflate type of transform can cause excessive buffering
  71854. // here. For example, imagine a stream where every byte of input is
  71855. // interpreted as an integer from 0-255, and then results in that many
  71856. // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
  71857. // 1kb of data being output. In this case, you could write a very small
  71858. // amount of input, and end up with a very large amount of output. In
  71859. // such a pathological inflating mechanism, there'd be no way to tell
  71860. // the system to stop doing the transform. A single 4MB write could
  71861. // cause the system to run out of memory.
  71862. //
  71863. // However, even in such a pathological case, only a single written chunk
  71864. // would be consumed, and then the rest would wait (un-transformed) until
  71865. // the results of the previous transformed chunk were consumed.
  71866. module.exports = Transform;
  71867. var _require$codes = (__webpack_require__(94281)/* .codes */ .q),
  71868. ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
  71869. ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
  71870. ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
  71871. ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;
  71872. var Duplex = __webpack_require__(56753);
  71873. __webpack_require__(35717)(Transform, Duplex);
  71874. function afterTransform(er, data) {
  71875. var ts = this._transformState;
  71876. ts.transforming = false;
  71877. var cb = ts.writecb;
  71878. if (cb === null) {
  71879. return this.emit('error', new ERR_MULTIPLE_CALLBACK());
  71880. }
  71881. ts.writechunk = null;
  71882. ts.writecb = null;
  71883. if (data != null) // single equals check for both `null` and `undefined`
  71884. this.push(data);
  71885. cb(er);
  71886. var rs = this._readableState;
  71887. rs.reading = false;
  71888. if (rs.needReadable || rs.length < rs.highWaterMark) {
  71889. this._read(rs.highWaterMark);
  71890. }
  71891. }
  71892. function Transform(options) {
  71893. if (!(this instanceof Transform)) return new Transform(options);
  71894. Duplex.call(this, options);
  71895. this._transformState = {
  71896. afterTransform: afterTransform.bind(this),
  71897. needTransform: false,
  71898. transforming: false,
  71899. writecb: null,
  71900. writechunk: null,
  71901. writeencoding: null
  71902. }; // start out asking for a readable event once data is transformed.
  71903. this._readableState.needReadable = true; // we have implemented the _read method, and done the other things
  71904. // that Readable wants before the first _read call, so unset the
  71905. // sync guard flag.
  71906. this._readableState.sync = false;
  71907. if (options) {
  71908. if (typeof options.transform === 'function') this._transform = options.transform;
  71909. if (typeof options.flush === 'function') this._flush = options.flush;
  71910. } // When the writable side finishes, then flush out anything remaining.
  71911. this.on('prefinish', prefinish);
  71912. }
  71913. function prefinish() {
  71914. var _this = this;
  71915. if (typeof this._flush === 'function' && !this._readableState.destroyed) {
  71916. this._flush(function (er, data) {
  71917. done(_this, er, data);
  71918. });
  71919. } else {
  71920. done(this, null, null);
  71921. }
  71922. }
  71923. Transform.prototype.push = function (chunk, encoding) {
  71924. this._transformState.needTransform = false;
  71925. return Duplex.prototype.push.call(this, chunk, encoding);
  71926. }; // This is the part where you do stuff!
  71927. // override this function in implementation classes.
  71928. // 'chunk' is an input chunk.
  71929. //
  71930. // Call `push(newChunk)` to pass along transformed output
  71931. // to the readable side. You may call 'push' zero or more times.
  71932. //
  71933. // Call `cb(err)` when you are done with this chunk. If you pass
  71934. // an error, then that'll put the hurt on the whole operation. If you
  71935. // never call cb(), then you'll never get another chunk.
  71936. Transform.prototype._transform = function (chunk, encoding, cb) {
  71937. cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
  71938. };
  71939. Transform.prototype._write = function (chunk, encoding, cb) {
  71940. var ts = this._transformState;
  71941. ts.writecb = cb;
  71942. ts.writechunk = chunk;
  71943. ts.writeencoding = encoding;
  71944. if (!ts.transforming) {
  71945. var rs = this._readableState;
  71946. if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
  71947. }
  71948. }; // Doesn't matter what the args are here.
  71949. // _transform does all the work.
  71950. // That we got here means that the readable side wants more data.
  71951. Transform.prototype._read = function (n) {
  71952. var ts = this._transformState;
  71953. if (ts.writechunk !== null && !ts.transforming) {
  71954. ts.transforming = true;
  71955. this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
  71956. } else {
  71957. // mark that we need a transform, so that any data that comes in
  71958. // will get processed, now that we've asked for it.
  71959. ts.needTransform = true;
  71960. }
  71961. };
  71962. Transform.prototype._destroy = function (err, cb) {
  71963. Duplex.prototype._destroy.call(this, err, function (err2) {
  71964. cb(err2);
  71965. });
  71966. };
  71967. function done(stream, er, data) {
  71968. if (er) return stream.emit('error', er);
  71969. if (data != null) // single equals check for both `null` and `undefined`
  71970. stream.push(data); // TODO(BridgeAR): Write a test for these two error cases
  71971. // if there's nothing in the write buffer, then that means
  71972. // that nothing more will ever be provided
  71973. if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
  71974. if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
  71975. return stream.push(null);
  71976. }
  71977. /***/ }),
  71978. /***/ 64229:
  71979. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  71980. "use strict";
  71981. /* provided dependency */ var process = __webpack_require__(34155);
  71982. // Copyright Joyent, Inc. and other Node contributors.
  71983. //
  71984. // Permission is hereby granted, free of charge, to any person obtaining a
  71985. // copy of this software and associated documentation files (the
  71986. // "Software"), to deal in the Software without restriction, including
  71987. // without limitation the rights to use, copy, modify, merge, publish,
  71988. // distribute, sublicense, and/or sell copies of the Software, and to permit
  71989. // persons to whom the Software is furnished to do so, subject to the
  71990. // following conditions:
  71991. //
  71992. // The above copyright notice and this permission notice shall be included
  71993. // in all copies or substantial portions of the Software.
  71994. //
  71995. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  71996. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  71997. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  71998. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  71999. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  72000. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  72001. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  72002. // A bit simpler than readable streams.
  72003. // Implement an async ._write(chunk, encoding, cb), and it'll handle all
  72004. // the drain event emission and buffering.
  72005. module.exports = Writable;
  72006. /* <replacement> */
  72007. function WriteReq(chunk, encoding, cb) {
  72008. this.chunk = chunk;
  72009. this.encoding = encoding;
  72010. this.callback = cb;
  72011. this.next = null;
  72012. } // It seems a linked list but it is not
  72013. // there will be only 2 of these for each stream
  72014. function CorkedRequest(state) {
  72015. var _this = this;
  72016. this.next = null;
  72017. this.entry = null;
  72018. this.finish = function () {
  72019. onCorkedFinish(_this, state);
  72020. };
  72021. }
  72022. /* </replacement> */
  72023. /*<replacement>*/
  72024. var Duplex;
  72025. /*</replacement>*/
  72026. Writable.WritableState = WritableState;
  72027. /*<replacement>*/
  72028. var internalUtil = {
  72029. deprecate: __webpack_require__(94927)
  72030. };
  72031. /*</replacement>*/
  72032. /*<replacement>*/
  72033. var Stream = __webpack_require__(22503);
  72034. /*</replacement>*/
  72035. var Buffer = (__webpack_require__(48764).Buffer);
  72036. var OurUint8Array = __webpack_require__.g.Uint8Array || function () {};
  72037. function _uint8ArrayToBuffer(chunk) {
  72038. return Buffer.from(chunk);
  72039. }
  72040. function _isUint8Array(obj) {
  72041. return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
  72042. }
  72043. var destroyImpl = __webpack_require__(61195);
  72044. var _require = __webpack_require__(82457),
  72045. getHighWaterMark = _require.getHighWaterMark;
  72046. var _require$codes = (__webpack_require__(94281)/* .codes */ .q),
  72047. ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
  72048. ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
  72049. ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
  72050. ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
  72051. ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
  72052. ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
  72053. ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
  72054. ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;
  72055. var errorOrDestroy = destroyImpl.errorOrDestroy;
  72056. __webpack_require__(35717)(Writable, Stream);
  72057. function nop() {}
  72058. function WritableState(options, stream, isDuplex) {
  72059. Duplex = Duplex || __webpack_require__(56753);
  72060. options = options || {}; // Duplex streams are both readable and writable, but share
  72061. // the same options object.
  72062. // However, some cases require setting options to different
  72063. // values for the readable and the writable sides of the duplex stream,
  72064. // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.
  72065. if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream
  72066. // contains buffers or objects.
  72067. this.objectMode = !!options.objectMode;
  72068. if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false
  72069. // Note: 0 is a valid value, means that we always return false if
  72070. // the entire buffer is not flushed immediately on write()
  72071. this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called
  72072. this.finalCalled = false; // drain event flag.
  72073. this.needDrain = false; // at the start of calling end()
  72074. this.ending = false; // when end() has been called, and returned
  72075. this.ended = false; // when 'finish' is emitted
  72076. this.finished = false; // has it been destroyed
  72077. this.destroyed = false; // should we decode strings into buffers before passing to _write?
  72078. // this is here so that some node-core streams can optimize string
  72079. // handling at a lower level.
  72080. var noDecode = options.decodeStrings === false;
  72081. this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string
  72082. // encoding is 'binary' so we have to make this configurable.
  72083. // Everything else in the universe uses 'utf8', though.
  72084. this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement
  72085. // of how much we're waiting to get pushed to some underlying
  72086. // socket or file.
  72087. this.length = 0; // a flag to see when we're in the middle of a write.
  72088. this.writing = false; // when true all writes will be buffered until .uncork() call
  72089. this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,
  72090. // or on a later tick. We set this to true at first, because any
  72091. // actions that shouldn't happen until "later" should generally also
  72092. // not happen before the first write call.
  72093. this.sync = true; // a flag to know if we're processing previously buffered items, which
  72094. // may call the _write() callback in the same tick, so that we don't
  72095. // end up in an overlapped onwrite situation.
  72096. this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)
  72097. this.onwrite = function (er) {
  72098. onwrite(stream, er);
  72099. }; // the callback that the user supplies to write(chunk,encoding,cb)
  72100. this.writecb = null; // the amount that is being written when _write is called.
  72101. this.writelen = 0;
  72102. this.bufferedRequest = null;
  72103. this.lastBufferedRequest = null; // number of pending user-supplied write callbacks
  72104. // this must be 0 before 'finish' can be emitted
  72105. this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs
  72106. // This is relevant for synchronous Transform streams
  72107. this.prefinished = false; // True if the error was already emitted and should not be thrown again
  72108. this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.
  72109. this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')
  72110. this.autoDestroy = !!options.autoDestroy; // count buffered requests
  72111. this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always
  72112. // one allocated and free to use, and we maintain at most two
  72113. this.corkedRequestsFree = new CorkedRequest(this);
  72114. }
  72115. WritableState.prototype.getBuffer = function getBuffer() {
  72116. var current = this.bufferedRequest;
  72117. var out = [];
  72118. while (current) {
  72119. out.push(current);
  72120. current = current.next;
  72121. }
  72122. return out;
  72123. };
  72124. (function () {
  72125. try {
  72126. Object.defineProperty(WritableState.prototype, 'buffer', {
  72127. get: internalUtil.deprecate(function writableStateBufferGetter() {
  72128. return this.getBuffer();
  72129. }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
  72130. });
  72131. } catch (_) {}
  72132. })(); // Test _writableState for inheritance to account for Duplex streams,
  72133. // whose prototype chain only points to Readable.
  72134. var realHasInstance;
  72135. if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
  72136. realHasInstance = Function.prototype[Symbol.hasInstance];
  72137. Object.defineProperty(Writable, Symbol.hasInstance, {
  72138. value: function value(object) {
  72139. if (realHasInstance.call(this, object)) return true;
  72140. if (this !== Writable) return false;
  72141. return object && object._writableState instanceof WritableState;
  72142. }
  72143. });
  72144. } else {
  72145. realHasInstance = function realHasInstance(object) {
  72146. return object instanceof this;
  72147. };
  72148. }
  72149. function Writable(options) {
  72150. Duplex = Duplex || __webpack_require__(56753); // Writable ctor is applied to Duplexes, too.
  72151. // `realHasInstance` is necessary because using plain `instanceof`
  72152. // would return false, as no `_writableState` property is attached.
  72153. // Trying to use the custom `instanceof` for Writable here will also break the
  72154. // Node.js LazyTransform implementation, which has a non-trivial getter for
  72155. // `_writableState` that would lead to infinite recursion.
  72156. // Checking for a Stream.Duplex instance is faster here instead of inside
  72157. // the WritableState constructor, at least with V8 6.5
  72158. var isDuplex = this instanceof Duplex;
  72159. if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
  72160. this._writableState = new WritableState(options, this, isDuplex); // legacy.
  72161. this.writable = true;
  72162. if (options) {
  72163. if (typeof options.write === 'function') this._write = options.write;
  72164. if (typeof options.writev === 'function') this._writev = options.writev;
  72165. if (typeof options.destroy === 'function') this._destroy = options.destroy;
  72166. if (typeof options.final === 'function') this._final = options.final;
  72167. }
  72168. Stream.call(this);
  72169. } // Otherwise people can pipe Writable streams, which is just wrong.
  72170. Writable.prototype.pipe = function () {
  72171. errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
  72172. };
  72173. function writeAfterEnd(stream, cb) {
  72174. var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb
  72175. errorOrDestroy(stream, er);
  72176. process.nextTick(cb, er);
  72177. } // Checks that a user-supplied chunk is valid, especially for the particular
  72178. // mode the stream is in. Currently this means that `null` is never accepted
  72179. // and undefined/non-string values are only allowed in object mode.
  72180. function validChunk(stream, state, chunk, cb) {
  72181. var er;
  72182. if (chunk === null) {
  72183. er = new ERR_STREAM_NULL_VALUES();
  72184. } else if (typeof chunk !== 'string' && !state.objectMode) {
  72185. er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
  72186. }
  72187. if (er) {
  72188. errorOrDestroy(stream, er);
  72189. process.nextTick(cb, er);
  72190. return false;
  72191. }
  72192. return true;
  72193. }
  72194. Writable.prototype.write = function (chunk, encoding, cb) {
  72195. var state = this._writableState;
  72196. var ret = false;
  72197. var isBuf = !state.objectMode && _isUint8Array(chunk);
  72198. if (isBuf && !Buffer.isBuffer(chunk)) {
  72199. chunk = _uint8ArrayToBuffer(chunk);
  72200. }
  72201. if (typeof encoding === 'function') {
  72202. cb = encoding;
  72203. encoding = null;
  72204. }
  72205. if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
  72206. if (typeof cb !== 'function') cb = nop;
  72207. if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
  72208. state.pendingcb++;
  72209. ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
  72210. }
  72211. return ret;
  72212. };
  72213. Writable.prototype.cork = function () {
  72214. this._writableState.corked++;
  72215. };
  72216. Writable.prototype.uncork = function () {
  72217. var state = this._writableState;
  72218. if (state.corked) {
  72219. state.corked--;
  72220. if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
  72221. }
  72222. };
  72223. Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
  72224. // node::ParseEncoding() requires lower case.
  72225. if (typeof encoding === 'string') encoding = encoding.toLowerCase();
  72226. if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
  72227. this._writableState.defaultEncoding = encoding;
  72228. return this;
  72229. };
  72230. Object.defineProperty(Writable.prototype, 'writableBuffer', {
  72231. // making it explicit this property is not enumerable
  72232. // because otherwise some prototype manipulation in
  72233. // userland will fail
  72234. enumerable: false,
  72235. get: function get() {
  72236. return this._writableState && this._writableState.getBuffer();
  72237. }
  72238. });
  72239. function decodeChunk(state, chunk, encoding) {
  72240. if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
  72241. chunk = Buffer.from(chunk, encoding);
  72242. }
  72243. return chunk;
  72244. }
  72245. Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
  72246. // making it explicit this property is not enumerable
  72247. // because otherwise some prototype manipulation in
  72248. // userland will fail
  72249. enumerable: false,
  72250. get: function get() {
  72251. return this._writableState.highWaterMark;
  72252. }
  72253. }); // if we're already writing something, then just put this
  72254. // in the queue, and wait our turn. Otherwise, call _write
  72255. // If we return false, then we need a drain event, so set that flag.
  72256. function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
  72257. if (!isBuf) {
  72258. var newChunk = decodeChunk(state, chunk, encoding);
  72259. if (chunk !== newChunk) {
  72260. isBuf = true;
  72261. encoding = 'buffer';
  72262. chunk = newChunk;
  72263. }
  72264. }
  72265. var len = state.objectMode ? 1 : chunk.length;
  72266. state.length += len;
  72267. var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.
  72268. if (!ret) state.needDrain = true;
  72269. if (state.writing || state.corked) {
  72270. var last = state.lastBufferedRequest;
  72271. state.lastBufferedRequest = {
  72272. chunk: chunk,
  72273. encoding: encoding,
  72274. isBuf: isBuf,
  72275. callback: cb,
  72276. next: null
  72277. };
  72278. if (last) {
  72279. last.next = state.lastBufferedRequest;
  72280. } else {
  72281. state.bufferedRequest = state.lastBufferedRequest;
  72282. }
  72283. state.bufferedRequestCount += 1;
  72284. } else {
  72285. doWrite(stream, state, false, len, chunk, encoding, cb);
  72286. }
  72287. return ret;
  72288. }
  72289. function doWrite(stream, state, writev, len, chunk, encoding, cb) {
  72290. state.writelen = len;
  72291. state.writecb = cb;
  72292. state.writing = true;
  72293. state.sync = true;
  72294. if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
  72295. state.sync = false;
  72296. }
  72297. function onwriteError(stream, state, sync, er, cb) {
  72298. --state.pendingcb;
  72299. if (sync) {
  72300. // defer the callback if we are being called synchronously
  72301. // to avoid piling up things on the stack
  72302. process.nextTick(cb, er); // this can emit finish, and it will always happen
  72303. // after error
  72304. process.nextTick(finishMaybe, stream, state);
  72305. stream._writableState.errorEmitted = true;
  72306. errorOrDestroy(stream, er);
  72307. } else {
  72308. // the caller expect this to happen before if
  72309. // it is async
  72310. cb(er);
  72311. stream._writableState.errorEmitted = true;
  72312. errorOrDestroy(stream, er); // this can emit finish, but finish must
  72313. // always follow error
  72314. finishMaybe(stream, state);
  72315. }
  72316. }
  72317. function onwriteStateUpdate(state) {
  72318. state.writing = false;
  72319. state.writecb = null;
  72320. state.length -= state.writelen;
  72321. state.writelen = 0;
  72322. }
  72323. function onwrite(stream, er) {
  72324. var state = stream._writableState;
  72325. var sync = state.sync;
  72326. var cb = state.writecb;
  72327. if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
  72328. onwriteStateUpdate(state);
  72329. if (er) onwriteError(stream, state, sync, er, cb);else {
  72330. // Check if we're actually ready to finish, but don't emit yet
  72331. var finished = needFinish(state) || stream.destroyed;
  72332. if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
  72333. clearBuffer(stream, state);
  72334. }
  72335. if (sync) {
  72336. process.nextTick(afterWrite, stream, state, finished, cb);
  72337. } else {
  72338. afterWrite(stream, state, finished, cb);
  72339. }
  72340. }
  72341. }
  72342. function afterWrite(stream, state, finished, cb) {
  72343. if (!finished) onwriteDrain(stream, state);
  72344. state.pendingcb--;
  72345. cb();
  72346. finishMaybe(stream, state);
  72347. } // Must force callback to be called on nextTick, so that we don't
  72348. // emit 'drain' before the write() consumer gets the 'false' return
  72349. // value, and has a chance to attach a 'drain' listener.
  72350. function onwriteDrain(stream, state) {
  72351. if (state.length === 0 && state.needDrain) {
  72352. state.needDrain = false;
  72353. stream.emit('drain');
  72354. }
  72355. } // if there's something in the buffer waiting, then process it
  72356. function clearBuffer(stream, state) {
  72357. state.bufferProcessing = true;
  72358. var entry = state.bufferedRequest;
  72359. if (stream._writev && entry && entry.next) {
  72360. // Fast case, write everything using _writev()
  72361. var l = state.bufferedRequestCount;
  72362. var buffer = new Array(l);
  72363. var holder = state.corkedRequestsFree;
  72364. holder.entry = entry;
  72365. var count = 0;
  72366. var allBuffers = true;
  72367. while (entry) {
  72368. buffer[count] = entry;
  72369. if (!entry.isBuf) allBuffers = false;
  72370. entry = entry.next;
  72371. count += 1;
  72372. }
  72373. buffer.allBuffers = allBuffers;
  72374. doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time
  72375. // as the hot path ends with doWrite
  72376. state.pendingcb++;
  72377. state.lastBufferedRequest = null;
  72378. if (holder.next) {
  72379. state.corkedRequestsFree = holder.next;
  72380. holder.next = null;
  72381. } else {
  72382. state.corkedRequestsFree = new CorkedRequest(state);
  72383. }
  72384. state.bufferedRequestCount = 0;
  72385. } else {
  72386. // Slow case, write chunks one-by-one
  72387. while (entry) {
  72388. var chunk = entry.chunk;
  72389. var encoding = entry.encoding;
  72390. var cb = entry.callback;
  72391. var len = state.objectMode ? 1 : chunk.length;
  72392. doWrite(stream, state, false, len, chunk, encoding, cb);
  72393. entry = entry.next;
  72394. state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then
  72395. // it means that we need to wait until it does.
  72396. // also, that means that the chunk and cb are currently
  72397. // being processed, so move the buffer counter past them.
  72398. if (state.writing) {
  72399. break;
  72400. }
  72401. }
  72402. if (entry === null) state.lastBufferedRequest = null;
  72403. }
  72404. state.bufferedRequest = entry;
  72405. state.bufferProcessing = false;
  72406. }
  72407. Writable.prototype._write = function (chunk, encoding, cb) {
  72408. cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
  72409. };
  72410. Writable.prototype._writev = null;
  72411. Writable.prototype.end = function (chunk, encoding, cb) {
  72412. var state = this._writableState;
  72413. if (typeof chunk === 'function') {
  72414. cb = chunk;
  72415. chunk = null;
  72416. encoding = null;
  72417. } else if (typeof encoding === 'function') {
  72418. cb = encoding;
  72419. encoding = null;
  72420. }
  72421. if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks
  72422. if (state.corked) {
  72423. state.corked = 1;
  72424. this.uncork();
  72425. } // ignore unnecessary end() calls.
  72426. if (!state.ending) endWritable(this, state, cb);
  72427. return this;
  72428. };
  72429. Object.defineProperty(Writable.prototype, 'writableLength', {
  72430. // making it explicit this property is not enumerable
  72431. // because otherwise some prototype manipulation in
  72432. // userland will fail
  72433. enumerable: false,
  72434. get: function get() {
  72435. return this._writableState.length;
  72436. }
  72437. });
  72438. function needFinish(state) {
  72439. return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
  72440. }
  72441. function callFinal(stream, state) {
  72442. stream._final(function (err) {
  72443. state.pendingcb--;
  72444. if (err) {
  72445. errorOrDestroy(stream, err);
  72446. }
  72447. state.prefinished = true;
  72448. stream.emit('prefinish');
  72449. finishMaybe(stream, state);
  72450. });
  72451. }
  72452. function prefinish(stream, state) {
  72453. if (!state.prefinished && !state.finalCalled) {
  72454. if (typeof stream._final === 'function' && !state.destroyed) {
  72455. state.pendingcb++;
  72456. state.finalCalled = true;
  72457. process.nextTick(callFinal, stream, state);
  72458. } else {
  72459. state.prefinished = true;
  72460. stream.emit('prefinish');
  72461. }
  72462. }
  72463. }
  72464. function finishMaybe(stream, state) {
  72465. var need = needFinish(state);
  72466. if (need) {
  72467. prefinish(stream, state);
  72468. if (state.pendingcb === 0) {
  72469. state.finished = true;
  72470. stream.emit('finish');
  72471. if (state.autoDestroy) {
  72472. // In case of duplex streams we need a way to detect
  72473. // if the readable side is ready for autoDestroy as well
  72474. var rState = stream._readableState;
  72475. if (!rState || rState.autoDestroy && rState.endEmitted) {
  72476. stream.destroy();
  72477. }
  72478. }
  72479. }
  72480. }
  72481. return need;
  72482. }
  72483. function endWritable(stream, state, cb) {
  72484. state.ending = true;
  72485. finishMaybe(stream, state);
  72486. if (cb) {
  72487. if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
  72488. }
  72489. state.ended = true;
  72490. stream.writable = false;
  72491. }
  72492. function onCorkedFinish(corkReq, state, err) {
  72493. var entry = corkReq.entry;
  72494. corkReq.entry = null;
  72495. while (entry) {
  72496. var cb = entry.callback;
  72497. state.pendingcb--;
  72498. cb(err);
  72499. entry = entry.next;
  72500. } // reuse the free corkReq.
  72501. state.corkedRequestsFree.next = corkReq;
  72502. }
  72503. Object.defineProperty(Writable.prototype, 'destroyed', {
  72504. // making it explicit this property is not enumerable
  72505. // because otherwise some prototype manipulation in
  72506. // userland will fail
  72507. enumerable: false,
  72508. get: function get() {
  72509. if (this._writableState === undefined) {
  72510. return false;
  72511. }
  72512. return this._writableState.destroyed;
  72513. },
  72514. set: function set(value) {
  72515. // we ignore the value if the stream
  72516. // has not been initialized yet
  72517. if (!this._writableState) {
  72518. return;
  72519. } // backward compatibility, the user is explicitly
  72520. // managing destroyed
  72521. this._writableState.destroyed = value;
  72522. }
  72523. });
  72524. Writable.prototype.destroy = destroyImpl.destroy;
  72525. Writable.prototype._undestroy = destroyImpl.undestroy;
  72526. Writable.prototype._destroy = function (err, cb) {
  72527. cb(err);
  72528. };
  72529. /***/ }),
  72530. /***/ 45850:
  72531. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  72532. "use strict";
  72533. /* provided dependency */ var process = __webpack_require__(34155);
  72534. var _Object$setPrototypeO;
  72535. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  72536. var finished = __webpack_require__(8610);
  72537. var kLastResolve = Symbol('lastResolve');
  72538. var kLastReject = Symbol('lastReject');
  72539. var kError = Symbol('error');
  72540. var kEnded = Symbol('ended');
  72541. var kLastPromise = Symbol('lastPromise');
  72542. var kHandlePromise = Symbol('handlePromise');
  72543. var kStream = Symbol('stream');
  72544. function createIterResult(value, done) {
  72545. return {
  72546. value: value,
  72547. done: done
  72548. };
  72549. }
  72550. function readAndResolve(iter) {
  72551. var resolve = iter[kLastResolve];
  72552. if (resolve !== null) {
  72553. var data = iter[kStream].read(); // we defer if data is null
  72554. // we can be expecting either 'end' or
  72555. // 'error'
  72556. if (data !== null) {
  72557. iter[kLastPromise] = null;
  72558. iter[kLastResolve] = null;
  72559. iter[kLastReject] = null;
  72560. resolve(createIterResult(data, false));
  72561. }
  72562. }
  72563. }
  72564. function onReadable(iter) {
  72565. // we wait for the next tick, because it might
  72566. // emit an error with process.nextTick
  72567. process.nextTick(readAndResolve, iter);
  72568. }
  72569. function wrapForNext(lastPromise, iter) {
  72570. return function (resolve, reject) {
  72571. lastPromise.then(function () {
  72572. if (iter[kEnded]) {
  72573. resolve(createIterResult(undefined, true));
  72574. return;
  72575. }
  72576. iter[kHandlePromise](resolve, reject);
  72577. }, reject);
  72578. };
  72579. }
  72580. var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
  72581. var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
  72582. get stream() {
  72583. return this[kStream];
  72584. },
  72585. next: function next() {
  72586. var _this = this;
  72587. // if we have detected an error in the meanwhile
  72588. // reject straight away
  72589. var error = this[kError];
  72590. if (error !== null) {
  72591. return Promise.reject(error);
  72592. }
  72593. if (this[kEnded]) {
  72594. return Promise.resolve(createIterResult(undefined, true));
  72595. }
  72596. if (this[kStream].destroyed) {
  72597. // We need to defer via nextTick because if .destroy(err) is
  72598. // called, the error will be emitted via nextTick, and
  72599. // we cannot guarantee that there is no error lingering around
  72600. // waiting to be emitted.
  72601. return new Promise(function (resolve, reject) {
  72602. process.nextTick(function () {
  72603. if (_this[kError]) {
  72604. reject(_this[kError]);
  72605. } else {
  72606. resolve(createIterResult(undefined, true));
  72607. }
  72608. });
  72609. });
  72610. } // if we have multiple next() calls
  72611. // we will wait for the previous Promise to finish
  72612. // this logic is optimized to support for await loops,
  72613. // where next() is only called once at a time
  72614. var lastPromise = this[kLastPromise];
  72615. var promise;
  72616. if (lastPromise) {
  72617. promise = new Promise(wrapForNext(lastPromise, this));
  72618. } else {
  72619. // fast path needed to support multiple this.push()
  72620. // without triggering the next() queue
  72621. var data = this[kStream].read();
  72622. if (data !== null) {
  72623. return Promise.resolve(createIterResult(data, false));
  72624. }
  72625. promise = new Promise(this[kHandlePromise]);
  72626. }
  72627. this[kLastPromise] = promise;
  72628. return promise;
  72629. }
  72630. }, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
  72631. return this;
  72632. }), _defineProperty(_Object$setPrototypeO, "return", function _return() {
  72633. var _this2 = this;
  72634. // destroy(err, cb) is a private API
  72635. // we can guarantee we have that here, because we control the
  72636. // Readable class this is attached to
  72637. return new Promise(function (resolve, reject) {
  72638. _this2[kStream].destroy(null, function (err) {
  72639. if (err) {
  72640. reject(err);
  72641. return;
  72642. }
  72643. resolve(createIterResult(undefined, true));
  72644. });
  72645. });
  72646. }), _Object$setPrototypeO), AsyncIteratorPrototype);
  72647. var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
  72648. var _Object$create;
  72649. var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
  72650. value: stream,
  72651. writable: true
  72652. }), _defineProperty(_Object$create, kLastResolve, {
  72653. value: null,
  72654. writable: true
  72655. }), _defineProperty(_Object$create, kLastReject, {
  72656. value: null,
  72657. writable: true
  72658. }), _defineProperty(_Object$create, kError, {
  72659. value: null,
  72660. writable: true
  72661. }), _defineProperty(_Object$create, kEnded, {
  72662. value: stream._readableState.endEmitted,
  72663. writable: true
  72664. }), _defineProperty(_Object$create, kHandlePromise, {
  72665. value: function value(resolve, reject) {
  72666. var data = iterator[kStream].read();
  72667. if (data) {
  72668. iterator[kLastPromise] = null;
  72669. iterator[kLastResolve] = null;
  72670. iterator[kLastReject] = null;
  72671. resolve(createIterResult(data, false));
  72672. } else {
  72673. iterator[kLastResolve] = resolve;
  72674. iterator[kLastReject] = reject;
  72675. }
  72676. },
  72677. writable: true
  72678. }), _Object$create));
  72679. iterator[kLastPromise] = null;
  72680. finished(stream, function (err) {
  72681. if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
  72682. var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise
  72683. // returned by next() and store the error
  72684. if (reject !== null) {
  72685. iterator[kLastPromise] = null;
  72686. iterator[kLastResolve] = null;
  72687. iterator[kLastReject] = null;
  72688. reject(err);
  72689. }
  72690. iterator[kError] = err;
  72691. return;
  72692. }
  72693. var resolve = iterator[kLastResolve];
  72694. if (resolve !== null) {
  72695. iterator[kLastPromise] = null;
  72696. iterator[kLastResolve] = null;
  72697. iterator[kLastReject] = null;
  72698. resolve(createIterResult(undefined, true));
  72699. }
  72700. iterator[kEnded] = true;
  72701. });
  72702. stream.on('readable', onReadable.bind(null, iterator));
  72703. return iterator;
  72704. };
  72705. module.exports = createReadableStreamAsyncIterator;
  72706. /***/ }),
  72707. /***/ 57327:
  72708. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  72709. "use strict";
  72710. function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
  72711. function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
  72712. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  72713. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  72714. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  72715. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  72716. var _require = __webpack_require__(48764),
  72717. Buffer = _require.Buffer;
  72718. var _require2 = __webpack_require__(52361),
  72719. inspect = _require2.inspect;
  72720. var custom = inspect && inspect.custom || 'inspect';
  72721. function copyBuffer(src, target, offset) {
  72722. Buffer.prototype.copy.call(src, target, offset);
  72723. }
  72724. module.exports =
  72725. /*#__PURE__*/
  72726. function () {
  72727. function BufferList() {
  72728. _classCallCheck(this, BufferList);
  72729. this.head = null;
  72730. this.tail = null;
  72731. this.length = 0;
  72732. }
  72733. _createClass(BufferList, [{
  72734. key: "push",
  72735. value: function push(v) {
  72736. var entry = {
  72737. data: v,
  72738. next: null
  72739. };
  72740. if (this.length > 0) this.tail.next = entry;else this.head = entry;
  72741. this.tail = entry;
  72742. ++this.length;
  72743. }
  72744. }, {
  72745. key: "unshift",
  72746. value: function unshift(v) {
  72747. var entry = {
  72748. data: v,
  72749. next: this.head
  72750. };
  72751. if (this.length === 0) this.tail = entry;
  72752. this.head = entry;
  72753. ++this.length;
  72754. }
  72755. }, {
  72756. key: "shift",
  72757. value: function shift() {
  72758. if (this.length === 0) return;
  72759. var ret = this.head.data;
  72760. if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
  72761. --this.length;
  72762. return ret;
  72763. }
  72764. }, {
  72765. key: "clear",
  72766. value: function clear() {
  72767. this.head = this.tail = null;
  72768. this.length = 0;
  72769. }
  72770. }, {
  72771. key: "join",
  72772. value: function join(s) {
  72773. if (this.length === 0) return '';
  72774. var p = this.head;
  72775. var ret = '' + p.data;
  72776. while (p = p.next) {
  72777. ret += s + p.data;
  72778. }
  72779. return ret;
  72780. }
  72781. }, {
  72782. key: "concat",
  72783. value: function concat(n) {
  72784. if (this.length === 0) return Buffer.alloc(0);
  72785. var ret = Buffer.allocUnsafe(n >>> 0);
  72786. var p = this.head;
  72787. var i = 0;
  72788. while (p) {
  72789. copyBuffer(p.data, ret, i);
  72790. i += p.data.length;
  72791. p = p.next;
  72792. }
  72793. return ret;
  72794. } // Consumes a specified amount of bytes or characters from the buffered data.
  72795. }, {
  72796. key: "consume",
  72797. value: function consume(n, hasStrings) {
  72798. var ret;
  72799. if (n < this.head.data.length) {
  72800. // `slice` is the same for buffers and strings.
  72801. ret = this.head.data.slice(0, n);
  72802. this.head.data = this.head.data.slice(n);
  72803. } else if (n === this.head.data.length) {
  72804. // First chunk is a perfect match.
  72805. ret = this.shift();
  72806. } else {
  72807. // Result spans more than one buffer.
  72808. ret = hasStrings ? this._getString(n) : this._getBuffer(n);
  72809. }
  72810. return ret;
  72811. }
  72812. }, {
  72813. key: "first",
  72814. value: function first() {
  72815. return this.head.data;
  72816. } // Consumes a specified amount of characters from the buffered data.
  72817. }, {
  72818. key: "_getString",
  72819. value: function _getString(n) {
  72820. var p = this.head;
  72821. var c = 1;
  72822. var ret = p.data;
  72823. n -= ret.length;
  72824. while (p = p.next) {
  72825. var str = p.data;
  72826. var nb = n > str.length ? str.length : n;
  72827. if (nb === str.length) ret += str;else ret += str.slice(0, n);
  72828. n -= nb;
  72829. if (n === 0) {
  72830. if (nb === str.length) {
  72831. ++c;
  72832. if (p.next) this.head = p.next;else this.head = this.tail = null;
  72833. } else {
  72834. this.head = p;
  72835. p.data = str.slice(nb);
  72836. }
  72837. break;
  72838. }
  72839. ++c;
  72840. }
  72841. this.length -= c;
  72842. return ret;
  72843. } // Consumes a specified amount of bytes from the buffered data.
  72844. }, {
  72845. key: "_getBuffer",
  72846. value: function _getBuffer(n) {
  72847. var ret = Buffer.allocUnsafe(n);
  72848. var p = this.head;
  72849. var c = 1;
  72850. p.data.copy(ret);
  72851. n -= p.data.length;
  72852. while (p = p.next) {
  72853. var buf = p.data;
  72854. var nb = n > buf.length ? buf.length : n;
  72855. buf.copy(ret, ret.length - n, 0, nb);
  72856. n -= nb;
  72857. if (n === 0) {
  72858. if (nb === buf.length) {
  72859. ++c;
  72860. if (p.next) this.head = p.next;else this.head = this.tail = null;
  72861. } else {
  72862. this.head = p;
  72863. p.data = buf.slice(nb);
  72864. }
  72865. break;
  72866. }
  72867. ++c;
  72868. }
  72869. this.length -= c;
  72870. return ret;
  72871. } // Make sure the linked list only shows the minimal necessary information.
  72872. }, {
  72873. key: custom,
  72874. value: function value(_, options) {
  72875. return inspect(this, _objectSpread({}, options, {
  72876. // Only inspect one level.
  72877. depth: 0,
  72878. // It should not recurse.
  72879. customInspect: false
  72880. }));
  72881. }
  72882. }]);
  72883. return BufferList;
  72884. }();
  72885. /***/ }),
  72886. /***/ 61195:
  72887. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  72888. "use strict";
  72889. /* provided dependency */ var process = __webpack_require__(34155);
  72890. // undocumented cb() API, needed for core, not for public API
  72891. function destroy(err, cb) {
  72892. var _this = this;
  72893. var readableDestroyed = this._readableState && this._readableState.destroyed;
  72894. var writableDestroyed = this._writableState && this._writableState.destroyed;
  72895. if (readableDestroyed || writableDestroyed) {
  72896. if (cb) {
  72897. cb(err);
  72898. } else if (err) {
  72899. if (!this._writableState) {
  72900. process.nextTick(emitErrorNT, this, err);
  72901. } else if (!this._writableState.errorEmitted) {
  72902. this._writableState.errorEmitted = true;
  72903. process.nextTick(emitErrorNT, this, err);
  72904. }
  72905. }
  72906. return this;
  72907. } // we set destroyed to true before firing error callbacks in order
  72908. // to make it re-entrance safe in case destroy() is called within callbacks
  72909. if (this._readableState) {
  72910. this._readableState.destroyed = true;
  72911. } // if this is a duplex stream mark the writable part as destroyed as well
  72912. if (this._writableState) {
  72913. this._writableState.destroyed = true;
  72914. }
  72915. this._destroy(err || null, function (err) {
  72916. if (!cb && err) {
  72917. if (!_this._writableState) {
  72918. process.nextTick(emitErrorAndCloseNT, _this, err);
  72919. } else if (!_this._writableState.errorEmitted) {
  72920. _this._writableState.errorEmitted = true;
  72921. process.nextTick(emitErrorAndCloseNT, _this, err);
  72922. } else {
  72923. process.nextTick(emitCloseNT, _this);
  72924. }
  72925. } else if (cb) {
  72926. process.nextTick(emitCloseNT, _this);
  72927. cb(err);
  72928. } else {
  72929. process.nextTick(emitCloseNT, _this);
  72930. }
  72931. });
  72932. return this;
  72933. }
  72934. function emitErrorAndCloseNT(self, err) {
  72935. emitErrorNT(self, err);
  72936. emitCloseNT(self);
  72937. }
  72938. function emitCloseNT(self) {
  72939. if (self._writableState && !self._writableState.emitClose) return;
  72940. if (self._readableState && !self._readableState.emitClose) return;
  72941. self.emit('close');
  72942. }
  72943. function undestroy() {
  72944. if (this._readableState) {
  72945. this._readableState.destroyed = false;
  72946. this._readableState.reading = false;
  72947. this._readableState.ended = false;
  72948. this._readableState.endEmitted = false;
  72949. }
  72950. if (this._writableState) {
  72951. this._writableState.destroyed = false;
  72952. this._writableState.ended = false;
  72953. this._writableState.ending = false;
  72954. this._writableState.finalCalled = false;
  72955. this._writableState.prefinished = false;
  72956. this._writableState.finished = false;
  72957. this._writableState.errorEmitted = false;
  72958. }
  72959. }
  72960. function emitErrorNT(self, err) {
  72961. self.emit('error', err);
  72962. }
  72963. function errorOrDestroy(stream, err) {
  72964. // We have tests that rely on errors being emitted
  72965. // in the same tick, so changing this is semver major.
  72966. // For now when you opt-in to autoDestroy we allow
  72967. // the error to be emitted nextTick. In a future
  72968. // semver major update we should change the default to this.
  72969. var rState = stream._readableState;
  72970. var wState = stream._writableState;
  72971. if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);
  72972. }
  72973. module.exports = {
  72974. destroy: destroy,
  72975. undestroy: undestroy,
  72976. errorOrDestroy: errorOrDestroy
  72977. };
  72978. /***/ }),
  72979. /***/ 8610:
  72980. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  72981. "use strict";
  72982. // Ported from https://github.com/mafintosh/end-of-stream with
  72983. // permission from the author, Mathias Buus (@mafintosh).
  72984. var ERR_STREAM_PREMATURE_CLOSE = (__webpack_require__(94281)/* .codes.ERR_STREAM_PREMATURE_CLOSE */ .q.ERR_STREAM_PREMATURE_CLOSE);
  72985. function once(callback) {
  72986. var called = false;
  72987. return function () {
  72988. if (called) return;
  72989. called = true;
  72990. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  72991. args[_key] = arguments[_key];
  72992. }
  72993. callback.apply(this, args);
  72994. };
  72995. }
  72996. function noop() {}
  72997. function isRequest(stream) {
  72998. return stream.setHeader && typeof stream.abort === 'function';
  72999. }
  73000. function eos(stream, opts, callback) {
  73001. if (typeof opts === 'function') return eos(stream, null, opts);
  73002. if (!opts) opts = {};
  73003. callback = once(callback || noop);
  73004. var readable = opts.readable || opts.readable !== false && stream.readable;
  73005. var writable = opts.writable || opts.writable !== false && stream.writable;
  73006. var onlegacyfinish = function onlegacyfinish() {
  73007. if (!stream.writable) onfinish();
  73008. };
  73009. var writableEnded = stream._writableState && stream._writableState.finished;
  73010. var onfinish = function onfinish() {
  73011. writable = false;
  73012. writableEnded = true;
  73013. if (!readable) callback.call(stream);
  73014. };
  73015. var readableEnded = stream._readableState && stream._readableState.endEmitted;
  73016. var onend = function onend() {
  73017. readable = false;
  73018. readableEnded = true;
  73019. if (!writable) callback.call(stream);
  73020. };
  73021. var onerror = function onerror(err) {
  73022. callback.call(stream, err);
  73023. };
  73024. var onclose = function onclose() {
  73025. var err;
  73026. if (readable && !readableEnded) {
  73027. if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
  73028. return callback.call(stream, err);
  73029. }
  73030. if (writable && !writableEnded) {
  73031. if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
  73032. return callback.call(stream, err);
  73033. }
  73034. };
  73035. var onrequest = function onrequest() {
  73036. stream.req.on('finish', onfinish);
  73037. };
  73038. if (isRequest(stream)) {
  73039. stream.on('complete', onfinish);
  73040. stream.on('abort', onclose);
  73041. if (stream.req) onrequest();else stream.on('request', onrequest);
  73042. } else if (writable && !stream._writableState) {
  73043. // legacy streams
  73044. stream.on('end', onlegacyfinish);
  73045. stream.on('close', onlegacyfinish);
  73046. }
  73047. stream.on('end', onend);
  73048. stream.on('finish', onfinish);
  73049. if (opts.error !== false) stream.on('error', onerror);
  73050. stream.on('close', onclose);
  73051. return function () {
  73052. stream.removeListener('complete', onfinish);
  73053. stream.removeListener('abort', onclose);
  73054. stream.removeListener('request', onrequest);
  73055. if (stream.req) stream.req.removeListener('finish', onfinish);
  73056. stream.removeListener('end', onlegacyfinish);
  73057. stream.removeListener('close', onlegacyfinish);
  73058. stream.removeListener('finish', onfinish);
  73059. stream.removeListener('end', onend);
  73060. stream.removeListener('error', onerror);
  73061. stream.removeListener('close', onclose);
  73062. };
  73063. }
  73064. module.exports = eos;
  73065. /***/ }),
  73066. /***/ 15167:
  73067. /***/ ((module) => {
  73068. module.exports = function () {
  73069. throw new Error('Readable.from is not available in the browser')
  73070. };
  73071. /***/ }),
  73072. /***/ 59946:
  73073. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  73074. "use strict";
  73075. // Ported from https://github.com/mafintosh/pump with
  73076. // permission from the author, Mathias Buus (@mafintosh).
  73077. var eos;
  73078. function once(callback) {
  73079. var called = false;
  73080. return function () {
  73081. if (called) return;
  73082. called = true;
  73083. callback.apply(void 0, arguments);
  73084. };
  73085. }
  73086. var _require$codes = (__webpack_require__(94281)/* .codes */ .q),
  73087. ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,
  73088. ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
  73089. function noop(err) {
  73090. // Rethrow the error if it exists to avoid swallowing it
  73091. if (err) throw err;
  73092. }
  73093. function isRequest(stream) {
  73094. return stream.setHeader && typeof stream.abort === 'function';
  73095. }
  73096. function destroyer(stream, reading, writing, callback) {
  73097. callback = once(callback);
  73098. var closed = false;
  73099. stream.on('close', function () {
  73100. closed = true;
  73101. });
  73102. if (eos === undefined) eos = __webpack_require__(8610);
  73103. eos(stream, {
  73104. readable: reading,
  73105. writable: writing
  73106. }, function (err) {
  73107. if (err) return callback(err);
  73108. closed = true;
  73109. callback();
  73110. });
  73111. var destroyed = false;
  73112. return function (err) {
  73113. if (closed) return;
  73114. if (destroyed) return;
  73115. destroyed = true; // request.destroy just do .end - .abort is what we want
  73116. if (isRequest(stream)) return stream.abort();
  73117. if (typeof stream.destroy === 'function') return stream.destroy();
  73118. callback(err || new ERR_STREAM_DESTROYED('pipe'));
  73119. };
  73120. }
  73121. function call(fn) {
  73122. fn();
  73123. }
  73124. function pipe(from, to) {
  73125. return from.pipe(to);
  73126. }
  73127. function popCallback(streams) {
  73128. if (!streams.length) return noop;
  73129. if (typeof streams[streams.length - 1] !== 'function') return noop;
  73130. return streams.pop();
  73131. }
  73132. function pipeline() {
  73133. for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
  73134. streams[_key] = arguments[_key];
  73135. }
  73136. var callback = popCallback(streams);
  73137. if (Array.isArray(streams[0])) streams = streams[0];
  73138. if (streams.length < 2) {
  73139. throw new ERR_MISSING_ARGS('streams');
  73140. }
  73141. var error;
  73142. var destroys = streams.map(function (stream, i) {
  73143. var reading = i < streams.length - 1;
  73144. var writing = i > 0;
  73145. return destroyer(stream, reading, writing, function (err) {
  73146. if (!error) error = err;
  73147. if (err) destroys.forEach(call);
  73148. if (reading) return;
  73149. destroys.forEach(call);
  73150. callback(error);
  73151. });
  73152. });
  73153. return streams.reduce(pipe);
  73154. }
  73155. module.exports = pipeline;
  73156. /***/ }),
  73157. /***/ 82457:
  73158. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  73159. "use strict";
  73160. var ERR_INVALID_OPT_VALUE = (__webpack_require__(94281)/* .codes.ERR_INVALID_OPT_VALUE */ .q.ERR_INVALID_OPT_VALUE);
  73161. function highWaterMarkFrom(options, isDuplex, duplexKey) {
  73162. return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
  73163. }
  73164. function getHighWaterMark(state, options, duplexKey, isDuplex) {
  73165. var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);
  73166. if (hwm != null) {
  73167. if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
  73168. var name = isDuplex ? duplexKey : 'highWaterMark';
  73169. throw new ERR_INVALID_OPT_VALUE(name, hwm);
  73170. }
  73171. return Math.floor(hwm);
  73172. } // Default value
  73173. return state.objectMode ? 16 : 16 * 1024;
  73174. }
  73175. module.exports = {
  73176. getHighWaterMark: getHighWaterMark
  73177. };
  73178. /***/ }),
  73179. /***/ 22503:
  73180. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  73181. module.exports = __webpack_require__(17187).EventEmitter;
  73182. /***/ }),
  73183. /***/ 88473:
  73184. /***/ ((module, exports, __webpack_require__) => {
  73185. exports = module.exports = __webpack_require__(79481);
  73186. exports.Stream = exports;
  73187. exports.Readable = exports;
  73188. exports.Writable = __webpack_require__(64229);
  73189. exports.Duplex = __webpack_require__(56753);
  73190. exports.Transform = __webpack_require__(74605);
  73191. exports.PassThrough = __webpack_require__(82725);
  73192. exports.finished = __webpack_require__(8610);
  73193. exports.pipeline = __webpack_require__(59946);
  73194. /***/ }),
  73195. /***/ 79785:
  73196. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  73197. "use strict";
  73198. var Buffer = (__webpack_require__(48764).Buffer)
  73199. var inherits = __webpack_require__(35717)
  73200. var HashBase = __webpack_require__(3349)
  73201. var ARRAY16 = new Array(16)
  73202. var zl = [
  73203. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  73204. 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
  73205. 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
  73206. 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
  73207. 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
  73208. ]
  73209. var zr = [
  73210. 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
  73211. 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
  73212. 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
  73213. 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
  73214. 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
  73215. ]
  73216. var sl = [
  73217. 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
  73218. 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
  73219. 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
  73220. 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
  73221. 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
  73222. ]
  73223. var sr = [
  73224. 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
  73225. 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
  73226. 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
  73227. 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
  73228. 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
  73229. ]
  73230. var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]
  73231. var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]
  73232. function RIPEMD160 () {
  73233. HashBase.call(this, 64)
  73234. // state
  73235. this._a = 0x67452301
  73236. this._b = 0xefcdab89
  73237. this._c = 0x98badcfe
  73238. this._d = 0x10325476
  73239. this._e = 0xc3d2e1f0
  73240. }
  73241. inherits(RIPEMD160, HashBase)
  73242. RIPEMD160.prototype._update = function () {
  73243. var words = ARRAY16
  73244. for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)
  73245. var al = this._a | 0
  73246. var bl = this._b | 0
  73247. var cl = this._c | 0
  73248. var dl = this._d | 0
  73249. var el = this._e | 0
  73250. var ar = this._a | 0
  73251. var br = this._b | 0
  73252. var cr = this._c | 0
  73253. var dr = this._d | 0
  73254. var er = this._e | 0
  73255. // computation
  73256. for (var i = 0; i < 80; i += 1) {
  73257. var tl
  73258. var tr
  73259. if (i < 16) {
  73260. tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])
  73261. tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])
  73262. } else if (i < 32) {
  73263. tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])
  73264. tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])
  73265. } else if (i < 48) {
  73266. tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])
  73267. tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])
  73268. } else if (i < 64) {
  73269. tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])
  73270. tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])
  73271. } else { // if (i<80) {
  73272. tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])
  73273. tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])
  73274. }
  73275. al = el
  73276. el = dl
  73277. dl = rotl(cl, 10)
  73278. cl = bl
  73279. bl = tl
  73280. ar = er
  73281. er = dr
  73282. dr = rotl(cr, 10)
  73283. cr = br
  73284. br = tr
  73285. }
  73286. // update state
  73287. var t = (this._b + cl + dr) | 0
  73288. this._b = (this._c + dl + er) | 0
  73289. this._c = (this._d + el + ar) | 0
  73290. this._d = (this._e + al + br) | 0
  73291. this._e = (this._a + bl + cr) | 0
  73292. this._a = t
  73293. }
  73294. RIPEMD160.prototype._digest = function () {
  73295. // create padding and handle blocks
  73296. this._block[this._blockOffset++] = 0x80
  73297. if (this._blockOffset > 56) {
  73298. this._block.fill(0, this._blockOffset, 64)
  73299. this._update()
  73300. this._blockOffset = 0
  73301. }
  73302. this._block.fill(0, this._blockOffset, 56)
  73303. this._block.writeUInt32LE(this._length[0], 56)
  73304. this._block.writeUInt32LE(this._length[1], 60)
  73305. this._update()
  73306. // produce result
  73307. var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)
  73308. buffer.writeInt32LE(this._a, 0)
  73309. buffer.writeInt32LE(this._b, 4)
  73310. buffer.writeInt32LE(this._c, 8)
  73311. buffer.writeInt32LE(this._d, 12)
  73312. buffer.writeInt32LE(this._e, 16)
  73313. return buffer
  73314. }
  73315. function rotl (x, n) {
  73316. return (x << n) | (x >>> (32 - n))
  73317. }
  73318. function fn1 (a, b, c, d, e, m, k, s) {
  73319. return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
  73320. }
  73321. function fn2 (a, b, c, d, e, m, k, s) {
  73322. return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
  73323. }
  73324. function fn3 (a, b, c, d, e, m, k, s) {
  73325. return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
  73326. }
  73327. function fn4 (a, b, c, d, e, m, k, s) {
  73328. return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
  73329. }
  73330. function fn5 (a, b, c, d, e, m, k, s) {
  73331. return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
  73332. }
  73333. module.exports = RIPEMD160
  73334. /***/ }),
  73335. /***/ 88914:
  73336. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  73337. "use strict";
  73338. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  73339. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  73340. if (k2 === undefined) k2 = k;
  73341. var desc = Object.getOwnPropertyDescriptor(m, k);
  73342. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  73343. desc = { enumerable: true, get: function() { return m[k]; } };
  73344. }
  73345. Object.defineProperty(o, k2, desc);
  73346. }) : (function(o, m, k, k2) {
  73347. if (k2 === undefined) k2 = k;
  73348. o[k2] = m[k];
  73349. }));
  73350. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  73351. Object.defineProperty(o, "default", { enumerable: true, value: v });
  73352. }) : function(o, v) {
  73353. o["default"] = v;
  73354. });
  73355. var __importStar = (this && this.__importStar) || function (mod) {
  73356. if (mod && mod.__esModule) return mod;
  73357. var result = {};
  73358. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  73359. __setModuleDefault(result, mod);
  73360. return result;
  73361. };
  73362. Object.defineProperty(exports, "__esModule", ({ value: true }));
  73363. exports.isValidXAddress = exports.decodeXAddress = exports.xAddressToClassicAddress = exports.encodeXAddress = exports.classicAddressToXAddress = exports.isValidClassicAddress = exports.decodeAccountPublic = exports.encodeAccountPublic = exports.decodeNodePublic = exports.encodeNodePublic = exports.decodeAccountID = exports.encodeAccountID = exports.decodeSeed = exports.encodeSeed = exports.codec = void 0;
  73364. const assert = __importStar(__webpack_require__(69282));
  73365. const xrp_codec_1 = __webpack_require__(18537);
  73366. Object.defineProperty(exports, "codec", ({ enumerable: true, get: function () { return xrp_codec_1.codec; } }));
  73367. Object.defineProperty(exports, "encodeSeed", ({ enumerable: true, get: function () { return xrp_codec_1.encodeSeed; } }));
  73368. Object.defineProperty(exports, "decodeSeed", ({ enumerable: true, get: function () { return xrp_codec_1.decodeSeed; } }));
  73369. Object.defineProperty(exports, "encodeAccountID", ({ enumerable: true, get: function () { return xrp_codec_1.encodeAccountID; } }));
  73370. Object.defineProperty(exports, "decodeAccountID", ({ enumerable: true, get: function () { return xrp_codec_1.decodeAccountID; } }));
  73371. Object.defineProperty(exports, "encodeNodePublic", ({ enumerable: true, get: function () { return xrp_codec_1.encodeNodePublic; } }));
  73372. Object.defineProperty(exports, "decodeNodePublic", ({ enumerable: true, get: function () { return xrp_codec_1.decodeNodePublic; } }));
  73373. Object.defineProperty(exports, "encodeAccountPublic", ({ enumerable: true, get: function () { return xrp_codec_1.encodeAccountPublic; } }));
  73374. Object.defineProperty(exports, "decodeAccountPublic", ({ enumerable: true, get: function () { return xrp_codec_1.decodeAccountPublic; } }));
  73375. Object.defineProperty(exports, "isValidClassicAddress", ({ enumerable: true, get: function () { return xrp_codec_1.isValidClassicAddress; } }));
  73376. const PREFIX_BYTES = {
  73377. // 5, 68
  73378. main: Buffer.from([0x05, 0x44]),
  73379. // 4, 147
  73380. test: Buffer.from([0x04, 0x93]),
  73381. };
  73382. const MAX_32_BIT_UNSIGNED_INT = 4294967295;
  73383. function classicAddressToXAddress(classicAddress, tag, test) {
  73384. const accountId = (0, xrp_codec_1.decodeAccountID)(classicAddress);
  73385. return encodeXAddress(accountId, tag, test);
  73386. }
  73387. exports.classicAddressToXAddress = classicAddressToXAddress;
  73388. function encodeXAddress(accountId, tag, test) {
  73389. if (accountId.length !== 20) {
  73390. // RIPEMD160 is 160 bits = 20 bytes
  73391. throw new Error('Account ID must be 20 bytes');
  73392. }
  73393. if (tag > MAX_32_BIT_UNSIGNED_INT) {
  73394. throw new Error('Invalid tag');
  73395. }
  73396. const theTag = tag || 0;
  73397. // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Passing null is a common js mistake
  73398. const flag = tag === false || tag == null ? 0 : 1;
  73399. /* eslint-disable no-bitwise ---
  73400. * need to use bitwise operations here */
  73401. const bytes = Buffer.concat([
  73402. test ? PREFIX_BYTES.test : PREFIX_BYTES.main,
  73403. accountId,
  73404. Buffer.from([
  73405. // 0x00 if no tag, 0x01 if 32-bit tag
  73406. flag,
  73407. // first byte
  73408. theTag & 0xff,
  73409. // second byte
  73410. (theTag >> 8) & 0xff,
  73411. // third byte
  73412. (theTag >> 16) & 0xff,
  73413. // fourth byte
  73414. (theTag >> 24) & 0xff,
  73415. 0,
  73416. 0,
  73417. 0,
  73418. // four zero bytes (reserved for 64-bit tags)
  73419. 0,
  73420. ]),
  73421. ]);
  73422. /* eslint-enable no-bitwise */
  73423. return xrp_codec_1.codec.encodeChecked(bytes);
  73424. }
  73425. exports.encodeXAddress = encodeXAddress;
  73426. function xAddressToClassicAddress(xAddress) {
  73427. /* eslint-disable @typescript-eslint/naming-convention --
  73428. * TODO 'test' should be something like 'isTest', do this later
  73429. */
  73430. const { accountId, tag, test } = decodeXAddress(xAddress);
  73431. /* eslint-enable @typescript-eslint/naming-convention */
  73432. const classicAddress = (0, xrp_codec_1.encodeAccountID)(accountId);
  73433. return {
  73434. classicAddress,
  73435. tag,
  73436. test,
  73437. };
  73438. }
  73439. exports.xAddressToClassicAddress = xAddressToClassicAddress;
  73440. function decodeXAddress(xAddress) {
  73441. const decoded = xrp_codec_1.codec.decodeChecked(xAddress);
  73442. /* eslint-disable @typescript-eslint/naming-convention --
  73443. * TODO 'test' should be something like 'isTest', do this later
  73444. */
  73445. const test = isBufferForTestAddress(decoded);
  73446. /* eslint-enable @typescript-eslint/naming-convention */
  73447. const accountId = decoded.slice(2, 22);
  73448. const tag = tagFromBuffer(decoded);
  73449. return {
  73450. accountId,
  73451. tag,
  73452. test,
  73453. };
  73454. }
  73455. exports.decodeXAddress = decodeXAddress;
  73456. function isBufferForTestAddress(buf) {
  73457. const decodedPrefix = buf.slice(0, 2);
  73458. if (PREFIX_BYTES.main.equals(decodedPrefix)) {
  73459. return false;
  73460. }
  73461. if (PREFIX_BYTES.test.equals(decodedPrefix)) {
  73462. return true;
  73463. }
  73464. throw new Error('Invalid X-address: bad prefix');
  73465. }
  73466. function tagFromBuffer(buf) {
  73467. const flag = buf[22];
  73468. if (flag >= 2) {
  73469. // No support for 64-bit tags at this time
  73470. throw new Error('Unsupported X-address');
  73471. }
  73472. if (flag === 1) {
  73473. // Little-endian to big-endian
  73474. return buf[23] + buf[24] * 0x100 + buf[25] * 0x10000 + buf[26] * 0x1000000;
  73475. }
  73476. assert.strictEqual(flag, 0, 'flag must be zero to indicate no tag');
  73477. assert.ok(Buffer.from('0000000000000000', 'hex').equals(buf.slice(23, 23 + 8)), 'remaining bytes must be zero');
  73478. return false;
  73479. }
  73480. function isValidXAddress(xAddress) {
  73481. try {
  73482. decodeXAddress(xAddress);
  73483. }
  73484. catch (_error) {
  73485. return false;
  73486. }
  73487. return true;
  73488. }
  73489. exports.isValidXAddress = isValidXAddress;
  73490. //# sourceMappingURL=index.js.map
  73491. /***/ }),
  73492. /***/ 79896:
  73493. /***/ ((__unused_webpack_module, exports) => {
  73494. "use strict";
  73495. Object.defineProperty(exports, "__esModule", ({ value: true }));
  73496. exports.concatArgs = exports.seqEqual = void 0;
  73497. /**
  73498. * Check whether two sequences (e.g. Arrays of numbers) are equal.
  73499. *
  73500. * @param arr1 - One of the arrays to compare.
  73501. * @param arr2 - The other array to compare.
  73502. */
  73503. function seqEqual(arr1, arr2) {
  73504. if (arr1.length !== arr2.length) {
  73505. return false;
  73506. }
  73507. for (let i = 0; i < arr1.length; i++) {
  73508. if (arr1[i] !== arr2[i]) {
  73509. return false;
  73510. }
  73511. }
  73512. return true;
  73513. }
  73514. exports.seqEqual = seqEqual;
  73515. /**
  73516. * Check whether a value is a sequence (e.g. Array of numbers).
  73517. *
  73518. * @param val - The value to check.
  73519. */
  73520. function isSequence(val) {
  73521. return typeof val !== 'number';
  73522. }
  73523. /**
  73524. * Concatenate all `arguments` into a single array. Each argument can be either
  73525. * a single element or a sequence, which has a `length` property and supports
  73526. * element retrieval via sequence[ix].
  73527. *
  73528. * > concatArgs(1, [2, 3], Buffer.from([4,5]), new Uint8Array([6, 7]));
  73529. * [1,2,3,4,5,6,7]
  73530. *
  73531. * @param args - Concatenate of these args into a single array.
  73532. * @returns Array of concatenated arguments
  73533. */
  73534. function concatArgs(...args) {
  73535. const ret = [];
  73536. args.forEach((arg) => {
  73537. if (isSequence(arg)) {
  73538. for (const j of arg) {
  73539. ret.push(j);
  73540. }
  73541. }
  73542. else {
  73543. ret.push(arg);
  73544. }
  73545. });
  73546. return ret;
  73547. }
  73548. exports.concatArgs = concatArgs;
  73549. //# sourceMappingURL=utils.js.map
  73550. /***/ }),
  73551. /***/ 18537:
  73552. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  73553. "use strict";
  73554. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  73555. /**
  73556. * Codec class
  73557. */
  73558. Object.defineProperty(exports, "__esModule", ({ value: true }));
  73559. exports.isValidClassicAddress = exports.decodeAccountPublic = exports.encodeAccountPublic = exports.encodeNodePublic = exports.decodeNodePublic = exports.decodeAddress = exports.decodeAccountID = exports.encodeAddress = exports.encodeAccountID = exports.decodeSeed = exports.encodeSeed = exports.codec = void 0;
  73560. const baseCodec = __webpack_require__(58162);
  73561. const createHash = __webpack_require__(23482);
  73562. const utils_1 = __webpack_require__(79896);
  73563. class Codec {
  73564. constructor(options) {
  73565. this._sha256 = options.sha256;
  73566. this._alphabet = options.alphabet;
  73567. this._codec = baseCodec(this._alphabet);
  73568. }
  73569. /**
  73570. * Encoder.
  73571. *
  73572. * @param bytes - Buffer of data to encode.
  73573. * @param opts - Options object including the version bytes and the expected length of the data to encode.
  73574. */
  73575. encode(bytes, opts) {
  73576. const versions = opts.versions;
  73577. return this._encodeVersioned(bytes, versions, opts.expectedLength);
  73578. }
  73579. /**
  73580. * Decoder.
  73581. *
  73582. * @param base58string - Base58Check-encoded string to decode.
  73583. * @param opts - Options object including the version byte(s) and the expected length of the data after decoding.
  73584. */
  73585. /* eslint-disable max-lines-per-function --
  73586. * TODO refactor */
  73587. decode(base58string, opts) {
  73588. var _a;
  73589. const versions = opts.versions;
  73590. const types = opts.versionTypes;
  73591. const withoutSum = this.decodeChecked(base58string);
  73592. if (versions.length > 1 && !opts.expectedLength) {
  73593. throw new Error('expectedLength is required because there are >= 2 possible versions');
  73594. }
  73595. const versionLengthGuess = typeof versions[0] === 'number' ? 1 : versions[0].length;
  73596. const payloadLength = (_a = opts.expectedLength) !== null && _a !== void 0 ? _a : withoutSum.length - versionLengthGuess;
  73597. const versionBytes = withoutSum.slice(0, -payloadLength);
  73598. const payload = withoutSum.slice(-payloadLength);
  73599. for (let i = 0; i < versions.length; i++) {
  73600. /* eslint-disable @typescript-eslint/consistent-type-assertions --
  73601. * TODO refactor */
  73602. const version = Array.isArray(versions[i])
  73603. ? versions[i]
  73604. : [versions[i]];
  73605. if ((0, utils_1.seqEqual)(versionBytes, version)) {
  73606. return {
  73607. version,
  73608. bytes: payload,
  73609. type: types ? types[i] : null,
  73610. };
  73611. }
  73612. /* eslint-enable @typescript-eslint/consistent-type-assertions */
  73613. }
  73614. throw new Error('version_invalid: version bytes do not match any of the provided version(s)');
  73615. }
  73616. encodeChecked(buffer) {
  73617. const check = this._sha256(this._sha256(buffer)).slice(0, 4);
  73618. return this._encodeRaw(Buffer.from((0, utils_1.concatArgs)(buffer, check)));
  73619. }
  73620. decodeChecked(base58string) {
  73621. const buffer = this._decodeRaw(base58string);
  73622. if (buffer.length < 5) {
  73623. throw new Error('invalid_input_size: decoded data must have length >= 5');
  73624. }
  73625. if (!this._verifyCheckSum(buffer)) {
  73626. throw new Error('checksum_invalid');
  73627. }
  73628. return buffer.slice(0, -4);
  73629. }
  73630. _encodeVersioned(bytes, versions, expectedLength) {
  73631. if (expectedLength && bytes.length !== expectedLength) {
  73632. throw new Error('unexpected_payload_length: bytes.length does not match expectedLength.' +
  73633. ' Ensure that the bytes are a Buffer.');
  73634. }
  73635. return this.encodeChecked(Buffer.from((0, utils_1.concatArgs)(versions, bytes)));
  73636. }
  73637. _encodeRaw(bytes) {
  73638. return this._codec.encode(bytes);
  73639. }
  73640. /* eslint-enable max-lines-per-function */
  73641. _decodeRaw(base58string) {
  73642. return this._codec.decode(base58string);
  73643. }
  73644. _verifyCheckSum(bytes) {
  73645. const computed = this._sha256(this._sha256(bytes.slice(0, -4))).slice(0, 4);
  73646. const checksum = bytes.slice(-4);
  73647. return (0, utils_1.seqEqual)(computed, checksum);
  73648. }
  73649. }
  73650. /**
  73651. * XRP codec
  73652. */
  73653. // base58 encodings: https://xrpl.org/base58-encodings.html
  73654. // Account address (20 bytes)
  73655. const ACCOUNT_ID = 0;
  73656. // Account public key (33 bytes)
  73657. const ACCOUNT_PUBLIC_KEY = 0x23;
  73658. // 33; Seed value (for secret keys) (16 bytes)
  73659. const FAMILY_SEED = 0x21;
  73660. // 28; Validation public key (33 bytes)
  73661. const NODE_PUBLIC = 0x1c;
  73662. // [1, 225, 75]
  73663. const ED25519_SEED = [0x01, 0xe1, 0x4b];
  73664. const codecOptions = {
  73665. sha256(bytes) {
  73666. return createHash('sha256').update(Buffer.from(bytes)).digest();
  73667. },
  73668. alphabet: 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz',
  73669. };
  73670. const codecWithXrpAlphabet = new Codec(codecOptions);
  73671. exports.codec = codecWithXrpAlphabet;
  73672. // entropy is a Buffer of size 16
  73673. // type is 'ed25519' or 'secp256k1'
  73674. function encodeSeed(entropy, type) {
  73675. if (entropy.length !== 16) {
  73676. throw new Error('entropy must have length 16');
  73677. }
  73678. const opts = {
  73679. expectedLength: 16,
  73680. // for secp256k1, use `FAMILY_SEED`
  73681. versions: type === 'ed25519' ? ED25519_SEED : [FAMILY_SEED],
  73682. };
  73683. // prefixes entropy with version bytes
  73684. return codecWithXrpAlphabet.encode(entropy, opts);
  73685. }
  73686. exports.encodeSeed = encodeSeed;
  73687. function decodeSeed(seed, opts = {
  73688. versionTypes: ['ed25519', 'secp256k1'],
  73689. versions: [ED25519_SEED, FAMILY_SEED],
  73690. expectedLength: 16,
  73691. }) {
  73692. return codecWithXrpAlphabet.decode(seed, opts);
  73693. }
  73694. exports.decodeSeed = decodeSeed;
  73695. function encodeAccountID(bytes) {
  73696. const opts = { versions: [ACCOUNT_ID], expectedLength: 20 };
  73697. return codecWithXrpAlphabet.encode(bytes, opts);
  73698. }
  73699. exports.encodeAccountID = encodeAccountID;
  73700. /* eslint-disable import/no-unused-modules ---
  73701. * unclear why this is aliased but we should keep it in case someone else is
  73702. * importing it with the aliased name */
  73703. exports.encodeAddress = encodeAccountID;
  73704. /* eslint-enable import/no-unused-modules */
  73705. function decodeAccountID(accountId) {
  73706. const opts = { versions: [ACCOUNT_ID], expectedLength: 20 };
  73707. return codecWithXrpAlphabet.decode(accountId, opts).bytes;
  73708. }
  73709. exports.decodeAccountID = decodeAccountID;
  73710. /* eslint-disable import/no-unused-modules ---
  73711. * unclear why this is aliased but we should keep it in case someone else is
  73712. * importing it with the aliased name */
  73713. exports.decodeAddress = decodeAccountID;
  73714. /* eslint-enable import/no-unused-modules */
  73715. function decodeNodePublic(base58string) {
  73716. const opts = { versions: [NODE_PUBLIC], expectedLength: 33 };
  73717. return codecWithXrpAlphabet.decode(base58string, opts).bytes;
  73718. }
  73719. exports.decodeNodePublic = decodeNodePublic;
  73720. function encodeNodePublic(bytes) {
  73721. const opts = { versions: [NODE_PUBLIC], expectedLength: 33 };
  73722. return codecWithXrpAlphabet.encode(bytes, opts);
  73723. }
  73724. exports.encodeNodePublic = encodeNodePublic;
  73725. function encodeAccountPublic(bytes) {
  73726. const opts = { versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33 };
  73727. return codecWithXrpAlphabet.encode(bytes, opts);
  73728. }
  73729. exports.encodeAccountPublic = encodeAccountPublic;
  73730. function decodeAccountPublic(base58string) {
  73731. const opts = { versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33 };
  73732. return codecWithXrpAlphabet.decode(base58string, opts).bytes;
  73733. }
  73734. exports.decodeAccountPublic = decodeAccountPublic;
  73735. function isValidClassicAddress(address) {
  73736. try {
  73737. decodeAccountID(address);
  73738. }
  73739. catch (_error) {
  73740. return false;
  73741. }
  73742. return true;
  73743. }
  73744. exports.isValidClassicAddress = isValidClassicAddress;
  73745. //# sourceMappingURL=xrp-codec.js.map
  73746. /***/ }),
  73747. /***/ 72509:
  73748. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  73749. "use strict";
  73750. /* eslint-disable func-style */
  73751. Object.defineProperty(exports, "__esModule", ({ value: true }));
  73752. exports.transactionID = exports.sha512Half = exports.binaryToJSON = exports.signingClaimData = exports.signingData = exports.multiSigningData = exports.readJSON = exports.serializeObject = exports.makeParser = exports.BytesList = exports.BinarySerializer = exports.BinaryParser = void 0;
  73753. const types_1 = __webpack_require__(5003);
  73754. const binary_parser_1 = __webpack_require__(46633);
  73755. Object.defineProperty(exports, "BinaryParser", ({ enumerable: true, get: function () { return binary_parser_1.BinaryParser; } }));
  73756. const hash_prefixes_1 = __webpack_require__(91771);
  73757. const binary_serializer_1 = __webpack_require__(27894);
  73758. Object.defineProperty(exports, "BinarySerializer", ({ enumerable: true, get: function () { return binary_serializer_1.BinarySerializer; } }));
  73759. Object.defineProperty(exports, "BytesList", ({ enumerable: true, get: function () { return binary_serializer_1.BytesList; } }));
  73760. const hashes_1 = __webpack_require__(89019);
  73761. Object.defineProperty(exports, "sha512Half", ({ enumerable: true, get: function () { return hashes_1.sha512Half; } }));
  73762. Object.defineProperty(exports, "transactionID", ({ enumerable: true, get: function () { return hashes_1.transactionID; } }));
  73763. const bigInt = __webpack_require__(24736);
  73764. /**
  73765. * Construct a BinaryParser
  73766. *
  73767. * @param bytes hex-string to construct BinaryParser from
  73768. * @returns A BinaryParser
  73769. */
  73770. const makeParser = (bytes) => new binary_parser_1.BinaryParser(bytes);
  73771. exports.makeParser = makeParser;
  73772. /**
  73773. * Parse BinaryParser into JSON
  73774. *
  73775. * @param parser BinaryParser object
  73776. * @returns JSON for the bytes in the BinaryParser
  73777. */
  73778. const readJSON = (parser) => parser.readType(types_1.coreTypes.STObject).toJSON();
  73779. exports.readJSON = readJSON;
  73780. /**
  73781. * Parse a hex-string into its JSON interpretation
  73782. *
  73783. * @param bytes hex-string to parse into JSON
  73784. * @returns JSON
  73785. */
  73786. const binaryToJSON = (bytes) => readJSON(makeParser(bytes));
  73787. exports.binaryToJSON = binaryToJSON;
  73788. /**
  73789. * Function to serialize JSON object representing a transaction
  73790. *
  73791. * @param object JSON object to serialize
  73792. * @param opts options for serializing, including optional prefix, suffix, and signingFieldOnly
  73793. * @returns A Buffer containing the serialized object
  73794. */
  73795. function serializeObject(object, opts = {}) {
  73796. const { prefix, suffix, signingFieldsOnly = false } = opts;
  73797. const bytesList = new binary_serializer_1.BytesList();
  73798. if (prefix) {
  73799. bytesList.put(prefix);
  73800. }
  73801. const filter = signingFieldsOnly
  73802. ? (f) => f.isSigningField
  73803. : undefined;
  73804. types_1.coreTypes.STObject.from(object, filter).toBytesSink(bytesList);
  73805. if (suffix) {
  73806. bytesList.put(suffix);
  73807. }
  73808. return bytesList.toBytes();
  73809. }
  73810. exports.serializeObject = serializeObject;
  73811. /**
  73812. * Serialize an object for signing
  73813. *
  73814. * @param transaction Transaction to serialize
  73815. * @param prefix Prefix bytes to put before the serialized object
  73816. * @returns A Buffer with the serialized object
  73817. */
  73818. function signingData(transaction, prefix = hash_prefixes_1.HashPrefix.transactionSig) {
  73819. return serializeObject(transaction, { prefix, signingFieldsOnly: true });
  73820. }
  73821. exports.signingData = signingData;
  73822. /**
  73823. * Serialize a signingClaim
  73824. *
  73825. * @param claim A claim object to serialize
  73826. * @returns the serialized object with appropriate prefix
  73827. */
  73828. function signingClaimData(claim) {
  73829. const num = bigInt(String(claim.amount));
  73830. const prefix = hash_prefixes_1.HashPrefix.paymentChannelClaim;
  73831. const channel = types_1.coreTypes.Hash256.from(claim.channel).toBytes();
  73832. const amount = types_1.coreTypes.UInt64.from(num).toBytes();
  73833. const bytesList = new binary_serializer_1.BytesList();
  73834. bytesList.put(prefix);
  73835. bytesList.put(channel);
  73836. bytesList.put(amount);
  73837. return bytesList.toBytes();
  73838. }
  73839. exports.signingClaimData = signingClaimData;
  73840. /**
  73841. * Serialize a transaction object for multiSigning
  73842. *
  73843. * @param transaction transaction to serialize
  73844. * @param signingAccount Account to sign the transaction with
  73845. * @returns serialized transaction with appropriate prefix and suffix
  73846. */
  73847. function multiSigningData(transaction, signingAccount) {
  73848. const prefix = hash_prefixes_1.HashPrefix.transactionMultiSig;
  73849. const suffix = types_1.coreTypes.AccountID.from(signingAccount).toBytes();
  73850. return serializeObject(transaction, {
  73851. prefix,
  73852. suffix,
  73853. signingFieldsOnly: true,
  73854. });
  73855. }
  73856. exports.multiSigningData = multiSigningData;
  73857. //# sourceMappingURL=binary.js.map
  73858. /***/ }),
  73859. /***/ 8381:
  73860. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  73861. "use strict";
  73862. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  73863. if (k2 === undefined) k2 = k;
  73864. var desc = Object.getOwnPropertyDescriptor(m, k);
  73865. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  73866. desc = { enumerable: true, get: function() { return m[k]; } };
  73867. }
  73868. Object.defineProperty(o, k2, desc);
  73869. }) : (function(o, m, k, k2) {
  73870. if (k2 === undefined) k2 = k;
  73871. o[k2] = m[k];
  73872. }));
  73873. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  73874. Object.defineProperty(o, "default", { enumerable: true, value: v });
  73875. }) : function(o, v) {
  73876. o["default"] = v;
  73877. });
  73878. var __importStar = (this && this.__importStar) || function (mod) {
  73879. if (mod && mod.__esModule) return mod;
  73880. var result = {};
  73881. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  73882. __setModuleDefault(result, mod);
  73883. return result;
  73884. };
  73885. Object.defineProperty(exports, "__esModule", ({ value: true }));
  73886. exports.types = exports.ShaMap = exports.HashPrefix = exports.quality = exports.TransactionResult = exports.Type = exports.LedgerEntryType = exports.TransactionType = exports.Field = exports.ledgerHashes = exports.binary = exports.hashes = void 0;
  73887. const enums_1 = __webpack_require__(4543);
  73888. Object.defineProperty(exports, "Field", ({ enumerable: true, get: function () { return enums_1.Field; } }));
  73889. Object.defineProperty(exports, "TransactionType", ({ enumerable: true, get: function () { return enums_1.TransactionType; } }));
  73890. Object.defineProperty(exports, "LedgerEntryType", ({ enumerable: true, get: function () { return enums_1.LedgerEntryType; } }));
  73891. Object.defineProperty(exports, "Type", ({ enumerable: true, get: function () { return enums_1.Type; } }));
  73892. Object.defineProperty(exports, "TransactionResult", ({ enumerable: true, get: function () { return enums_1.TransactionResult; } }));
  73893. const types = __importStar(__webpack_require__(5003));
  73894. exports.types = types;
  73895. const binary = __importStar(__webpack_require__(72509));
  73896. exports.binary = binary;
  73897. const shamap_1 = __webpack_require__(89059);
  73898. Object.defineProperty(exports, "ShaMap", ({ enumerable: true, get: function () { return shamap_1.ShaMap; } }));
  73899. const ledgerHashes = __importStar(__webpack_require__(43453));
  73900. exports.ledgerHashes = ledgerHashes;
  73901. const hashes = __importStar(__webpack_require__(89019));
  73902. exports.hashes = hashes;
  73903. const quality_1 = __webpack_require__(72369);
  73904. Object.defineProperty(exports, "quality", ({ enumerable: true, get: function () { return quality_1.quality; } }));
  73905. const hash_prefixes_1 = __webpack_require__(91771);
  73906. Object.defineProperty(exports, "HashPrefix", ({ enumerable: true, get: function () { return hash_prefixes_1.HashPrefix; } }));
  73907. //# sourceMappingURL=coretypes.js.map
  73908. /***/ }),
  73909. /***/ 4543:
  73910. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  73911. "use strict";
  73912. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  73913. if (k2 === undefined) k2 = k;
  73914. var desc = Object.getOwnPropertyDescriptor(m, k);
  73915. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  73916. desc = { enumerable: true, get: function() { return m[k]; } };
  73917. }
  73918. Object.defineProperty(o, k2, desc);
  73919. }) : (function(o, m, k, k2) {
  73920. if (k2 === undefined) k2 = k;
  73921. o[k2] = m[k];
  73922. }));
  73923. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  73924. Object.defineProperty(o, "default", { enumerable: true, value: v });
  73925. }) : function(o, v) {
  73926. o["default"] = v;
  73927. });
  73928. var __importStar = (this && this.__importStar) || function (mod) {
  73929. if (mod && mod.__esModule) return mod;
  73930. var result = {};
  73931. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  73932. __setModuleDefault(result, mod);
  73933. return result;
  73934. };
  73935. Object.defineProperty(exports, "__esModule", ({ value: true }));
  73936. exports.TransactionType = exports.TransactionResult = exports.LedgerEntryType = exports.Type = exports.Field = exports.Bytes = exports.TRANSACTION_TYPES = void 0;
  73937. const enums = __importStar(__webpack_require__(38652));
  73938. const serialized_type_1 = __webpack_require__(51883);
  73939. const buffer_1 = __webpack_require__(49691);
  73940. /*
  73941. * @brief: All valid transaction types
  73942. */
  73943. exports.TRANSACTION_TYPES = Object.entries(enums.TRANSACTION_TYPES)
  73944. .filter(([_key, value]) => value >= 0)
  73945. .map(([key, _value]) => key);
  73946. const TYPE_WIDTH = 2;
  73947. const LEDGER_ENTRY_WIDTH = 2;
  73948. const TRANSACTION_TYPE_WIDTH = 2;
  73949. const TRANSACTION_RESULT_WIDTH = 1;
  73950. /*
  73951. * @brief: Serialize a field based on type_code and Field.nth
  73952. */
  73953. function fieldHeader(type, nth) {
  73954. const header = [];
  73955. if (type < 16) {
  73956. if (nth < 16) {
  73957. header.push((type << 4) | nth);
  73958. }
  73959. else {
  73960. header.push(type << 4, nth);
  73961. }
  73962. }
  73963. else if (nth < 16) {
  73964. header.push(nth, type);
  73965. }
  73966. else {
  73967. header.push(0, type, nth);
  73968. }
  73969. return buffer_1.Buffer.from(header);
  73970. }
  73971. /*
  73972. * @brief: Bytes, name, and ordinal representing one type, ledger_type, transaction type, or result
  73973. */
  73974. class Bytes {
  73975. constructor(name, ordinal, ordinalWidth) {
  73976. this.name = name;
  73977. this.ordinal = ordinal;
  73978. this.ordinalWidth = ordinalWidth;
  73979. this.bytes = buffer_1.Buffer.alloc(ordinalWidth);
  73980. for (let i = 0; i < ordinalWidth; i++) {
  73981. this.bytes[ordinalWidth - i - 1] = (ordinal >>> (i * 8)) & 0xff;
  73982. }
  73983. }
  73984. toJSON() {
  73985. return this.name;
  73986. }
  73987. toBytesSink(sink) {
  73988. sink.put(this.bytes);
  73989. }
  73990. toBytes() {
  73991. return this.bytes;
  73992. }
  73993. }
  73994. exports.Bytes = Bytes;
  73995. /*
  73996. * @brief: Collection of Bytes objects, mapping bidirectionally
  73997. */
  73998. class BytesLookup {
  73999. constructor(types, ordinalWidth) {
  74000. this.ordinalWidth = ordinalWidth;
  74001. Object.entries(types).forEach(([k, v]) => {
  74002. this[k] = new Bytes(k, v, ordinalWidth);
  74003. this[v.toString()] = this[k];
  74004. });
  74005. }
  74006. from(value) {
  74007. return value instanceof Bytes ? value : this[value];
  74008. }
  74009. fromParser(parser) {
  74010. return this.from(parser.readUIntN(this.ordinalWidth).toString());
  74011. }
  74012. }
  74013. function buildField([name, info]) {
  74014. const typeOrdinal = enums.TYPES[info.type];
  74015. const field = fieldHeader(typeOrdinal, info.nth);
  74016. return {
  74017. name: name,
  74018. nth: info.nth,
  74019. isVariableLengthEncoded: info.isVLEncoded,
  74020. isSerialized: info.isSerialized,
  74021. isSigningField: info.isSigningField,
  74022. ordinal: (typeOrdinal << 16) | info.nth,
  74023. type: new Bytes(info.type, typeOrdinal, TYPE_WIDTH),
  74024. header: field,
  74025. associatedType: serialized_type_1.SerializedType, // For later assignment in ./types/index.js
  74026. };
  74027. }
  74028. /*
  74029. * @brief: The collection of all fields as defined in definitions.json
  74030. */
  74031. class FieldLookup {
  74032. constructor(fields) {
  74033. fields.forEach(([k, v]) => {
  74034. this[k] = buildField([k, v]);
  74035. this[this[k].ordinal.toString()] = this[k];
  74036. });
  74037. }
  74038. fromString(value) {
  74039. return this[value];
  74040. }
  74041. }
  74042. const Type = new BytesLookup(enums.TYPES, TYPE_WIDTH);
  74043. exports.Type = Type;
  74044. const LedgerEntryType = new BytesLookup(enums.LEDGER_ENTRY_TYPES, LEDGER_ENTRY_WIDTH);
  74045. exports.LedgerEntryType = LedgerEntryType;
  74046. const TransactionType = new BytesLookup(enums.TRANSACTION_TYPES, TRANSACTION_TYPE_WIDTH);
  74047. exports.TransactionType = TransactionType;
  74048. const TransactionResult = new BytesLookup(enums.TRANSACTION_RESULTS, TRANSACTION_RESULT_WIDTH);
  74049. exports.TransactionResult = TransactionResult;
  74050. const Field = new FieldLookup(enums.FIELDS);
  74051. exports.Field = Field;
  74052. //# sourceMappingURL=index.js.map
  74053. /***/ }),
  74054. /***/ 91771:
  74055. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  74056. "use strict";
  74057. Object.defineProperty(exports, "__esModule", ({ value: true }));
  74058. exports.HashPrefix = void 0;
  74059. const buffer_1 = __webpack_require__(49691);
  74060. /**
  74061. * Write a 32 bit integer to a Buffer
  74062. *
  74063. * @param uint32 32 bit integer to write to buffer
  74064. * @returns a buffer with the bytes representation of uint32
  74065. */
  74066. function bytes(uint32) {
  74067. const result = buffer_1.Buffer.alloc(4);
  74068. result.writeUInt32BE(uint32, 0);
  74069. return result;
  74070. }
  74071. /**
  74072. * Maps HashPrefix names to their byte representation
  74073. */
  74074. const HashPrefix = {
  74075. transactionID: bytes(0x54584e00),
  74076. // transaction plus metadata
  74077. transaction: bytes(0x534e4400),
  74078. // account state
  74079. accountStateEntry: bytes(0x4d4c4e00),
  74080. // inner node in tree
  74081. innerNode: bytes(0x4d494e00),
  74082. // ledger master data for signing
  74083. ledgerHeader: bytes(0x4c575200),
  74084. // inner transaction to sign
  74085. transactionSig: bytes(0x53545800),
  74086. // inner transaction to sign
  74087. transactionMultiSig: bytes(0x534d5400),
  74088. // validation for signing
  74089. validation: bytes(0x56414c00),
  74090. // proposal for signing
  74091. proposal: bytes(0x50525000),
  74092. // payment channel claim
  74093. paymentChannelClaim: bytes(0x434c4d00),
  74094. };
  74095. exports.HashPrefix = HashPrefix;
  74096. //# sourceMappingURL=hash-prefixes.js.map
  74097. /***/ }),
  74098. /***/ 89019:
  74099. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  74100. "use strict";
  74101. Object.defineProperty(exports, "__esModule", ({ value: true }));
  74102. exports.transactionID = exports.sha512Half = exports.Sha512Half = void 0;
  74103. const hash_prefixes_1 = __webpack_require__(91771);
  74104. const createHash = __webpack_require__(23482);
  74105. const hash_256_1 = __webpack_require__(9334);
  74106. const binary_serializer_1 = __webpack_require__(27894);
  74107. const buffer_1 = __webpack_require__(49691);
  74108. /**
  74109. * Class for hashing with SHA512
  74110. * @extends BytesList So SerializedTypes can write bytes to a Sha512Half
  74111. */
  74112. class Sha512Half extends binary_serializer_1.BytesList {
  74113. constructor() {
  74114. super(...arguments);
  74115. this.hash = createHash('sha512');
  74116. }
  74117. /**
  74118. * Construct a new Sha512Hash and write bytes this.hash
  74119. *
  74120. * @param bytes bytes to write to this.hash
  74121. * @returns the new Sha512Hash object
  74122. */
  74123. static put(bytes) {
  74124. return new Sha512Half().put(bytes);
  74125. }
  74126. /**
  74127. * Write bytes to an existing Sha512Hash
  74128. *
  74129. * @param bytes bytes to write to object
  74130. * @returns the Sha512 object
  74131. */
  74132. put(bytes) {
  74133. this.hash.update(bytes);
  74134. return this;
  74135. }
  74136. /**
  74137. * Compute SHA512 hash and slice in half
  74138. *
  74139. * @returns half of a SHA512 hash
  74140. */
  74141. finish256() {
  74142. return buffer_1.Buffer.from(this.hash.digest().slice(0, 32));
  74143. }
  74144. /**
  74145. * Constructs a Hash256 from the Sha512Half object
  74146. *
  74147. * @returns a Hash256 object
  74148. */
  74149. finish() {
  74150. return new hash_256_1.Hash256(this.finish256());
  74151. }
  74152. }
  74153. exports.Sha512Half = Sha512Half;
  74154. /**
  74155. * compute SHA512 hash of a list of bytes
  74156. *
  74157. * @param args zero or more arguments to hash
  74158. * @returns the sha512half hash of the arguments.
  74159. */
  74160. function sha512Half(...args) {
  74161. const hash = new Sha512Half();
  74162. args.forEach((a) => hash.put(a));
  74163. return hash.finish256();
  74164. }
  74165. exports.sha512Half = sha512Half;
  74166. /**
  74167. * Construct a transactionID from a Serialized Transaction
  74168. *
  74169. * @param serialized bytes to hash
  74170. * @returns a Hash256 object
  74171. */
  74172. function transactionID(serialized) {
  74173. return new hash_256_1.Hash256(sha512Half(hash_prefixes_1.HashPrefix.transactionID, serialized));
  74174. }
  74175. exports.transactionID = transactionID;
  74176. //# sourceMappingURL=hashes.js.map
  74177. /***/ }),
  74178. /***/ 42353:
  74179. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  74180. "use strict";
  74181. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  74182. if (k2 === undefined) k2 = k;
  74183. var desc = Object.getOwnPropertyDescriptor(m, k);
  74184. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  74185. desc = { enumerable: true, get: function() { return m[k]; } };
  74186. }
  74187. Object.defineProperty(o, k2, desc);
  74188. }) : (function(o, m, k, k2) {
  74189. if (k2 === undefined) k2 = k;
  74190. o[k2] = m[k];
  74191. }));
  74192. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  74193. Object.defineProperty(o, "default", { enumerable: true, value: v });
  74194. }) : function(o, v) {
  74195. o["default"] = v;
  74196. });
  74197. var __importStar = (this && this.__importStar) || function (mod) {
  74198. if (mod && mod.__esModule) return mod;
  74199. var result = {};
  74200. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  74201. __setModuleDefault(result, mod);
  74202. return result;
  74203. };
  74204. Object.defineProperty(exports, "__esModule", ({ value: true }));
  74205. exports.TRANSACTION_TYPES = exports.decodeLedgerData = exports.decodeQuality = exports.encodeQuality = exports.encodeForMultisigning = exports.encodeForSigningClaim = exports.encodeForSigning = exports.encode = exports.decode = void 0;
  74206. const assert = __importStar(__webpack_require__(69282));
  74207. const coretypes_1 = __webpack_require__(8381);
  74208. const ledger_hashes_1 = __webpack_require__(43453);
  74209. Object.defineProperty(exports, "decodeLedgerData", ({ enumerable: true, get: function () { return ledger_hashes_1.decodeLedgerData; } }));
  74210. const enums_1 = __webpack_require__(4543);
  74211. Object.defineProperty(exports, "TRANSACTION_TYPES", ({ enumerable: true, get: function () { return enums_1.TRANSACTION_TYPES; } }));
  74212. const { signingData, signingClaimData, multiSigningData, binaryToJSON, serializeObject, } = coretypes_1.binary;
  74213. /**
  74214. * Decode a transaction
  74215. *
  74216. * @param binary hex-string of the encoded transaction
  74217. * @returns the JSON representation of the transaction
  74218. */
  74219. function decode(binary) {
  74220. assert.ok(typeof binary === 'string', 'binary must be a hex string');
  74221. return binaryToJSON(binary);
  74222. }
  74223. exports.decode = decode;
  74224. /**
  74225. * Encode a transaction
  74226. *
  74227. * @param json The JSON representation of a transaction
  74228. * @returns A hex-string of the encoded transaction
  74229. */
  74230. function encode(json) {
  74231. assert.ok(typeof json === 'object');
  74232. return serializeObject(json)
  74233. .toString('hex')
  74234. .toUpperCase();
  74235. }
  74236. exports.encode = encode;
  74237. /**
  74238. * Encode a transaction and prepare for signing
  74239. *
  74240. * @param json JSON object representing the transaction
  74241. * @param signer string representing the account to sign the transaction with
  74242. * @returns a hex string of the encoded transaction
  74243. */
  74244. function encodeForSigning(json) {
  74245. assert.ok(typeof json === 'object');
  74246. return signingData(json)
  74247. .toString('hex')
  74248. .toUpperCase();
  74249. }
  74250. exports.encodeForSigning = encodeForSigning;
  74251. /**
  74252. * Encode a transaction and prepare for signing with a claim
  74253. *
  74254. * @param json JSON object representing the transaction
  74255. * @param signer string representing the account to sign the transaction with
  74256. * @returns a hex string of the encoded transaction
  74257. */
  74258. function encodeForSigningClaim(json) {
  74259. assert.ok(typeof json === 'object');
  74260. return signingClaimData(json)
  74261. .toString('hex')
  74262. .toUpperCase();
  74263. }
  74264. exports.encodeForSigningClaim = encodeForSigningClaim;
  74265. /**
  74266. * Encode a transaction and prepare for multi-signing
  74267. *
  74268. * @param json JSON object representing the transaction
  74269. * @param signer string representing the account to sign the transaction with
  74270. * @returns a hex string of the encoded transaction
  74271. */
  74272. function encodeForMultisigning(json, signer) {
  74273. assert.ok(typeof json === 'object');
  74274. assert.equal(json['SigningPubKey'], '');
  74275. return multiSigningData(json, signer)
  74276. .toString('hex')
  74277. .toUpperCase();
  74278. }
  74279. exports.encodeForMultisigning = encodeForMultisigning;
  74280. /**
  74281. * Encode a quality value
  74282. *
  74283. * @param value string representation of a number
  74284. * @returns a hex-string representing the quality
  74285. */
  74286. function encodeQuality(value) {
  74287. assert.ok(typeof value === 'string');
  74288. return coretypes_1.quality.encode(value).toString('hex').toUpperCase();
  74289. }
  74290. exports.encodeQuality = encodeQuality;
  74291. /**
  74292. * Decode a quality value
  74293. *
  74294. * @param value hex-string of a quality
  74295. * @returns a string representing the quality
  74296. */
  74297. function decodeQuality(value) {
  74298. assert.ok(typeof value === 'string');
  74299. return coretypes_1.quality.decode(value).toString();
  74300. }
  74301. exports.decodeQuality = decodeQuality;
  74302. //# sourceMappingURL=index.js.map
  74303. /***/ }),
  74304. /***/ 43453:
  74305. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  74306. "use strict";
  74307. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  74308. if (k2 === undefined) k2 = k;
  74309. var desc = Object.getOwnPropertyDescriptor(m, k);
  74310. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  74311. desc = { enumerable: true, get: function() { return m[k]; } };
  74312. }
  74313. Object.defineProperty(o, k2, desc);
  74314. }) : (function(o, m, k, k2) {
  74315. if (k2 === undefined) k2 = k;
  74316. o[k2] = m[k];
  74317. }));
  74318. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  74319. Object.defineProperty(o, "default", { enumerable: true, value: v });
  74320. }) : function(o, v) {
  74321. o["default"] = v;
  74322. });
  74323. var __importStar = (this && this.__importStar) || function (mod) {
  74324. if (mod && mod.__esModule) return mod;
  74325. var result = {};
  74326. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  74327. __setModuleDefault(result, mod);
  74328. return result;
  74329. };
  74330. Object.defineProperty(exports, "__esModule", ({ value: true }));
  74331. exports.decodeLedgerData = exports.ledgerHash = exports.transactionTreeHash = exports.accountStateHash = void 0;
  74332. const assert = __importStar(__webpack_require__(69282));
  74333. const shamap_1 = __webpack_require__(89059);
  74334. const hash_prefixes_1 = __webpack_require__(91771);
  74335. const hashes_1 = __webpack_require__(89019);
  74336. const binary_1 = __webpack_require__(72509);
  74337. const hash_256_1 = __webpack_require__(9334);
  74338. const st_object_1 = __webpack_require__(30409);
  74339. const uint_64_1 = __webpack_require__(17569);
  74340. const uint_32_1 = __webpack_require__(39441);
  74341. const uint_8_1 = __webpack_require__(97158);
  74342. const binary_parser_1 = __webpack_require__(46633);
  74343. const bigInt = __webpack_require__(24736);
  74344. /**
  74345. * Computes the hash of a list of objects
  74346. *
  74347. * @param itemizer Converts an item into a format that can be added to SHAMap
  74348. * @param itemsJson Array of items to add to a SHAMap
  74349. * @returns the hash of the SHAMap
  74350. */
  74351. function computeHash(itemizer, itemsJson) {
  74352. const map = new shamap_1.ShaMap();
  74353. itemsJson.forEach((item) => map.addItem(...itemizer(item)));
  74354. return map.hash();
  74355. }
  74356. /**
  74357. * Convert a transaction into an index and an item
  74358. *
  74359. * @param json transaction with metadata
  74360. * @returns a tuple of index and item to be added to SHAMap
  74361. */
  74362. function transactionItemizer(json) {
  74363. assert.ok(json.hash);
  74364. const index = hash_256_1.Hash256.from(json.hash);
  74365. const item = {
  74366. hashPrefix() {
  74367. return hash_prefixes_1.HashPrefix.transaction;
  74368. },
  74369. toBytesSink(sink) {
  74370. const serializer = new binary_1.BinarySerializer(sink);
  74371. serializer.writeLengthEncoded(st_object_1.STObject.from(json));
  74372. serializer.writeLengthEncoded(st_object_1.STObject.from(json.metaData));
  74373. },
  74374. };
  74375. return [index, item, undefined];
  74376. }
  74377. /**
  74378. * Convert an entry to a pair Hash256 and ShaMapNode
  74379. *
  74380. * @param json JSON describing a ledger entry item
  74381. * @returns a tuple of index and item to be added to SHAMap
  74382. */
  74383. function entryItemizer(json) {
  74384. const index = hash_256_1.Hash256.from(json.index);
  74385. const bytes = (0, binary_1.serializeObject)(json);
  74386. const item = {
  74387. hashPrefix() {
  74388. return hash_prefixes_1.HashPrefix.accountStateEntry;
  74389. },
  74390. toBytesSink(sink) {
  74391. sink.put(bytes);
  74392. },
  74393. };
  74394. return [index, item, undefined];
  74395. }
  74396. /**
  74397. * Function computing the hash of a transaction tree
  74398. *
  74399. * @param param An array of transaction objects to hash
  74400. * @returns A Hash256 object
  74401. */
  74402. function transactionTreeHash(param) {
  74403. const itemizer = transactionItemizer;
  74404. return computeHash(itemizer, param);
  74405. }
  74406. exports.transactionTreeHash = transactionTreeHash;
  74407. /**
  74408. * Function computing the hash of accountState
  74409. *
  74410. * @param param A list of accountStates hash
  74411. * @returns A Hash256 object
  74412. */
  74413. function accountStateHash(param) {
  74414. const itemizer = entryItemizer;
  74415. return computeHash(itemizer, param);
  74416. }
  74417. exports.accountStateHash = accountStateHash;
  74418. /**
  74419. * Serialize and hash a ledger header
  74420. *
  74421. * @param header a ledger header
  74422. * @returns the hash of header
  74423. */
  74424. function ledgerHash(header) {
  74425. const hash = new hashes_1.Sha512Half();
  74426. hash.put(hash_prefixes_1.HashPrefix.ledgerHeader);
  74427. assert.ok(header.parent_close_time !== undefined);
  74428. assert.ok(header.close_flags !== undefined);
  74429. uint_32_1.UInt32.from(header.ledger_index).toBytesSink(hash);
  74430. uint_64_1.UInt64.from(bigInt(String(header.total_coins))).toBytesSink(hash);
  74431. hash_256_1.Hash256.from(header.parent_hash).toBytesSink(hash);
  74432. hash_256_1.Hash256.from(header.transaction_hash).toBytesSink(hash);
  74433. hash_256_1.Hash256.from(header.account_hash).toBytesSink(hash);
  74434. uint_32_1.UInt32.from(header.parent_close_time).toBytesSink(hash);
  74435. uint_32_1.UInt32.from(header.close_time).toBytesSink(hash);
  74436. uint_8_1.UInt8.from(header.close_time_resolution).toBytesSink(hash);
  74437. uint_8_1.UInt8.from(header.close_flags).toBytesSink(hash);
  74438. return hash.finish();
  74439. }
  74440. exports.ledgerHash = ledgerHash;
  74441. /**
  74442. * Decodes a serialized ledger header
  74443. *
  74444. * @param binary A serialized ledger header
  74445. * @returns A JSON object describing a ledger header
  74446. */
  74447. function decodeLedgerData(binary) {
  74448. assert.ok(typeof binary === 'string', 'binary must be a hex string');
  74449. const parser = new binary_parser_1.BinaryParser(binary);
  74450. return {
  74451. ledger_index: parser.readUInt32(),
  74452. total_coins: parser.readType(uint_64_1.UInt64).valueOf().toString(),
  74453. parent_hash: parser.readType(hash_256_1.Hash256).toHex(),
  74454. transaction_hash: parser.readType(hash_256_1.Hash256).toHex(),
  74455. account_hash: parser.readType(hash_256_1.Hash256).toHex(),
  74456. parent_close_time: parser.readUInt32(),
  74457. close_time: parser.readUInt32(),
  74458. close_time_resolution: parser.readUInt8(),
  74459. close_flags: parser.readUInt8(),
  74460. };
  74461. }
  74462. exports.decodeLedgerData = decodeLedgerData;
  74463. //# sourceMappingURL=ledger-hashes.js.map
  74464. /***/ }),
  74465. /***/ 72369:
  74466. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  74467. "use strict";
  74468. Object.defineProperty(exports, "__esModule", ({ value: true }));
  74469. exports.quality = void 0;
  74470. const types_1 = __webpack_require__(5003);
  74471. const decimal_js_1 = __webpack_require__(93776);
  74472. const bigInt = __webpack_require__(24736);
  74473. const buffer_1 = __webpack_require__(49691);
  74474. /**
  74475. * class for encoding and decoding quality
  74476. */
  74477. class quality {
  74478. /**
  74479. * Encode quality amount
  74480. *
  74481. * @param arg string representation of an amount
  74482. * @returns Serialized quality
  74483. */
  74484. static encode(quality) {
  74485. const decimal = new decimal_js_1.Decimal(quality);
  74486. const exponent = decimal.e - 15;
  74487. const qualityString = decimal.times(`1e${-exponent}`).abs().toString();
  74488. const bytes = types_1.coreTypes.UInt64.from(bigInt(qualityString)).toBytes();
  74489. bytes[0] = exponent + 100;
  74490. return bytes;
  74491. }
  74492. /**
  74493. * Decode quality amount
  74494. *
  74495. * @param arg hex-string denoting serialized quality
  74496. * @returns deserialized quality
  74497. */
  74498. static decode(quality) {
  74499. const bytes = buffer_1.Buffer.from(quality, 'hex').slice(-8);
  74500. const exponent = bytes[0] - 100;
  74501. const mantissa = new decimal_js_1.Decimal(`0x${bytes.slice(1).toString('hex')}`);
  74502. return mantissa.times(`1e${exponent}`);
  74503. }
  74504. }
  74505. exports.quality = quality;
  74506. //# sourceMappingURL=quality.js.map
  74507. /***/ }),
  74508. /***/ 46633:
  74509. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  74510. "use strict";
  74511. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  74512. if (k2 === undefined) k2 = k;
  74513. var desc = Object.getOwnPropertyDescriptor(m, k);
  74514. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  74515. desc = { enumerable: true, get: function() { return m[k]; } };
  74516. }
  74517. Object.defineProperty(o, k2, desc);
  74518. }) : (function(o, m, k, k2) {
  74519. if (k2 === undefined) k2 = k;
  74520. o[k2] = m[k];
  74521. }));
  74522. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  74523. Object.defineProperty(o, "default", { enumerable: true, value: v });
  74524. }) : function(o, v) {
  74525. o["default"] = v;
  74526. });
  74527. var __importStar = (this && this.__importStar) || function (mod) {
  74528. if (mod && mod.__esModule) return mod;
  74529. var result = {};
  74530. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  74531. __setModuleDefault(result, mod);
  74532. return result;
  74533. };
  74534. Object.defineProperty(exports, "__esModule", ({ value: true }));
  74535. exports.BinaryParser = void 0;
  74536. const assert = __importStar(__webpack_require__(69282));
  74537. const enums_1 = __webpack_require__(4543);
  74538. const buffer_1 = __webpack_require__(49691);
  74539. /**
  74540. * BinaryParser is used to compute fields and values from a HexString
  74541. */
  74542. class BinaryParser {
  74543. /**
  74544. * Initialize bytes to a hex string
  74545. *
  74546. * @param hexBytes a hex string
  74547. */
  74548. constructor(hexBytes) {
  74549. this.bytes = buffer_1.Buffer.from(hexBytes, 'hex');
  74550. }
  74551. /**
  74552. * Peek the first byte of the BinaryParser
  74553. *
  74554. * @returns The first byte of the BinaryParser
  74555. */
  74556. peek() {
  74557. assert.ok(this.bytes.byteLength !== 0);
  74558. return this.bytes[0];
  74559. }
  74560. /**
  74561. * Consume the first n bytes of the BinaryParser
  74562. *
  74563. * @param n the number of bytes to skip
  74564. */
  74565. skip(n) {
  74566. assert.ok(n <= this.bytes.byteLength);
  74567. this.bytes = this.bytes.slice(n);
  74568. }
  74569. /**
  74570. * read the first n bytes from the BinaryParser
  74571. *
  74572. * @param n The number of bytes to read
  74573. * @return The bytes
  74574. */
  74575. read(n) {
  74576. assert.ok(n <= this.bytes.byteLength);
  74577. const slice = this.bytes.slice(0, n);
  74578. this.skip(n);
  74579. return slice;
  74580. }
  74581. /**
  74582. * Read an integer of given size
  74583. *
  74584. * @param n The number of bytes to read
  74585. * @return The number represented by those bytes
  74586. */
  74587. readUIntN(n) {
  74588. assert.ok(0 < n && n <= 4, 'invalid n');
  74589. return this.read(n).reduce((a, b) => (a << 8) | b) >>> 0;
  74590. }
  74591. readUInt8() {
  74592. return this.readUIntN(1);
  74593. }
  74594. readUInt16() {
  74595. return this.readUIntN(2);
  74596. }
  74597. readUInt32() {
  74598. return this.readUIntN(4);
  74599. }
  74600. size() {
  74601. return this.bytes.byteLength;
  74602. }
  74603. end(customEnd) {
  74604. const length = this.bytes.byteLength;
  74605. return length === 0 || (customEnd !== undefined && length <= customEnd);
  74606. }
  74607. /**
  74608. * Reads variable length encoded bytes
  74609. *
  74610. * @return The variable length bytes
  74611. */
  74612. readVariableLength() {
  74613. return this.read(this.readVariableLengthLength());
  74614. }
  74615. /**
  74616. * Reads the length of the variable length encoded bytes
  74617. *
  74618. * @return The length of the variable length encoded bytes
  74619. */
  74620. readVariableLengthLength() {
  74621. const b1 = this.readUInt8();
  74622. if (b1 <= 192) {
  74623. return b1;
  74624. }
  74625. else if (b1 <= 240) {
  74626. const b2 = this.readUInt8();
  74627. return 193 + (b1 - 193) * 256 + b2;
  74628. }
  74629. else if (b1 <= 254) {
  74630. const b2 = this.readUInt8();
  74631. const b3 = this.readUInt8();
  74632. return 12481 + (b1 - 241) * 65536 + b2 * 256 + b3;
  74633. }
  74634. throw new Error('Invalid variable length indicator');
  74635. }
  74636. /**
  74637. * Reads the field ordinal from the BinaryParser
  74638. *
  74639. * @return Field ordinal
  74640. */
  74641. readFieldOrdinal() {
  74642. let type = this.readUInt8();
  74643. let nth = type & 15;
  74644. type >>= 4;
  74645. if (type === 0) {
  74646. type = this.readUInt8();
  74647. if (type === 0 || type < 16) {
  74648. throw new Error('Cannot read FieldOrdinal, type_code out of range');
  74649. }
  74650. }
  74651. if (nth === 0) {
  74652. nth = this.readUInt8();
  74653. if (nth === 0 || nth < 16) {
  74654. throw new Error('Cannot read FieldOrdinal, field_code out of range');
  74655. }
  74656. }
  74657. return (type << 16) | nth;
  74658. }
  74659. /**
  74660. * Read the field from the BinaryParser
  74661. *
  74662. * @return The field represented by the bytes at the head of the BinaryParser
  74663. */
  74664. readField() {
  74665. return enums_1.Field.fromString(this.readFieldOrdinal().toString());
  74666. }
  74667. /**
  74668. * Read a given type from the BinaryParser
  74669. *
  74670. * @param type The type that you want to read from the BinaryParser
  74671. * @return The instance of that type read from the BinaryParser
  74672. */
  74673. readType(type) {
  74674. return type.fromParser(this);
  74675. }
  74676. /**
  74677. * Get the type associated with a given field
  74678. *
  74679. * @param field The field that you wan to get the type of
  74680. * @return The type associated with the given field
  74681. */
  74682. typeForField(field) {
  74683. return field.associatedType;
  74684. }
  74685. /**
  74686. * Read value of the type specified by field from the BinaryParser
  74687. *
  74688. * @param field The field that you want to get the associated value for
  74689. * @return The value associated with the given field
  74690. */
  74691. readFieldValue(field) {
  74692. const type = this.typeForField(field);
  74693. if (!type) {
  74694. throw new Error(`unsupported: (${field.name}, ${field.type.name})`);
  74695. }
  74696. const sizeHint = field.isVariableLengthEncoded
  74697. ? this.readVariableLengthLength()
  74698. : undefined;
  74699. const value = type.fromParser(this, sizeHint);
  74700. if (value === undefined) {
  74701. throw new Error(`fromParser for (${field.name}, ${field.type.name}) -> undefined `);
  74702. }
  74703. return value;
  74704. }
  74705. /**
  74706. * Get the next field and value from the BinaryParser
  74707. *
  74708. * @return The field and value
  74709. */
  74710. readFieldAndValue() {
  74711. const field = this.readField();
  74712. return [field, this.readFieldValue(field)];
  74713. }
  74714. }
  74715. exports.BinaryParser = BinaryParser;
  74716. //# sourceMappingURL=binary-parser.js.map
  74717. /***/ }),
  74718. /***/ 27894:
  74719. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  74720. "use strict";
  74721. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  74722. if (k2 === undefined) k2 = k;
  74723. var desc = Object.getOwnPropertyDescriptor(m, k);
  74724. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  74725. desc = { enumerable: true, get: function() { return m[k]; } };
  74726. }
  74727. Object.defineProperty(o, k2, desc);
  74728. }) : (function(o, m, k, k2) {
  74729. if (k2 === undefined) k2 = k;
  74730. o[k2] = m[k];
  74731. }));
  74732. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  74733. Object.defineProperty(o, "default", { enumerable: true, value: v });
  74734. }) : function(o, v) {
  74735. o["default"] = v;
  74736. });
  74737. var __importStar = (this && this.__importStar) || function (mod) {
  74738. if (mod && mod.__esModule) return mod;
  74739. var result = {};
  74740. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  74741. __setModuleDefault(result, mod);
  74742. return result;
  74743. };
  74744. Object.defineProperty(exports, "__esModule", ({ value: true }));
  74745. exports.BinarySerializer = exports.BytesList = void 0;
  74746. const assert = __importStar(__webpack_require__(69282));
  74747. const buffer_1 = __webpack_require__(49691);
  74748. /**
  74749. * Bytes list is a collection of buffer objects
  74750. */
  74751. class BytesList {
  74752. constructor() {
  74753. this.bytesArray = [];
  74754. }
  74755. /**
  74756. * Get the total number of bytes in the BytesList
  74757. *
  74758. * @return the number of bytes
  74759. */
  74760. getLength() {
  74761. return buffer_1.Buffer.concat(this.bytesArray).byteLength;
  74762. }
  74763. /**
  74764. * Put bytes in the BytesList
  74765. *
  74766. * @param bytesArg A Buffer
  74767. * @return this BytesList
  74768. */
  74769. put(bytesArg) {
  74770. const bytes = buffer_1.Buffer.from(bytesArg); // Temporary, to catch instances of Uint8Array being passed in
  74771. this.bytesArray.push(bytes);
  74772. return this;
  74773. }
  74774. /**
  74775. * Write this BytesList to the back of another bytes list
  74776. *
  74777. * @param list The BytesList to write to
  74778. */
  74779. toBytesSink(list) {
  74780. list.put(this.toBytes());
  74781. }
  74782. toBytes() {
  74783. return buffer_1.Buffer.concat(this.bytesArray);
  74784. }
  74785. toHex() {
  74786. return this.toBytes().toString('hex').toUpperCase();
  74787. }
  74788. }
  74789. exports.BytesList = BytesList;
  74790. /**
  74791. * BinarySerializer is used to write fields and values to buffers
  74792. */
  74793. class BinarySerializer {
  74794. constructor(sink) {
  74795. this.sink = new BytesList();
  74796. this.sink = sink;
  74797. }
  74798. /**
  74799. * Write a value to this BinarySerializer
  74800. *
  74801. * @param value a SerializedType value
  74802. */
  74803. write(value) {
  74804. value.toBytesSink(this.sink);
  74805. }
  74806. /**
  74807. * Write bytes to this BinarySerializer
  74808. *
  74809. * @param bytes the bytes to write
  74810. */
  74811. put(bytes) {
  74812. this.sink.put(bytes);
  74813. }
  74814. /**
  74815. * Write a value of a given type to this BinarySerializer
  74816. *
  74817. * @param type the type to write
  74818. * @param value a value of that type
  74819. */
  74820. writeType(type, value) {
  74821. this.write(type.from(value));
  74822. }
  74823. /**
  74824. * Write BytesList to this BinarySerializer
  74825. *
  74826. * @param bl BytesList to write to BinarySerializer
  74827. */
  74828. writeBytesList(bl) {
  74829. bl.toBytesSink(this.sink);
  74830. }
  74831. /**
  74832. * Calculate the header of Variable Length encoded bytes
  74833. *
  74834. * @param length the length of the bytes
  74835. */
  74836. encodeVariableLength(length) {
  74837. const lenBytes = buffer_1.Buffer.alloc(3);
  74838. if (length <= 192) {
  74839. lenBytes[0] = length;
  74840. return lenBytes.slice(0, 1);
  74841. }
  74842. else if (length <= 12480) {
  74843. length -= 193;
  74844. lenBytes[0] = 193 + (length >>> 8);
  74845. lenBytes[1] = length & 0xff;
  74846. return lenBytes.slice(0, 2);
  74847. }
  74848. else if (length <= 918744) {
  74849. length -= 12481;
  74850. lenBytes[0] = 241 + (length >>> 16);
  74851. lenBytes[1] = (length >> 8) & 0xff;
  74852. lenBytes[2] = length & 0xff;
  74853. return lenBytes.slice(0, 3);
  74854. }
  74855. throw new Error('Overflow error');
  74856. }
  74857. /**
  74858. * Write field and value to BinarySerializer
  74859. *
  74860. * @param field field to write to BinarySerializer
  74861. * @param value value to write to BinarySerializer
  74862. */
  74863. writeFieldAndValue(field, value, isUnlModifyWorkaround = false) {
  74864. const associatedValue = field.associatedType.from(value);
  74865. assert.ok(associatedValue.toBytesSink !== undefined);
  74866. assert.ok(field.name !== undefined);
  74867. this.sink.put(field.header);
  74868. if (field.isVariableLengthEncoded) {
  74869. this.writeLengthEncoded(associatedValue, isUnlModifyWorkaround);
  74870. }
  74871. else {
  74872. associatedValue.toBytesSink(this.sink);
  74873. }
  74874. }
  74875. /**
  74876. * Write a variable length encoded value to the BinarySerializer
  74877. *
  74878. * @param value length encoded value to write to BytesList
  74879. */
  74880. writeLengthEncoded(value, isUnlModifyWorkaround = false) {
  74881. const bytes = new BytesList();
  74882. if (!isUnlModifyWorkaround) {
  74883. // this part doesn't happen for the Account field in a UNLModify transaction
  74884. value.toBytesSink(bytes);
  74885. }
  74886. this.put(this.encodeVariableLength(bytes.getLength()));
  74887. this.writeBytesList(bytes);
  74888. }
  74889. }
  74890. exports.BinarySerializer = BinarySerializer;
  74891. //# sourceMappingURL=binary-serializer.js.map
  74892. /***/ }),
  74893. /***/ 89059:
  74894. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  74895. "use strict";
  74896. Object.defineProperty(exports, "__esModule", ({ value: true }));
  74897. exports.ShaMapLeaf = exports.ShaMapNode = exports.ShaMap = void 0;
  74898. const assert_1 = __webpack_require__(69282);
  74899. const types_1 = __webpack_require__(5003);
  74900. const hash_prefixes_1 = __webpack_require__(91771);
  74901. const hashes_1 = __webpack_require__(89019);
  74902. const buffer_1 = __webpack_require__(49691);
  74903. /**
  74904. * Abstract class describing a SHAMapNode
  74905. */
  74906. class ShaMapNode {
  74907. }
  74908. exports.ShaMapNode = ShaMapNode;
  74909. /**
  74910. * Class describing a Leaf of SHAMap
  74911. */
  74912. class ShaMapLeaf extends ShaMapNode {
  74913. constructor(index, item) {
  74914. super();
  74915. this.index = index;
  74916. this.item = item;
  74917. }
  74918. /**
  74919. * @returns true as ShaMapLeaf is a leaf node
  74920. */
  74921. isLeaf() {
  74922. return true;
  74923. }
  74924. /**
  74925. * @returns false as ShaMapLeaf is not an inner node
  74926. */
  74927. isInner() {
  74928. return false;
  74929. }
  74930. /**
  74931. * Get the prefix of the this.item
  74932. *
  74933. * @returns The hash prefix, unless this.item is undefined, then it returns an empty Buffer
  74934. */
  74935. hashPrefix() {
  74936. return this.item === undefined ? buffer_1.Buffer.alloc(0) : this.item.hashPrefix();
  74937. }
  74938. /**
  74939. * Hash the bytes representation of this
  74940. *
  74941. * @returns hash of this.item concatenated with this.index
  74942. */
  74943. hash() {
  74944. const hash = hashes_1.Sha512Half.put(this.hashPrefix());
  74945. this.toBytesSink(hash);
  74946. return hash.finish();
  74947. }
  74948. /**
  74949. * Write the bytes representation of this to a BytesList
  74950. * @param list BytesList to write bytes to
  74951. */
  74952. toBytesSink(list) {
  74953. if (this.item !== undefined) {
  74954. this.item.toBytesSink(list);
  74955. }
  74956. this.index.toBytesSink(list);
  74957. }
  74958. }
  74959. exports.ShaMapLeaf = ShaMapLeaf;
  74960. /**
  74961. * Class defining an Inner Node of a SHAMap
  74962. */
  74963. class ShaMapInner extends ShaMapNode {
  74964. constructor(depth = 0) {
  74965. super();
  74966. this.depth = depth;
  74967. this.slotBits = 0;
  74968. this.branches = Array(16);
  74969. }
  74970. /**
  74971. * @returns true as ShaMapInner is an inner node
  74972. */
  74973. isInner() {
  74974. return true;
  74975. }
  74976. /**
  74977. * @returns false as ShaMapInner is not a leaf node
  74978. */
  74979. isLeaf() {
  74980. return false;
  74981. }
  74982. /**
  74983. * Get the hash prefix for this node
  74984. *
  74985. * @returns hash prefix describing an inner node
  74986. */
  74987. hashPrefix() {
  74988. return hash_prefixes_1.HashPrefix.innerNode;
  74989. }
  74990. /**
  74991. * Set a branch of this node to be another node
  74992. *
  74993. * @param slot Slot to add branch to this.branches
  74994. * @param branch Branch to add
  74995. */
  74996. setBranch(slot, branch) {
  74997. this.slotBits = this.slotBits | (1 << slot);
  74998. this.branches[slot] = branch;
  74999. }
  75000. /**
  75001. * @returns true if node is empty
  75002. */
  75003. empty() {
  75004. return this.slotBits === 0;
  75005. }
  75006. /**
  75007. * Compute the hash of this node
  75008. *
  75009. * @returns The hash of this node
  75010. */
  75011. hash() {
  75012. if (this.empty()) {
  75013. return types_1.coreTypes.Hash256.ZERO_256;
  75014. }
  75015. const hash = hashes_1.Sha512Half.put(this.hashPrefix());
  75016. this.toBytesSink(hash);
  75017. return hash.finish();
  75018. }
  75019. /**
  75020. * Writes the bytes representation of this node to a BytesList
  75021. *
  75022. * @param list BytesList to write bytes to
  75023. */
  75024. toBytesSink(list) {
  75025. for (let i = 0; i < this.branches.length; i++) {
  75026. const branch = this.branches[i];
  75027. const hash = branch ? branch.hash() : types_1.coreTypes.Hash256.ZERO_256;
  75028. hash.toBytesSink(list);
  75029. }
  75030. }
  75031. /**
  75032. * Add item to the SHAMap
  75033. *
  75034. * @param index Hash of the index of the item being inserted
  75035. * @param item Item to insert in the map
  75036. * @param leaf Leaf node to insert when branch doesn't exist
  75037. */
  75038. addItem(index, item, leaf) {
  75039. assert_1.strict.ok(index !== undefined);
  75040. if (index !== undefined) {
  75041. const nibble = index.nibblet(this.depth);
  75042. const existing = this.branches[nibble];
  75043. if (existing === undefined) {
  75044. this.setBranch(nibble, leaf || new ShaMapLeaf(index, item));
  75045. }
  75046. else if (existing instanceof ShaMapLeaf) {
  75047. const newInner = new ShaMapInner(this.depth + 1);
  75048. newInner.addItem(existing.index, undefined, existing);
  75049. newInner.addItem(index, item, leaf);
  75050. this.setBranch(nibble, newInner);
  75051. }
  75052. else if (existing instanceof ShaMapInner) {
  75053. existing.addItem(index, item, leaf);
  75054. }
  75055. else {
  75056. throw new Error('invalid ShaMap.addItem call');
  75057. }
  75058. }
  75059. }
  75060. }
  75061. class ShaMap extends ShaMapInner {
  75062. }
  75063. exports.ShaMap = ShaMap;
  75064. //# sourceMappingURL=shamap.js.map
  75065. /***/ }),
  75066. /***/ 50403:
  75067. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75068. "use strict";
  75069. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75070. exports.AccountID = void 0;
  75071. const ripple_address_codec_1 = __webpack_require__(88914);
  75072. const hash_160_1 = __webpack_require__(29292);
  75073. const buffer_1 = __webpack_require__(49691);
  75074. const HEX_REGEX = /^[A-F0-9]{40}$/;
  75075. /**
  75076. * Class defining how to encode and decode an AccountID
  75077. */
  75078. class AccountID extends hash_160_1.Hash160 {
  75079. constructor(bytes) {
  75080. super(bytes !== null && bytes !== void 0 ? bytes : AccountID.defaultAccountID.bytes);
  75081. }
  75082. /**
  75083. * Defines how to construct an AccountID
  75084. *
  75085. * @param value either an existing AccountID, a hex-string, or a base58 r-Address
  75086. * @returns an AccountID object
  75087. */
  75088. static from(value) {
  75089. if (value instanceof AccountID) {
  75090. return value;
  75091. }
  75092. if (typeof value === 'string') {
  75093. if (value === '') {
  75094. return new AccountID();
  75095. }
  75096. return HEX_REGEX.test(value)
  75097. ? new AccountID(buffer_1.Buffer.from(value, 'hex'))
  75098. : this.fromBase58(value);
  75099. }
  75100. throw new Error('Cannot construct AccountID from value given');
  75101. }
  75102. /**
  75103. * Defines how to build an AccountID from a base58 r-Address
  75104. *
  75105. * @param value a base58 r-Address
  75106. * @returns an AccountID object
  75107. */
  75108. static fromBase58(value) {
  75109. if ((0, ripple_address_codec_1.isValidXAddress)(value)) {
  75110. const classic = (0, ripple_address_codec_1.xAddressToClassicAddress)(value);
  75111. if (classic.tag !== false)
  75112. throw new Error('Only allowed to have tag on Account or Destination');
  75113. value = classic.classicAddress;
  75114. }
  75115. return new AccountID(buffer_1.Buffer.from((0, ripple_address_codec_1.decodeAccountID)(value)));
  75116. }
  75117. /**
  75118. * Overload of toJSON
  75119. *
  75120. * @returns the base58 string for this AccountID
  75121. */
  75122. toJSON() {
  75123. return this.toBase58();
  75124. }
  75125. /**
  75126. * Defines how to encode AccountID into a base58 address
  75127. *
  75128. * @returns the base58 string defined by this.bytes
  75129. */
  75130. toBase58() {
  75131. /* eslint-disable @typescript-eslint/no-explicit-any */
  75132. return (0, ripple_address_codec_1.encodeAccountID)(this.bytes);
  75133. /* eslint-enable @typescript-eslint/no-explicit-any */
  75134. }
  75135. }
  75136. exports.AccountID = AccountID;
  75137. AccountID.defaultAccountID = new AccountID(buffer_1.Buffer.alloc(20));
  75138. //# sourceMappingURL=account-id.js.map
  75139. /***/ }),
  75140. /***/ 78914:
  75141. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75142. "use strict";
  75143. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75144. exports.Amount = void 0;
  75145. const decimal_js_1 = __webpack_require__(93776);
  75146. const binary_parser_1 = __webpack_require__(46633);
  75147. const account_id_1 = __webpack_require__(50403);
  75148. const currency_1 = __webpack_require__(729);
  75149. const serialized_type_1 = __webpack_require__(51883);
  75150. const bigInt = __webpack_require__(24736);
  75151. const buffer_1 = __webpack_require__(49691);
  75152. /**
  75153. * Constants for validating amounts
  75154. */
  75155. const MIN_IOU_EXPONENT = -96;
  75156. const MAX_IOU_EXPONENT = 80;
  75157. const MAX_IOU_PRECISION = 16;
  75158. const MAX_DROPS = new decimal_js_1.Decimal('1e17');
  75159. const MIN_XRP = new decimal_js_1.Decimal('1e-6');
  75160. const mask = bigInt(0x00000000ffffffff);
  75161. /**
  75162. * decimal.js configuration for Amount IOUs
  75163. */
  75164. decimal_js_1.Decimal.config({
  75165. toExpPos: MAX_IOU_EXPONENT + MAX_IOU_PRECISION,
  75166. toExpNeg: MIN_IOU_EXPONENT - MAX_IOU_PRECISION,
  75167. });
  75168. /**
  75169. * Type guard for AmountObject
  75170. */
  75171. function isAmountObject(arg) {
  75172. const keys = Object.keys(arg).sort();
  75173. return (keys.length === 3 &&
  75174. keys[0] === 'currency' &&
  75175. keys[1] === 'issuer' &&
  75176. keys[2] === 'value');
  75177. }
  75178. /**
  75179. * Class for serializing/Deserializing Amounts
  75180. */
  75181. class Amount extends serialized_type_1.SerializedType {
  75182. constructor(bytes) {
  75183. super(bytes !== null && bytes !== void 0 ? bytes : Amount.defaultAmount.bytes);
  75184. }
  75185. /**
  75186. * Construct an amount from an IOU or string amount
  75187. *
  75188. * @param value An Amount, object representing an IOU, or a string
  75189. * representing an integer amount
  75190. * @returns An Amount object
  75191. */
  75192. static from(value) {
  75193. if (value instanceof Amount) {
  75194. return value;
  75195. }
  75196. let amount = buffer_1.Buffer.alloc(8);
  75197. if (typeof value === 'string') {
  75198. Amount.assertXrpIsValid(value);
  75199. const number = bigInt(value);
  75200. const intBuf = [buffer_1.Buffer.alloc(4), buffer_1.Buffer.alloc(4)];
  75201. intBuf[0].writeUInt32BE(Number(number.shiftRight(32)), 0);
  75202. intBuf[1].writeUInt32BE(Number(number.and(mask)), 0);
  75203. amount = buffer_1.Buffer.concat(intBuf);
  75204. amount[0] |= 0x40;
  75205. return new Amount(amount);
  75206. }
  75207. if (isAmountObject(value)) {
  75208. const number = new decimal_js_1.Decimal(value.value);
  75209. Amount.assertIouIsValid(number);
  75210. if (number.isZero()) {
  75211. amount[0] |= 0x80;
  75212. }
  75213. else {
  75214. const integerNumberString = number
  75215. .times(`1e${-(number.e - 15)}`)
  75216. .abs()
  75217. .toString();
  75218. const num = bigInt(integerNumberString);
  75219. const intBuf = [buffer_1.Buffer.alloc(4), buffer_1.Buffer.alloc(4)];
  75220. intBuf[0].writeUInt32BE(Number(num.shiftRight(32)), 0);
  75221. intBuf[1].writeUInt32BE(Number(num.and(mask)), 0);
  75222. amount = buffer_1.Buffer.concat(intBuf);
  75223. amount[0] |= 0x80;
  75224. if (number.gt(new decimal_js_1.Decimal(0))) {
  75225. amount[0] |= 0x40;
  75226. }
  75227. const exponent = number.e - 15;
  75228. const exponentByte = 97 + exponent;
  75229. amount[0] |= exponentByte >>> 2;
  75230. amount[1] |= (exponentByte & 0x03) << 6;
  75231. }
  75232. const currency = currency_1.Currency.from(value.currency).toBytes();
  75233. const issuer = account_id_1.AccountID.from(value.issuer).toBytes();
  75234. return new Amount(buffer_1.Buffer.concat([amount, currency, issuer]));
  75235. }
  75236. throw new Error('Invalid type to construct an Amount');
  75237. }
  75238. /**
  75239. * Read an amount from a BinaryParser
  75240. *
  75241. * @param parser BinaryParser to read the Amount from
  75242. * @returns An Amount object
  75243. */
  75244. static fromParser(parser) {
  75245. const isXRP = parser.peek() & 0x80;
  75246. const numBytes = isXRP ? 48 : 8;
  75247. return new Amount(parser.read(numBytes));
  75248. }
  75249. /**
  75250. * Get the JSON representation of this Amount
  75251. *
  75252. * @returns the JSON interpretation of this.bytes
  75253. */
  75254. toJSON() {
  75255. if (this.isNative()) {
  75256. const bytes = this.bytes;
  75257. const isPositive = bytes[0] & 0x40;
  75258. const sign = isPositive ? '' : '-';
  75259. bytes[0] &= 0x3f;
  75260. const msb = bigInt(bytes.slice(0, 4).readUInt32BE(0));
  75261. const lsb = bigInt(bytes.slice(4).readUInt32BE(0));
  75262. const num = msb.shiftLeft(32).or(lsb);
  75263. return `${sign}${num.toString()}`;
  75264. }
  75265. else {
  75266. const parser = new binary_parser_1.BinaryParser(this.toString());
  75267. const mantissa = parser.read(8);
  75268. const currency = currency_1.Currency.fromParser(parser);
  75269. const issuer = account_id_1.AccountID.fromParser(parser);
  75270. const b1 = mantissa[0];
  75271. const b2 = mantissa[1];
  75272. const isPositive = b1 & 0x40;
  75273. const sign = isPositive ? '' : '-';
  75274. const exponent = ((b1 & 0x3f) << 2) + ((b2 & 0xff) >> 6) - 97;
  75275. mantissa[0] = 0;
  75276. mantissa[1] &= 0x3f;
  75277. const value = new decimal_js_1.Decimal(`${sign}0x${mantissa.toString('hex')}`).times(`1e${exponent}`);
  75278. Amount.assertIouIsValid(value);
  75279. return {
  75280. value: value.toString(),
  75281. currency: currency.toJSON(),
  75282. issuer: issuer.toJSON(),
  75283. };
  75284. }
  75285. }
  75286. /**
  75287. * Validate XRP amount
  75288. *
  75289. * @param amount String representing XRP amount
  75290. * @returns void, but will throw if invalid amount
  75291. */
  75292. static assertXrpIsValid(amount) {
  75293. if (amount.indexOf('.') !== -1) {
  75294. throw new Error(`${amount.toString()} is an illegal amount`);
  75295. }
  75296. const decimal = new decimal_js_1.Decimal(amount);
  75297. if (!decimal.isZero()) {
  75298. if (decimal.lt(MIN_XRP) || decimal.gt(MAX_DROPS)) {
  75299. throw new Error(`${amount.toString()} is an illegal amount`);
  75300. }
  75301. }
  75302. }
  75303. /**
  75304. * Validate IOU.value amount
  75305. *
  75306. * @param decimal Decimal.js object representing IOU.value
  75307. * @returns void, but will throw if invalid amount
  75308. */
  75309. static assertIouIsValid(decimal) {
  75310. if (!decimal.isZero()) {
  75311. const p = decimal.precision();
  75312. const e = decimal.e - 15;
  75313. if (p > MAX_IOU_PRECISION ||
  75314. e > MAX_IOU_EXPONENT ||
  75315. e < MIN_IOU_EXPONENT) {
  75316. throw new Error('Decimal precision out of range');
  75317. }
  75318. this.verifyNoDecimal(decimal);
  75319. }
  75320. }
  75321. /**
  75322. * Ensure that the value after being multiplied by the exponent does not
  75323. * contain a decimal.
  75324. *
  75325. * @param decimal a Decimal object
  75326. * @returns a string of the object without a decimal
  75327. */
  75328. static verifyNoDecimal(decimal) {
  75329. const integerNumberString = decimal
  75330. .times(`1e${-(decimal.e - 15)}`)
  75331. .abs()
  75332. .toString();
  75333. if (integerNumberString.indexOf('.') !== -1) {
  75334. throw new Error('Decimal place found in integerNumberString');
  75335. }
  75336. }
  75337. /**
  75338. * Test if this amount is in units of Native Currency(XRP)
  75339. *
  75340. * @returns true if Native (XRP)
  75341. */
  75342. isNative() {
  75343. return (this.bytes[0] & 0x80) === 0;
  75344. }
  75345. }
  75346. exports.Amount = Amount;
  75347. Amount.defaultAmount = new Amount(buffer_1.Buffer.from('4000000000000000', 'hex'));
  75348. //# sourceMappingURL=amount.js.map
  75349. /***/ }),
  75350. /***/ 8906:
  75351. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75352. "use strict";
  75353. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75354. exports.Blob = void 0;
  75355. const serialized_type_1 = __webpack_require__(51883);
  75356. const buffer_1 = __webpack_require__(49691);
  75357. /**
  75358. * Variable length encoded type
  75359. */
  75360. class Blob extends serialized_type_1.SerializedType {
  75361. constructor(bytes) {
  75362. super(bytes);
  75363. }
  75364. /**
  75365. * Defines how to read a Blob from a BinaryParser
  75366. *
  75367. * @param parser The binary parser to read the Blob from
  75368. * @param hint The length of the blob, computed by readVariableLengthLength() and passed in
  75369. * @returns A Blob object
  75370. */
  75371. static fromParser(parser, hint) {
  75372. return new Blob(parser.read(hint));
  75373. }
  75374. /**
  75375. * Create a Blob object from a hex-string
  75376. *
  75377. * @param value existing Blob object or a hex-string
  75378. * @returns A Blob object
  75379. */
  75380. static from(value) {
  75381. if (value instanceof Blob) {
  75382. return value;
  75383. }
  75384. if (typeof value === 'string') {
  75385. return new Blob(buffer_1.Buffer.from(value, 'hex'));
  75386. }
  75387. throw new Error('Cannot construct Blob from value given');
  75388. }
  75389. }
  75390. exports.Blob = Blob;
  75391. //# sourceMappingURL=blob.js.map
  75392. /***/ }),
  75393. /***/ 729:
  75394. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75395. "use strict";
  75396. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75397. exports.Currency = void 0;
  75398. const hash_160_1 = __webpack_require__(29292);
  75399. const buffer_1 = __webpack_require__(49691);
  75400. const XRP_HEX_REGEX = /^0{40}$/;
  75401. const ISO_REGEX = /^[A-Z0-9a-z?!@#$%^&*(){}[\]|]{3}$/;
  75402. const HEX_REGEX = /^[A-F0-9]{40}$/;
  75403. // eslint-disable-next-line no-control-regex
  75404. const STANDARD_FORMAT_HEX_REGEX = /^0{24}[\x00-\x7F]{6}0{10}$/;
  75405. /**
  75406. * Convert an ISO code to a currency bytes representation
  75407. */
  75408. function isoToBytes(iso) {
  75409. const bytes = buffer_1.Buffer.alloc(20);
  75410. if (iso !== 'XRP') {
  75411. const isoBytes = iso.split('').map((c) => c.charCodeAt(0));
  75412. bytes.set(isoBytes, 12);
  75413. }
  75414. return bytes;
  75415. }
  75416. /**
  75417. * Tests if ISO is a valid iso code
  75418. */
  75419. function isIsoCode(iso) {
  75420. return ISO_REGEX.test(iso);
  75421. }
  75422. function isoCodeFromHex(code) {
  75423. const iso = code.toString();
  75424. if (iso === 'XRP') {
  75425. return null;
  75426. }
  75427. if (isIsoCode(iso)) {
  75428. return iso;
  75429. }
  75430. return null;
  75431. }
  75432. /**
  75433. * Tests if hex is a valid hex-string
  75434. */
  75435. function isHex(hex) {
  75436. return HEX_REGEX.test(hex);
  75437. }
  75438. /**
  75439. * Tests if a string is a valid representation of a currency
  75440. */
  75441. function isStringRepresentation(input) {
  75442. return input.length === 3 || isHex(input);
  75443. }
  75444. /**
  75445. * Tests if a Buffer is a valid representation of a currency
  75446. */
  75447. function isBytesArray(bytes) {
  75448. return bytes.byteLength === 20;
  75449. }
  75450. /**
  75451. * Ensures that a value is a valid representation of a currency
  75452. */
  75453. function isValidRepresentation(input) {
  75454. return input instanceof buffer_1.Buffer
  75455. ? isBytesArray(input)
  75456. : isStringRepresentation(input);
  75457. }
  75458. /**
  75459. * Generate bytes from a string or buffer representation of a currency
  75460. */
  75461. function bytesFromRepresentation(input) {
  75462. if (!isValidRepresentation(input)) {
  75463. throw new Error(`Unsupported Currency representation: ${input}`);
  75464. }
  75465. return input.length === 3 ? isoToBytes(input) : buffer_1.Buffer.from(input, 'hex');
  75466. }
  75467. /**
  75468. * Class defining how to encode and decode Currencies
  75469. */
  75470. class Currency extends hash_160_1.Hash160 {
  75471. constructor(byteBuf) {
  75472. super(byteBuf !== null && byteBuf !== void 0 ? byteBuf : Currency.XRP.bytes);
  75473. const hex = this.bytes.toString('hex');
  75474. if (XRP_HEX_REGEX.test(hex)) {
  75475. this._iso = 'XRP';
  75476. }
  75477. else if (STANDARD_FORMAT_HEX_REGEX.test(hex)) {
  75478. this._iso = isoCodeFromHex(this.bytes.slice(12, 15));
  75479. }
  75480. else {
  75481. this._iso = null;
  75482. }
  75483. }
  75484. /**
  75485. * Return the ISO code of this currency
  75486. *
  75487. * @returns ISO code if it exists, else null
  75488. */
  75489. iso() {
  75490. return this._iso;
  75491. }
  75492. /**
  75493. * Constructs a Currency object
  75494. *
  75495. * @param val Currency object or a string representation of a currency
  75496. */
  75497. static from(value) {
  75498. if (value instanceof Currency) {
  75499. return value;
  75500. }
  75501. if (typeof value === 'string') {
  75502. return new Currency(bytesFromRepresentation(value));
  75503. }
  75504. throw new Error('Cannot construct Currency from value given');
  75505. }
  75506. /**
  75507. * Gets the JSON representation of a currency
  75508. *
  75509. * @returns JSON representation
  75510. */
  75511. toJSON() {
  75512. const iso = this.iso();
  75513. if (iso !== null) {
  75514. return iso;
  75515. }
  75516. return this.bytes.toString('hex').toUpperCase();
  75517. }
  75518. }
  75519. exports.Currency = Currency;
  75520. Currency.XRP = new Currency(buffer_1.Buffer.alloc(20));
  75521. //# sourceMappingURL=currency.js.map
  75522. /***/ }),
  75523. /***/ 47477:
  75524. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75525. "use strict";
  75526. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75527. exports.Hash128 = void 0;
  75528. const hash_1 = __webpack_require__(80142);
  75529. const buffer_1 = __webpack_require__(49691);
  75530. /**
  75531. * Hash with a width of 128 bits
  75532. */
  75533. class Hash128 extends hash_1.Hash {
  75534. constructor(bytes) {
  75535. if (bytes && bytes.byteLength === 0) {
  75536. bytes = Hash128.ZERO_128.bytes;
  75537. }
  75538. super(bytes !== null && bytes !== void 0 ? bytes : Hash128.ZERO_128.bytes);
  75539. }
  75540. /**
  75541. * Get the hex representation of a hash-128 bytes, allowing unset
  75542. *
  75543. * @returns hex String of this.bytes
  75544. */
  75545. toHex() {
  75546. const hex = this.toBytes().toString('hex').toUpperCase();
  75547. if (/^0+$/.exec(hex)) {
  75548. return '';
  75549. }
  75550. return hex;
  75551. }
  75552. }
  75553. exports.Hash128 = Hash128;
  75554. Hash128.width = 16;
  75555. Hash128.ZERO_128 = new Hash128(buffer_1.Buffer.alloc(Hash128.width));
  75556. //# sourceMappingURL=hash-128.js.map
  75557. /***/ }),
  75558. /***/ 29292:
  75559. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75560. "use strict";
  75561. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75562. exports.Hash160 = void 0;
  75563. const hash_1 = __webpack_require__(80142);
  75564. const buffer_1 = __webpack_require__(49691);
  75565. /**
  75566. * Hash with a width of 160 bits
  75567. */
  75568. class Hash160 extends hash_1.Hash {
  75569. constructor(bytes) {
  75570. if (bytes && bytes.byteLength === 0) {
  75571. bytes = Hash160.ZERO_160.bytes;
  75572. }
  75573. super(bytes !== null && bytes !== void 0 ? bytes : Hash160.ZERO_160.bytes);
  75574. }
  75575. }
  75576. exports.Hash160 = Hash160;
  75577. Hash160.width = 20;
  75578. Hash160.ZERO_160 = new Hash160(buffer_1.Buffer.alloc(Hash160.width));
  75579. //# sourceMappingURL=hash-160.js.map
  75580. /***/ }),
  75581. /***/ 9334:
  75582. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75583. "use strict";
  75584. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75585. exports.Hash256 = void 0;
  75586. const hash_1 = __webpack_require__(80142);
  75587. const buffer_1 = __webpack_require__(49691);
  75588. /**
  75589. * Hash with a width of 256 bits
  75590. */
  75591. class Hash256 extends hash_1.Hash {
  75592. constructor(bytes) {
  75593. super(bytes !== null && bytes !== void 0 ? bytes : Hash256.ZERO_256.bytes);
  75594. }
  75595. }
  75596. exports.Hash256 = Hash256;
  75597. Hash256.width = 32;
  75598. Hash256.ZERO_256 = new Hash256(buffer_1.Buffer.alloc(Hash256.width));
  75599. //# sourceMappingURL=hash-256.js.map
  75600. /***/ }),
  75601. /***/ 80142:
  75602. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75603. "use strict";
  75604. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75605. exports.Hash = void 0;
  75606. const serialized_type_1 = __webpack_require__(51883);
  75607. const buffer_1 = __webpack_require__(49691);
  75608. /**
  75609. * Base class defining how to encode and decode hashes
  75610. */
  75611. class Hash extends serialized_type_1.Comparable {
  75612. constructor(bytes) {
  75613. super(bytes);
  75614. if (this.bytes.byteLength !== this.constructor.width) {
  75615. throw new Error(`Invalid Hash length ${this.bytes.byteLength}`);
  75616. }
  75617. }
  75618. /**
  75619. * Construct a Hash object from an existing Hash object or a hex-string
  75620. *
  75621. * @param value A hash object or hex-string of a hash
  75622. */
  75623. static from(value) {
  75624. if (value instanceof this) {
  75625. return value;
  75626. }
  75627. if (typeof value === 'string') {
  75628. return new this(buffer_1.Buffer.from(value, 'hex'));
  75629. }
  75630. throw new Error('Cannot construct Hash from given value');
  75631. }
  75632. /**
  75633. * Read a Hash object from a BinaryParser
  75634. *
  75635. * @param parser BinaryParser to read the hash from
  75636. * @param hint length of the bytes to read, optional
  75637. */
  75638. static fromParser(parser, hint) {
  75639. return new this(parser.read(hint !== null && hint !== void 0 ? hint : this.width));
  75640. }
  75641. /**
  75642. * Overloaded operator for comparing two hash objects
  75643. *
  75644. * @param other The Hash to compare this to
  75645. */
  75646. compareTo(other) {
  75647. return this.bytes.compare(this.constructor.from(other).bytes);
  75648. }
  75649. /**
  75650. * @returns the hex-string representation of this Hash
  75651. */
  75652. toString() {
  75653. return this.toHex();
  75654. }
  75655. /**
  75656. * Returns four bits at the specified depth within a hash
  75657. *
  75658. * @param depth The depth of the four bits
  75659. * @returns The number represented by the four bits
  75660. */
  75661. nibblet(depth) {
  75662. const byteIx = depth > 0 ? (depth / 2) | 0 : 0;
  75663. let b = this.bytes[byteIx];
  75664. if (depth % 2 === 0) {
  75665. b = (b & 0xf0) >>> 4;
  75666. }
  75667. else {
  75668. b = b & 0x0f;
  75669. }
  75670. return b;
  75671. }
  75672. }
  75673. exports.Hash = Hash;
  75674. //# sourceMappingURL=hash.js.map
  75675. /***/ }),
  75676. /***/ 5003:
  75677. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75678. "use strict";
  75679. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75680. exports.coreTypes = void 0;
  75681. const enums_1 = __webpack_require__(4543);
  75682. const account_id_1 = __webpack_require__(50403);
  75683. const amount_1 = __webpack_require__(78914);
  75684. const blob_1 = __webpack_require__(8906);
  75685. const currency_1 = __webpack_require__(729);
  75686. const hash_128_1 = __webpack_require__(47477);
  75687. const hash_160_1 = __webpack_require__(29292);
  75688. const hash_256_1 = __webpack_require__(9334);
  75689. const path_set_1 = __webpack_require__(66284);
  75690. const st_array_1 = __webpack_require__(91194);
  75691. const st_object_1 = __webpack_require__(30409);
  75692. const uint_16_1 = __webpack_require__(13774);
  75693. const uint_32_1 = __webpack_require__(39441);
  75694. const uint_64_1 = __webpack_require__(17569);
  75695. const uint_8_1 = __webpack_require__(97158);
  75696. const vector_256_1 = __webpack_require__(99403);
  75697. const coreTypes = {
  75698. AccountID: account_id_1.AccountID,
  75699. Amount: amount_1.Amount,
  75700. Blob: blob_1.Blob,
  75701. Currency: currency_1.Currency,
  75702. Hash128: hash_128_1.Hash128,
  75703. Hash160: hash_160_1.Hash160,
  75704. Hash256: hash_256_1.Hash256,
  75705. PathSet: path_set_1.PathSet,
  75706. STArray: st_array_1.STArray,
  75707. STObject: st_object_1.STObject,
  75708. UInt8: uint_8_1.UInt8,
  75709. UInt16: uint_16_1.UInt16,
  75710. UInt32: uint_32_1.UInt32,
  75711. UInt64: uint_64_1.UInt64,
  75712. Vector256: vector_256_1.Vector256,
  75713. };
  75714. exports.coreTypes = coreTypes;
  75715. Object.values(enums_1.Field).forEach((field) => {
  75716. field.associatedType = coreTypes[field.type.name];
  75717. });
  75718. enums_1.Field['TransactionType'].associatedType = enums_1.TransactionType;
  75719. enums_1.Field['TransactionResult'].associatedType = enums_1.TransactionResult;
  75720. enums_1.Field['LedgerEntryType'].associatedType = enums_1.LedgerEntryType;
  75721. //# sourceMappingURL=index.js.map
  75722. /***/ }),
  75723. /***/ 66284:
  75724. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75725. "use strict";
  75726. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75727. exports.PathSet = void 0;
  75728. const account_id_1 = __webpack_require__(50403);
  75729. const currency_1 = __webpack_require__(729);
  75730. const binary_parser_1 = __webpack_require__(46633);
  75731. const serialized_type_1 = __webpack_require__(51883);
  75732. const buffer_1 = __webpack_require__(49691);
  75733. /**
  75734. * Constants for separating Paths in a PathSet
  75735. */
  75736. const PATHSET_END_BYTE = 0x00;
  75737. const PATH_SEPARATOR_BYTE = 0xff;
  75738. /**
  75739. * Constant for masking types of a Hop
  75740. */
  75741. const TYPE_ACCOUNT = 0x01;
  75742. const TYPE_CURRENCY = 0x10;
  75743. const TYPE_ISSUER = 0x20;
  75744. /**
  75745. * TypeGuard for HopObject
  75746. */
  75747. function isHopObject(arg) {
  75748. return (arg.issuer !== undefined ||
  75749. arg.account !== undefined ||
  75750. arg.currency !== undefined);
  75751. }
  75752. /**
  75753. * TypeGuard for PathSet
  75754. */
  75755. function isPathSet(arg) {
  75756. return ((Array.isArray(arg) && arg.length === 0) ||
  75757. (Array.isArray(arg) && Array.isArray(arg[0]) && arg[0].length === 0) ||
  75758. (Array.isArray(arg) && Array.isArray(arg[0]) && isHopObject(arg[0][0])));
  75759. }
  75760. /**
  75761. * Serialize and Deserialize a Hop
  75762. */
  75763. class Hop extends serialized_type_1.SerializedType {
  75764. /**
  75765. * Create a Hop from a HopObject
  75766. *
  75767. * @param value Either a hop or HopObject to create a hop with
  75768. * @returns a Hop
  75769. */
  75770. static from(value) {
  75771. if (value instanceof Hop) {
  75772. return value;
  75773. }
  75774. const bytes = [buffer_1.Buffer.from([0])];
  75775. if (value.account) {
  75776. bytes.push(account_id_1.AccountID.from(value.account).toBytes());
  75777. bytes[0][0] |= TYPE_ACCOUNT;
  75778. }
  75779. if (value.currency) {
  75780. bytes.push(currency_1.Currency.from(value.currency).toBytes());
  75781. bytes[0][0] |= TYPE_CURRENCY;
  75782. }
  75783. if (value.issuer) {
  75784. bytes.push(account_id_1.AccountID.from(value.issuer).toBytes());
  75785. bytes[0][0] |= TYPE_ISSUER;
  75786. }
  75787. return new Hop(buffer_1.Buffer.concat(bytes));
  75788. }
  75789. /**
  75790. * Construct a Hop from a BinaryParser
  75791. *
  75792. * @param parser BinaryParser to read the Hop from
  75793. * @returns a Hop
  75794. */
  75795. static fromParser(parser) {
  75796. const type = parser.readUInt8();
  75797. const bytes = [buffer_1.Buffer.from([type])];
  75798. if (type & TYPE_ACCOUNT) {
  75799. bytes.push(parser.read(account_id_1.AccountID.width));
  75800. }
  75801. if (type & TYPE_CURRENCY) {
  75802. bytes.push(parser.read(currency_1.Currency.width));
  75803. }
  75804. if (type & TYPE_ISSUER) {
  75805. bytes.push(parser.read(account_id_1.AccountID.width));
  75806. }
  75807. return new Hop(buffer_1.Buffer.concat(bytes));
  75808. }
  75809. /**
  75810. * Get the JSON interpretation of this hop
  75811. *
  75812. * @returns a HopObject, an JS object with optional account, issuer, and currency
  75813. */
  75814. toJSON() {
  75815. const hopParser = new binary_parser_1.BinaryParser(this.bytes.toString('hex'));
  75816. const type = hopParser.readUInt8();
  75817. let account, currency, issuer;
  75818. if (type & TYPE_ACCOUNT) {
  75819. account = account_id_1.AccountID.fromParser(hopParser).toJSON();
  75820. }
  75821. if (type & TYPE_CURRENCY) {
  75822. currency = currency_1.Currency.fromParser(hopParser).toJSON();
  75823. }
  75824. if (type & TYPE_ISSUER) {
  75825. issuer = account_id_1.AccountID.fromParser(hopParser).toJSON();
  75826. }
  75827. const result = {};
  75828. if (account) {
  75829. result.account = account;
  75830. }
  75831. if (issuer) {
  75832. result.issuer = issuer;
  75833. }
  75834. if (currency) {
  75835. result.currency = currency;
  75836. }
  75837. return result;
  75838. }
  75839. /**
  75840. * get a number representing the type of this hop
  75841. *
  75842. * @returns a number to be bitwise and-ed with TYPE_ constants to describe the types in the hop
  75843. */
  75844. type() {
  75845. return this.bytes[0];
  75846. }
  75847. }
  75848. /**
  75849. * Class for serializing/deserializing Paths
  75850. */
  75851. class Path extends serialized_type_1.SerializedType {
  75852. /**
  75853. * construct a Path from an array of Hops
  75854. *
  75855. * @param value Path or array of HopObjects to construct a Path
  75856. * @returns the Path
  75857. */
  75858. static from(value) {
  75859. if (value instanceof Path) {
  75860. return value;
  75861. }
  75862. const bytes = [];
  75863. value.forEach((hop) => {
  75864. bytes.push(Hop.from(hop).toBytes());
  75865. });
  75866. return new Path(buffer_1.Buffer.concat(bytes));
  75867. }
  75868. /**
  75869. * Read a Path from a BinaryParser
  75870. *
  75871. * @param parser BinaryParser to read Path from
  75872. * @returns the Path represented by the bytes read from the BinaryParser
  75873. */
  75874. static fromParser(parser) {
  75875. const bytes = [];
  75876. while (!parser.end()) {
  75877. bytes.push(Hop.fromParser(parser).toBytes());
  75878. if (parser.peek() === PATHSET_END_BYTE ||
  75879. parser.peek() === PATH_SEPARATOR_BYTE) {
  75880. break;
  75881. }
  75882. }
  75883. return new Path(buffer_1.Buffer.concat(bytes));
  75884. }
  75885. /**
  75886. * Get the JSON representation of this Path
  75887. *
  75888. * @returns an Array of HopObject constructed from this.bytes
  75889. */
  75890. toJSON() {
  75891. const json = [];
  75892. const pathParser = new binary_parser_1.BinaryParser(this.toString());
  75893. while (!pathParser.end()) {
  75894. json.push(Hop.fromParser(pathParser).toJSON());
  75895. }
  75896. return json;
  75897. }
  75898. }
  75899. /**
  75900. * Deserialize and Serialize the PathSet type
  75901. */
  75902. class PathSet extends serialized_type_1.SerializedType {
  75903. /**
  75904. * Construct a PathSet from an Array of Arrays representing paths
  75905. *
  75906. * @param value A PathSet or Array of Array of HopObjects
  75907. * @returns the PathSet constructed from value
  75908. */
  75909. static from(value) {
  75910. if (value instanceof PathSet) {
  75911. return value;
  75912. }
  75913. if (isPathSet(value)) {
  75914. const bytes = [];
  75915. value.forEach((path) => {
  75916. bytes.push(Path.from(path).toBytes());
  75917. bytes.push(buffer_1.Buffer.from([PATH_SEPARATOR_BYTE]));
  75918. });
  75919. bytes[bytes.length - 1] = buffer_1.Buffer.from([PATHSET_END_BYTE]);
  75920. return new PathSet(buffer_1.Buffer.concat(bytes));
  75921. }
  75922. throw new Error('Cannot construct PathSet from given value');
  75923. }
  75924. /**
  75925. * Construct a PathSet from a BinaryParser
  75926. *
  75927. * @param parser A BinaryParser to read PathSet from
  75928. * @returns the PathSet read from parser
  75929. */
  75930. static fromParser(parser) {
  75931. const bytes = [];
  75932. while (!parser.end()) {
  75933. bytes.push(Path.fromParser(parser).toBytes());
  75934. bytes.push(parser.read(1));
  75935. if (bytes[bytes.length - 1][0] == PATHSET_END_BYTE) {
  75936. break;
  75937. }
  75938. }
  75939. return new PathSet(buffer_1.Buffer.concat(bytes));
  75940. }
  75941. /**
  75942. * Get the JSON representation of this PathSet
  75943. *
  75944. * @returns an Array of Array of HopObjects, representing this PathSet
  75945. */
  75946. toJSON() {
  75947. const json = [];
  75948. const pathParser = new binary_parser_1.BinaryParser(this.toString());
  75949. while (!pathParser.end()) {
  75950. json.push(Path.fromParser(pathParser).toJSON());
  75951. pathParser.skip(1);
  75952. }
  75953. return json;
  75954. }
  75955. }
  75956. exports.PathSet = PathSet;
  75957. //# sourceMappingURL=path-set.js.map
  75958. /***/ }),
  75959. /***/ 51883:
  75960. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  75961. "use strict";
  75962. Object.defineProperty(exports, "__esModule", ({ value: true }));
  75963. exports.Comparable = exports.SerializedType = void 0;
  75964. const binary_serializer_1 = __webpack_require__(27894);
  75965. const buffer_1 = __webpack_require__(49691);
  75966. /**
  75967. * The base class for all binary-codec types
  75968. */
  75969. class SerializedType {
  75970. constructor(bytes) {
  75971. this.bytes = buffer_1.Buffer.alloc(0);
  75972. this.bytes = bytes !== null && bytes !== void 0 ? bytes : buffer_1.Buffer.alloc(0);
  75973. }
  75974. static fromParser(parser, hint) {
  75975. throw new Error('fromParser not implemented');
  75976. return this.fromParser(parser, hint);
  75977. }
  75978. static from(value) {
  75979. throw new Error('from not implemented');
  75980. return this.from(value);
  75981. }
  75982. /**
  75983. * Write the bytes representation of a SerializedType to a BytesList
  75984. *
  75985. * @param list The BytesList to write SerializedType bytes to
  75986. */
  75987. toBytesSink(list) {
  75988. list.put(this.bytes);
  75989. }
  75990. /**
  75991. * Get the hex representation of a SerializedType's bytes
  75992. *
  75993. * @returns hex String of this.bytes
  75994. */
  75995. toHex() {
  75996. return this.toBytes().toString('hex').toUpperCase();
  75997. }
  75998. /**
  75999. * Get the bytes representation of a SerializedType
  76000. *
  76001. * @returns A buffer of the bytes
  76002. */
  76003. toBytes() {
  76004. if (this.bytes) {
  76005. return this.bytes;
  76006. }
  76007. const bytes = new binary_serializer_1.BytesList();
  76008. this.toBytesSink(bytes);
  76009. return bytes.toBytes();
  76010. }
  76011. /**
  76012. * Return the JSON representation of a SerializedType
  76013. *
  76014. * @returns any type, if not overloaded returns hexString representation of bytes
  76015. */
  76016. toJSON() {
  76017. return this.toHex();
  76018. }
  76019. /**
  76020. * @returns hexString representation of this.bytes
  76021. */
  76022. toString() {
  76023. return this.toHex();
  76024. }
  76025. }
  76026. exports.SerializedType = SerializedType;
  76027. /**
  76028. * Base class for SerializedTypes that are comparable
  76029. */
  76030. class Comparable extends SerializedType {
  76031. lt(other) {
  76032. return this.compareTo(other) < 0;
  76033. }
  76034. eq(other) {
  76035. return this.compareTo(other) === 0;
  76036. }
  76037. gt(other) {
  76038. return this.compareTo(other) > 0;
  76039. }
  76040. gte(other) {
  76041. return this.compareTo(other) > -1;
  76042. }
  76043. lte(other) {
  76044. return this.compareTo(other) < 1;
  76045. }
  76046. /**
  76047. * Overload this method to define how two Comparable SerializedTypes are compared
  76048. *
  76049. * @param other The comparable object to compare this to
  76050. * @returns A number denoting the relationship of this and other
  76051. */
  76052. compareTo(other) {
  76053. throw new Error(`cannot compare ${this.toString()} and ${other.toString()}`);
  76054. }
  76055. }
  76056. exports.Comparable = Comparable;
  76057. //# sourceMappingURL=serialized-type.js.map
  76058. /***/ }),
  76059. /***/ 91194:
  76060. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76061. "use strict";
  76062. Object.defineProperty(exports, "__esModule", ({ value: true }));
  76063. exports.STArray = void 0;
  76064. const serialized_type_1 = __webpack_require__(51883);
  76065. const st_object_1 = __webpack_require__(30409);
  76066. const binary_parser_1 = __webpack_require__(46633);
  76067. const buffer_1 = __webpack_require__(49691);
  76068. const ARRAY_END_MARKER = buffer_1.Buffer.from([0xf1]);
  76069. const ARRAY_END_MARKER_NAME = 'ArrayEndMarker';
  76070. const OBJECT_END_MARKER = buffer_1.Buffer.from([0xe1]);
  76071. /**
  76072. * TypeGuard for Array<JsonObject>
  76073. */
  76074. function isObjects(args) {
  76075. return (Array.isArray(args) && (args.length === 0 || typeof args[0] === 'object'));
  76076. }
  76077. /**
  76078. * Class for serializing and deserializing Arrays of Objects
  76079. */
  76080. class STArray extends serialized_type_1.SerializedType {
  76081. /**
  76082. * Construct an STArray from a BinaryParser
  76083. *
  76084. * @param parser BinaryParser to parse an STArray from
  76085. * @returns An STArray Object
  76086. */
  76087. static fromParser(parser) {
  76088. const bytes = [];
  76089. while (!parser.end()) {
  76090. const field = parser.readField();
  76091. if (field.name === ARRAY_END_MARKER_NAME) {
  76092. break;
  76093. }
  76094. bytes.push(field.header, parser.readFieldValue(field).toBytes(), OBJECT_END_MARKER);
  76095. }
  76096. bytes.push(ARRAY_END_MARKER);
  76097. return new STArray(buffer_1.Buffer.concat(bytes));
  76098. }
  76099. /**
  76100. * Construct an STArray from an Array of JSON Objects
  76101. *
  76102. * @param value STArray or Array of Objects to parse into an STArray
  76103. * @returns An STArray object
  76104. */
  76105. static from(value) {
  76106. if (value instanceof STArray) {
  76107. return value;
  76108. }
  76109. if (isObjects(value)) {
  76110. const bytes = [];
  76111. value.forEach((obj) => {
  76112. bytes.push(st_object_1.STObject.from(obj).toBytes());
  76113. });
  76114. bytes.push(ARRAY_END_MARKER);
  76115. return new STArray(buffer_1.Buffer.concat(bytes));
  76116. }
  76117. throw new Error('Cannot construct STArray from value given');
  76118. }
  76119. /**
  76120. * Return the JSON representation of this.bytes
  76121. *
  76122. * @returns An Array of JSON objects
  76123. */
  76124. toJSON() {
  76125. const result = [];
  76126. const arrayParser = new binary_parser_1.BinaryParser(this.toString());
  76127. while (!arrayParser.end()) {
  76128. const field = arrayParser.readField();
  76129. if (field.name === ARRAY_END_MARKER_NAME) {
  76130. break;
  76131. }
  76132. const outer = {};
  76133. outer[field.name] = st_object_1.STObject.fromParser(arrayParser).toJSON();
  76134. result.push(outer);
  76135. }
  76136. return result;
  76137. }
  76138. }
  76139. exports.STArray = STArray;
  76140. //# sourceMappingURL=st-array.js.map
  76141. /***/ }),
  76142. /***/ 30409:
  76143. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76144. "use strict";
  76145. Object.defineProperty(exports, "__esModule", ({ value: true }));
  76146. exports.STObject = void 0;
  76147. const enums_1 = __webpack_require__(4543);
  76148. const serialized_type_1 = __webpack_require__(51883);
  76149. const ripple_address_codec_1 = __webpack_require__(88914);
  76150. const binary_parser_1 = __webpack_require__(46633);
  76151. const binary_serializer_1 = __webpack_require__(27894);
  76152. const buffer_1 = __webpack_require__(49691);
  76153. const OBJECT_END_MARKER_BYTE = buffer_1.Buffer.from([0xe1]);
  76154. const OBJECT_END_MARKER = 'ObjectEndMarker';
  76155. const ST_OBJECT = 'STObject';
  76156. const DESTINATION = 'Destination';
  76157. const ACCOUNT = 'Account';
  76158. const SOURCE_TAG = 'SourceTag';
  76159. const DEST_TAG = 'DestinationTag';
  76160. /**
  76161. * Break down an X-Address into an account and a tag
  76162. *
  76163. * @param field Name of field
  76164. * @param xAddress X-Address corresponding to the field
  76165. */
  76166. function handleXAddress(field, xAddress) {
  76167. const decoded = (0, ripple_address_codec_1.xAddressToClassicAddress)(xAddress);
  76168. let tagName;
  76169. if (field === DESTINATION)
  76170. tagName = DEST_TAG;
  76171. else if (field === ACCOUNT)
  76172. tagName = SOURCE_TAG;
  76173. else if (decoded.tag !== false)
  76174. throw new Error(`${field} cannot have an associated tag`);
  76175. return decoded.tag !== false
  76176. ? { [field]: decoded.classicAddress, [tagName]: decoded.tag }
  76177. : { [field]: decoded.classicAddress };
  76178. }
  76179. /**
  76180. * Validate that two objects don't both have the same tag fields
  76181. *
  76182. * @param obj1 First object to check for tags
  76183. * @param obj2 Second object to check for tags
  76184. * @throws When both objects have SourceTag or DestinationTag
  76185. */
  76186. function checkForDuplicateTags(obj1, obj2) {
  76187. if (!(obj1[SOURCE_TAG] === undefined || obj2[SOURCE_TAG] === undefined))
  76188. throw new Error('Cannot have Account X-Address and SourceTag');
  76189. if (!(obj1[DEST_TAG] === undefined || obj2[DEST_TAG] === undefined))
  76190. throw new Error('Cannot have Destination X-Address and DestinationTag');
  76191. }
  76192. /**
  76193. * Class for Serializing/Deserializing objects
  76194. */
  76195. class STObject extends serialized_type_1.SerializedType {
  76196. /**
  76197. * Construct a STObject from a BinaryParser
  76198. *
  76199. * @param parser BinaryParser to read STObject from
  76200. * @returns A STObject object
  76201. */
  76202. static fromParser(parser) {
  76203. const list = new binary_serializer_1.BytesList();
  76204. const bytes = new binary_serializer_1.BinarySerializer(list);
  76205. while (!parser.end()) {
  76206. const field = parser.readField();
  76207. if (field.name === OBJECT_END_MARKER) {
  76208. break;
  76209. }
  76210. const associatedValue = parser.readFieldValue(field);
  76211. bytes.writeFieldAndValue(field, associatedValue);
  76212. if (field.type.name === ST_OBJECT) {
  76213. bytes.put(OBJECT_END_MARKER_BYTE);
  76214. }
  76215. }
  76216. return new STObject(list.toBytes());
  76217. }
  76218. /**
  76219. * Construct a STObject from a JSON object
  76220. *
  76221. * @param value An object to include
  76222. * @param filter optional, denote which field to include in serialized object
  76223. * @returns a STObject object
  76224. */
  76225. static from(value, filter) {
  76226. if (value instanceof STObject) {
  76227. return value;
  76228. }
  76229. const list = new binary_serializer_1.BytesList();
  76230. const bytes = new binary_serializer_1.BinarySerializer(list);
  76231. let isUnlModify = false;
  76232. const xAddressDecoded = Object.entries(value).reduce((acc, [key, val]) => {
  76233. let handled = undefined;
  76234. if (val && (0, ripple_address_codec_1.isValidXAddress)(val.toString())) {
  76235. handled = handleXAddress(key, val.toString());
  76236. checkForDuplicateTags(handled, value);
  76237. }
  76238. return Object.assign(acc, handled !== null && handled !== void 0 ? handled : { [key]: val });
  76239. }, {});
  76240. let sorted = Object.keys(xAddressDecoded)
  76241. .map((f) => enums_1.Field[f])
  76242. .filter((f) => f !== undefined &&
  76243. xAddressDecoded[f.name] !== undefined &&
  76244. f.isSerialized)
  76245. .sort((a, b) => {
  76246. return a.ordinal - b.ordinal;
  76247. });
  76248. if (filter !== undefined) {
  76249. sorted = sorted.filter(filter);
  76250. }
  76251. sorted.forEach((field) => {
  76252. const associatedValue = field.associatedType.from(xAddressDecoded[field.name]);
  76253. if (associatedValue == undefined) {
  76254. throw new TypeError(`Unable to interpret "${field.name}: ${xAddressDecoded[field.name]}".`);
  76255. }
  76256. if (associatedValue.name === 'UNLModify') {
  76257. // triggered when the TransactionType field has a value of 'UNLModify'
  76258. isUnlModify = true;
  76259. }
  76260. // true when in the UNLModify pseudotransaction (after the transaction type has been processed) and working with the
  76261. // Account field
  76262. // The Account field must not be a part of the UNLModify pseudotransaction encoding, due to a bug in rippled
  76263. const isUnlModifyWorkaround = field.name == 'Account' && isUnlModify;
  76264. bytes.writeFieldAndValue(field, associatedValue, isUnlModifyWorkaround);
  76265. if (field.type.name === ST_OBJECT) {
  76266. bytes.put(OBJECT_END_MARKER_BYTE);
  76267. }
  76268. });
  76269. return new STObject(list.toBytes());
  76270. }
  76271. /**
  76272. * Get the JSON interpretation of this.bytes
  76273. *
  76274. * @returns a JSON object
  76275. */
  76276. toJSON() {
  76277. const objectParser = new binary_parser_1.BinaryParser(this.toString());
  76278. const accumulator = {};
  76279. while (!objectParser.end()) {
  76280. const field = objectParser.readField();
  76281. if (field.name === OBJECT_END_MARKER) {
  76282. break;
  76283. }
  76284. accumulator[field.name] = objectParser.readFieldValue(field).toJSON();
  76285. }
  76286. return accumulator;
  76287. }
  76288. }
  76289. exports.STObject = STObject;
  76290. //# sourceMappingURL=st-object.js.map
  76291. /***/ }),
  76292. /***/ 13774:
  76293. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76294. "use strict";
  76295. Object.defineProperty(exports, "__esModule", ({ value: true }));
  76296. exports.UInt16 = void 0;
  76297. const uint_1 = __webpack_require__(46770);
  76298. const buffer_1 = __webpack_require__(49691);
  76299. /**
  76300. * Derived UInt class for serializing/deserializing 16 bit UInt
  76301. */
  76302. class UInt16 extends uint_1.UInt {
  76303. constructor(bytes) {
  76304. super(bytes !== null && bytes !== void 0 ? bytes : UInt16.defaultUInt16.bytes);
  76305. }
  76306. static fromParser(parser) {
  76307. return new UInt16(parser.read(UInt16.width));
  76308. }
  76309. /**
  76310. * Construct a UInt16 object from a number
  76311. *
  76312. * @param val UInt16 object or number
  76313. */
  76314. static from(val) {
  76315. if (val instanceof UInt16) {
  76316. return val;
  76317. }
  76318. if (typeof val === 'number') {
  76319. const buf = buffer_1.Buffer.alloc(UInt16.width);
  76320. buf.writeUInt16BE(val, 0);
  76321. return new UInt16(buf);
  76322. }
  76323. throw new Error('Can not construct UInt16 with given value');
  76324. }
  76325. /**
  76326. * get the value of a UInt16 object
  76327. *
  76328. * @returns the number represented by this.bytes
  76329. */
  76330. valueOf() {
  76331. return this.bytes.readUInt16BE(0);
  76332. }
  76333. }
  76334. exports.UInt16 = UInt16;
  76335. UInt16.width = 16 / 8; // 2
  76336. UInt16.defaultUInt16 = new UInt16(buffer_1.Buffer.alloc(UInt16.width));
  76337. //# sourceMappingURL=uint-16.js.map
  76338. /***/ }),
  76339. /***/ 39441:
  76340. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76341. "use strict";
  76342. Object.defineProperty(exports, "__esModule", ({ value: true }));
  76343. exports.UInt32 = void 0;
  76344. const uint_1 = __webpack_require__(46770);
  76345. const buffer_1 = __webpack_require__(49691);
  76346. /**
  76347. * Derived UInt class for serializing/deserializing 32 bit UInt
  76348. */
  76349. class UInt32 extends uint_1.UInt {
  76350. constructor(bytes) {
  76351. super(bytes !== null && bytes !== void 0 ? bytes : UInt32.defaultUInt32.bytes);
  76352. }
  76353. static fromParser(parser) {
  76354. return new UInt32(parser.read(UInt32.width));
  76355. }
  76356. /**
  76357. * Construct a UInt32 object from a number
  76358. *
  76359. * @param val UInt32 object or number
  76360. */
  76361. static from(val) {
  76362. if (val instanceof UInt32) {
  76363. return val;
  76364. }
  76365. const buf = buffer_1.Buffer.alloc(UInt32.width);
  76366. if (typeof val === 'string') {
  76367. const num = Number.parseInt(val);
  76368. buf.writeUInt32BE(num, 0);
  76369. return new UInt32(buf);
  76370. }
  76371. if (typeof val === 'number') {
  76372. buf.writeUInt32BE(val, 0);
  76373. return new UInt32(buf);
  76374. }
  76375. throw new Error('Cannot construct UInt32 from given value');
  76376. }
  76377. /**
  76378. * get the value of a UInt32 object
  76379. *
  76380. * @returns the number represented by this.bytes
  76381. */
  76382. valueOf() {
  76383. return this.bytes.readUInt32BE(0);
  76384. }
  76385. }
  76386. exports.UInt32 = UInt32;
  76387. UInt32.width = 32 / 8; // 4
  76388. UInt32.defaultUInt32 = new UInt32(buffer_1.Buffer.alloc(UInt32.width));
  76389. //# sourceMappingURL=uint-32.js.map
  76390. /***/ }),
  76391. /***/ 17569:
  76392. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76393. "use strict";
  76394. Object.defineProperty(exports, "__esModule", ({ value: true }));
  76395. exports.UInt64 = void 0;
  76396. const uint_1 = __webpack_require__(46770);
  76397. const bigInt = __webpack_require__(24736);
  76398. const big_integer_1 = __webpack_require__(24736);
  76399. const buffer_1 = __webpack_require__(49691);
  76400. const HEX_REGEX = /^[a-fA-F0-9]{1,16}$/;
  76401. const mask = bigInt(0x00000000ffffffff);
  76402. /**
  76403. * Derived UInt class for serializing/deserializing 64 bit UInt
  76404. */
  76405. class UInt64 extends uint_1.UInt {
  76406. constructor(bytes) {
  76407. super(bytes !== null && bytes !== void 0 ? bytes : UInt64.defaultUInt64.bytes);
  76408. }
  76409. static fromParser(parser) {
  76410. return new UInt64(parser.read(UInt64.width));
  76411. }
  76412. /**
  76413. * Construct a UInt64 object
  76414. *
  76415. * @param val A UInt64, hex-string, bigInt, or number
  76416. * @returns A UInt64 object
  76417. */
  76418. static from(val) {
  76419. if (val instanceof UInt64) {
  76420. return val;
  76421. }
  76422. let buf = buffer_1.Buffer.alloc(UInt64.width);
  76423. if (typeof val === 'number') {
  76424. if (val < 0) {
  76425. throw new Error('value must be an unsigned integer');
  76426. }
  76427. const number = bigInt(val);
  76428. const intBuf = [buffer_1.Buffer.alloc(4), buffer_1.Buffer.alloc(4)];
  76429. intBuf[0].writeUInt32BE(Number(number.shiftRight(32)), 0);
  76430. intBuf[1].writeUInt32BE(Number(number.and(mask)), 0);
  76431. return new UInt64(buffer_1.Buffer.concat(intBuf));
  76432. }
  76433. if (typeof val === 'string') {
  76434. if (!HEX_REGEX.test(val)) {
  76435. throw new Error(`${val} is not a valid hex-string`);
  76436. }
  76437. const strBuf = val.padStart(16, '0');
  76438. buf = buffer_1.Buffer.from(strBuf, 'hex');
  76439. return new UInt64(buf);
  76440. }
  76441. if ((0, big_integer_1.isInstance)(val)) {
  76442. const intBuf = [buffer_1.Buffer.alloc(4), buffer_1.Buffer.alloc(4)];
  76443. intBuf[0].writeUInt32BE(Number(val.shiftRight(bigInt(32))), 0);
  76444. intBuf[1].writeUInt32BE(Number(val.and(mask)), 0);
  76445. return new UInt64(buffer_1.Buffer.concat(intBuf));
  76446. }
  76447. throw new Error('Cannot construct UInt64 from given value');
  76448. }
  76449. /**
  76450. * The JSON representation of a UInt64 object
  76451. *
  76452. * @returns a hex-string
  76453. */
  76454. toJSON() {
  76455. return this.bytes.toString('hex').toUpperCase();
  76456. }
  76457. /**
  76458. * Get the value of the UInt64
  76459. *
  76460. * @returns the number represented buy this.bytes
  76461. */
  76462. valueOf() {
  76463. const msb = bigInt(this.bytes.slice(0, 4).readUInt32BE(0));
  76464. const lsb = bigInt(this.bytes.slice(4).readUInt32BE(0));
  76465. return msb.shiftLeft(bigInt(32)).or(lsb);
  76466. }
  76467. /**
  76468. * Get the bytes representation of the UInt64 object
  76469. *
  76470. * @returns 8 bytes representing the UInt64
  76471. */
  76472. toBytes() {
  76473. return this.bytes;
  76474. }
  76475. }
  76476. exports.UInt64 = UInt64;
  76477. UInt64.width = 64 / 8; // 8
  76478. UInt64.defaultUInt64 = new UInt64(buffer_1.Buffer.alloc(UInt64.width));
  76479. //# sourceMappingURL=uint-64.js.map
  76480. /***/ }),
  76481. /***/ 97158:
  76482. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76483. "use strict";
  76484. Object.defineProperty(exports, "__esModule", ({ value: true }));
  76485. exports.UInt8 = void 0;
  76486. const uint_1 = __webpack_require__(46770);
  76487. const buffer_1 = __webpack_require__(49691);
  76488. /**
  76489. * Derived UInt class for serializing/deserializing 8 bit UInt
  76490. */
  76491. class UInt8 extends uint_1.UInt {
  76492. constructor(bytes) {
  76493. super(bytes !== null && bytes !== void 0 ? bytes : UInt8.defaultUInt8.bytes);
  76494. }
  76495. static fromParser(parser) {
  76496. return new UInt8(parser.read(UInt8.width));
  76497. }
  76498. /**
  76499. * Construct a UInt8 object from a number
  76500. *
  76501. * @param val UInt8 object or number
  76502. */
  76503. static from(val) {
  76504. if (val instanceof UInt8) {
  76505. return val;
  76506. }
  76507. if (typeof val === 'number') {
  76508. const buf = buffer_1.Buffer.alloc(UInt8.width);
  76509. buf.writeUInt8(val, 0);
  76510. return new UInt8(buf);
  76511. }
  76512. throw new Error('Cannot construct UInt8 from given value');
  76513. }
  76514. /**
  76515. * get the value of a UInt8 object
  76516. *
  76517. * @returns the number represented by this.bytes
  76518. */
  76519. valueOf() {
  76520. return this.bytes.readUInt8(0);
  76521. }
  76522. }
  76523. exports.UInt8 = UInt8;
  76524. UInt8.width = 8 / 8; // 1
  76525. UInt8.defaultUInt8 = new UInt8(buffer_1.Buffer.alloc(UInt8.width));
  76526. //# sourceMappingURL=uint-8.js.map
  76527. /***/ }),
  76528. /***/ 46770:
  76529. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76530. "use strict";
  76531. Object.defineProperty(exports, "__esModule", ({ value: true }));
  76532. exports.UInt = void 0;
  76533. const serialized_type_1 = __webpack_require__(51883);
  76534. /**
  76535. * Compare numbers and bigInts n1 and n2
  76536. *
  76537. * @param n1 First object to compare
  76538. * @param n2 Second object to compare
  76539. * @returns -1, 0, or 1, depending on how the two objects compare
  76540. */
  76541. function compare(n1, n2) {
  76542. return n1 < n2 ? -1 : n1 == n2 ? 0 : 1;
  76543. }
  76544. /**
  76545. * Base class for serializing and deserializing unsigned integers.
  76546. */
  76547. class UInt extends serialized_type_1.Comparable {
  76548. constructor(bytes) {
  76549. super(bytes);
  76550. }
  76551. /**
  76552. * Overload of compareTo for Comparable
  76553. *
  76554. * @param other other UInt to compare this to
  76555. * @returns -1, 0, or 1 depending on how the objects relate to each other
  76556. */
  76557. compareTo(other) {
  76558. return compare(this.valueOf(), other.valueOf());
  76559. }
  76560. /**
  76561. * Convert a UInt object to JSON
  76562. *
  76563. * @returns number or string represented by this.bytes
  76564. */
  76565. toJSON() {
  76566. const val = this.valueOf();
  76567. return typeof val === 'number' ? val : val.toString();
  76568. }
  76569. }
  76570. exports.UInt = UInt;
  76571. //# sourceMappingURL=uint.js.map
  76572. /***/ }),
  76573. /***/ 99403:
  76574. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76575. "use strict";
  76576. Object.defineProperty(exports, "__esModule", ({ value: true }));
  76577. exports.Vector256 = void 0;
  76578. const serialized_type_1 = __webpack_require__(51883);
  76579. const hash_256_1 = __webpack_require__(9334);
  76580. const binary_serializer_1 = __webpack_require__(27894);
  76581. /**
  76582. * TypeGuard for Array<string>
  76583. */
  76584. function isStrings(arg) {
  76585. return Array.isArray(arg) && (arg.length === 0 || typeof arg[0] === 'string');
  76586. }
  76587. /**
  76588. * Class for serializing and deserializing vectors of Hash256
  76589. */
  76590. class Vector256 extends serialized_type_1.SerializedType {
  76591. constructor(bytes) {
  76592. super(bytes);
  76593. }
  76594. /**
  76595. * Construct a Vector256 from a BinaryParser
  76596. *
  76597. * @param parser BinaryParser to
  76598. * @param hint length of the vector, in bytes, optional
  76599. * @returns a Vector256 object
  76600. */
  76601. static fromParser(parser, hint) {
  76602. const bytesList = new binary_serializer_1.BytesList();
  76603. const bytes = hint !== null && hint !== void 0 ? hint : parser.size();
  76604. const hashes = bytes / 32;
  76605. for (let i = 0; i < hashes; i++) {
  76606. hash_256_1.Hash256.fromParser(parser).toBytesSink(bytesList);
  76607. }
  76608. return new Vector256(bytesList.toBytes());
  76609. }
  76610. /**
  76611. * Construct a Vector256 object from an array of hashes
  76612. *
  76613. * @param value A Vector256 object or array of hex-strings representing Hash256's
  76614. * @returns a Vector256 object
  76615. */
  76616. static from(value) {
  76617. if (value instanceof Vector256) {
  76618. return value;
  76619. }
  76620. if (isStrings(value)) {
  76621. const bytesList = new binary_serializer_1.BytesList();
  76622. value.forEach((hash) => {
  76623. hash_256_1.Hash256.from(hash).toBytesSink(bytesList);
  76624. });
  76625. return new Vector256(bytesList.toBytes());
  76626. }
  76627. throw new Error('Cannot construct Vector256 from given value');
  76628. }
  76629. /**
  76630. * Return an Array of hex-strings represented by this.bytes
  76631. *
  76632. * @returns An Array of strings representing the Hash256 objects
  76633. */
  76634. toJSON() {
  76635. if (this.bytes.byteLength % 32 !== 0) {
  76636. throw new Error('Invalid bytes for Vector256');
  76637. }
  76638. const result = [];
  76639. for (let i = 0; i < this.bytes.byteLength; i += 32) {
  76640. result.push(this.bytes
  76641. .slice(i, i + 32)
  76642. .toString('hex')
  76643. .toUpperCase());
  76644. }
  76645. return result;
  76646. }
  76647. }
  76648. exports.Vector256 = Vector256;
  76649. //# sourceMappingURL=vector-256.js.map
  76650. /***/ }),
  76651. /***/ 49691:
  76652. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  76653. "use strict";
  76654. /*!
  76655. * The buffer module from node.js, for the browser.
  76656. *
  76657. * @author Feross Aboukhadijeh <https://feross.org>
  76658. * @license MIT
  76659. */
  76660. /* eslint-disable no-proto */
  76661. var base64 = __webpack_require__(79742)
  76662. var ieee754 = __webpack_require__(80645)
  76663. var customInspectSymbol =
  76664. (typeof Symbol === 'function' && typeof Symbol.for === 'function')
  76665. ? Symbol.for('nodejs.util.inspect.custom')
  76666. : null
  76667. exports.Buffer = Buffer
  76668. exports.SlowBuffer = SlowBuffer
  76669. exports.INSPECT_MAX_BYTES = 50
  76670. var K_MAX_LENGTH = 0x7fffffff
  76671. exports.kMaxLength = K_MAX_LENGTH
  76672. /**
  76673. * If `Buffer.TYPED_ARRAY_SUPPORT`:
  76674. * === true Use Uint8Array implementation (fastest)
  76675. * === false Print warning and recommend using `buffer` v4.x which has an Object
  76676. * implementation (most compatible, even IE6)
  76677. *
  76678. * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
  76679. * Opera 11.6+, iOS 4.2+.
  76680. *
  76681. * We report that the browser does not support typed arrays if the are not subclassable
  76682. * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
  76683. * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
  76684. * for __proto__ and has a buggy typed array implementation.
  76685. */
  76686. Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
  76687. if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
  76688. typeof console.error === 'function') {
  76689. console.error(
  76690. 'This browser lacks typed array (Uint8Array) support which is required by ' +
  76691. '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
  76692. )
  76693. }
  76694. function typedArraySupport () {
  76695. // Can typed array instances can be augmented?
  76696. try {
  76697. var arr = new Uint8Array(1)
  76698. var proto = { foo: function () { return 42 } }
  76699. Object.setPrototypeOf(proto, Uint8Array.prototype)
  76700. Object.setPrototypeOf(arr, proto)
  76701. return arr.foo() === 42
  76702. } catch (e) {
  76703. return false
  76704. }
  76705. }
  76706. Object.defineProperty(Buffer.prototype, 'parent', {
  76707. enumerable: true,
  76708. get: function () {
  76709. if (!Buffer.isBuffer(this)) return undefined
  76710. return this.buffer
  76711. }
  76712. })
  76713. Object.defineProperty(Buffer.prototype, 'offset', {
  76714. enumerable: true,
  76715. get: function () {
  76716. if (!Buffer.isBuffer(this)) return undefined
  76717. return this.byteOffset
  76718. }
  76719. })
  76720. function createBuffer (length) {
  76721. if (length > K_MAX_LENGTH) {
  76722. throw new RangeError('The value "' + length + '" is invalid for option "size"')
  76723. }
  76724. // Return an augmented `Uint8Array` instance
  76725. var buf = new Uint8Array(length)
  76726. Object.setPrototypeOf(buf, Buffer.prototype)
  76727. return buf
  76728. }
  76729. /**
  76730. * The Buffer constructor returns instances of `Uint8Array` that have their
  76731. * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
  76732. * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
  76733. * and the `Uint8Array` methods. Square bracket notation works as expected -- it
  76734. * returns a single octet.
  76735. *
  76736. * The `Uint8Array` prototype remains unmodified.
  76737. */
  76738. function Buffer (arg, encodingOrOffset, length) {
  76739. // Common case.
  76740. if (typeof arg === 'number') {
  76741. if (typeof encodingOrOffset === 'string') {
  76742. throw new TypeError(
  76743. 'The "string" argument must be of type string. Received type number'
  76744. )
  76745. }
  76746. return allocUnsafe(arg)
  76747. }
  76748. return from(arg, encodingOrOffset, length)
  76749. }
  76750. Buffer.poolSize = 8192 // not used by this implementation
  76751. function from (value, encodingOrOffset, length) {
  76752. if (typeof value === 'string') {
  76753. return fromString(value, encodingOrOffset)
  76754. }
  76755. if (ArrayBuffer.isView(value)) {
  76756. return fromArrayLike(value)
  76757. }
  76758. if (value == null) {
  76759. throw new TypeError(
  76760. 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
  76761. 'or Array-like Object. Received type ' + (typeof value)
  76762. )
  76763. }
  76764. if (isInstance(value, ArrayBuffer) ||
  76765. (value && isInstance(value.buffer, ArrayBuffer))) {
  76766. return fromArrayBuffer(value, encodingOrOffset, length)
  76767. }
  76768. if (typeof SharedArrayBuffer !== 'undefined' &&
  76769. (isInstance(value, SharedArrayBuffer) ||
  76770. (value && isInstance(value.buffer, SharedArrayBuffer)))) {
  76771. return fromArrayBuffer(value, encodingOrOffset, length)
  76772. }
  76773. if (typeof value === 'number') {
  76774. throw new TypeError(
  76775. 'The "value" argument must not be of type number. Received type number'
  76776. )
  76777. }
  76778. var valueOf = value.valueOf && value.valueOf()
  76779. if (valueOf != null && valueOf !== value) {
  76780. return Buffer.from(valueOf, encodingOrOffset, length)
  76781. }
  76782. var b = fromObject(value)
  76783. if (b) return b
  76784. if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
  76785. typeof value[Symbol.toPrimitive] === 'function') {
  76786. return Buffer.from(
  76787. value[Symbol.toPrimitive]('string'), encodingOrOffset, length
  76788. )
  76789. }
  76790. throw new TypeError(
  76791. 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
  76792. 'or Array-like Object. Received type ' + (typeof value)
  76793. )
  76794. }
  76795. /**
  76796. * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
  76797. * if value is a number.
  76798. * Buffer.from(str[, encoding])
  76799. * Buffer.from(array)
  76800. * Buffer.from(buffer)
  76801. * Buffer.from(arrayBuffer[, byteOffset[, length]])
  76802. **/
  76803. Buffer.from = function (value, encodingOrOffset, length) {
  76804. return from(value, encodingOrOffset, length)
  76805. }
  76806. // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
  76807. // https://github.com/feross/buffer/pull/148
  76808. Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)
  76809. Object.setPrototypeOf(Buffer, Uint8Array)
  76810. function assertSize (size) {
  76811. if (typeof size !== 'number') {
  76812. throw new TypeError('"size" argument must be of type number')
  76813. } else if (size < 0) {
  76814. throw new RangeError('The value "' + size + '" is invalid for option "size"')
  76815. }
  76816. }
  76817. function alloc (size, fill, encoding) {
  76818. assertSize(size)
  76819. if (size <= 0) {
  76820. return createBuffer(size)
  76821. }
  76822. if (fill !== undefined) {
  76823. // Only pay attention to encoding if it's a string. This
  76824. // prevents accidentally sending in a number that would
  76825. // be interpretted as a start offset.
  76826. return typeof encoding === 'string'
  76827. ? createBuffer(size).fill(fill, encoding)
  76828. : createBuffer(size).fill(fill)
  76829. }
  76830. return createBuffer(size)
  76831. }
  76832. /**
  76833. * Creates a new filled Buffer instance.
  76834. * alloc(size[, fill[, encoding]])
  76835. **/
  76836. Buffer.alloc = function (size, fill, encoding) {
  76837. return alloc(size, fill, encoding)
  76838. }
  76839. function allocUnsafe (size) {
  76840. assertSize(size)
  76841. return createBuffer(size < 0 ? 0 : checked(size) | 0)
  76842. }
  76843. /**
  76844. * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
  76845. * */
  76846. Buffer.allocUnsafe = function (size) {
  76847. return allocUnsafe(size)
  76848. }
  76849. /**
  76850. * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
  76851. */
  76852. Buffer.allocUnsafeSlow = function (size) {
  76853. return allocUnsafe(size)
  76854. }
  76855. function fromString (string, encoding) {
  76856. if (typeof encoding !== 'string' || encoding === '') {
  76857. encoding = 'utf8'
  76858. }
  76859. if (!Buffer.isEncoding(encoding)) {
  76860. throw new TypeError('Unknown encoding: ' + encoding)
  76861. }
  76862. var length = byteLength(string, encoding) | 0
  76863. var buf = createBuffer(length)
  76864. var actual = buf.write(string, encoding)
  76865. if (actual !== length) {
  76866. // Writing a hex string, for example, that contains invalid characters will
  76867. // cause everything after the first invalid character to be ignored. (e.g.
  76868. // 'abxxcd' will be treated as 'ab')
  76869. buf = buf.slice(0, actual)
  76870. }
  76871. return buf
  76872. }
  76873. function fromArrayLike (array) {
  76874. var length = array.length < 0 ? 0 : checked(array.length) | 0
  76875. var buf = createBuffer(length)
  76876. for (var i = 0; i < length; i += 1) {
  76877. buf[i] = array[i] & 255
  76878. }
  76879. return buf
  76880. }
  76881. function fromArrayBuffer (array, byteOffset, length) {
  76882. if (byteOffset < 0 || array.byteLength < byteOffset) {
  76883. throw new RangeError('"offset" is outside of buffer bounds')
  76884. }
  76885. if (array.byteLength < byteOffset + (length || 0)) {
  76886. throw new RangeError('"length" is outside of buffer bounds')
  76887. }
  76888. var buf
  76889. if (byteOffset === undefined && length === undefined) {
  76890. buf = new Uint8Array(array)
  76891. } else if (length === undefined) {
  76892. buf = new Uint8Array(array, byteOffset)
  76893. } else {
  76894. buf = new Uint8Array(array, byteOffset, length)
  76895. }
  76896. // Return an augmented `Uint8Array` instance
  76897. Object.setPrototypeOf(buf, Buffer.prototype)
  76898. return buf
  76899. }
  76900. function fromObject (obj) {
  76901. if (Buffer.isBuffer(obj)) {
  76902. var len = checked(obj.length) | 0
  76903. var buf = createBuffer(len)
  76904. if (buf.length === 0) {
  76905. return buf
  76906. }
  76907. obj.copy(buf, 0, 0, len)
  76908. return buf
  76909. }
  76910. if (obj.length !== undefined) {
  76911. if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
  76912. return createBuffer(0)
  76913. }
  76914. return fromArrayLike(obj)
  76915. }
  76916. if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
  76917. return fromArrayLike(obj.data)
  76918. }
  76919. }
  76920. function checked (length) {
  76921. // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  76922. // length is NaN (which is otherwise coerced to zero.)
  76923. if (length >= K_MAX_LENGTH) {
  76924. throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
  76925. 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
  76926. }
  76927. return length | 0
  76928. }
  76929. function SlowBuffer (length) {
  76930. if (+length != length) { // eslint-disable-line eqeqeq
  76931. length = 0
  76932. }
  76933. return Buffer.alloc(+length)
  76934. }
  76935. Buffer.isBuffer = function isBuffer (b) {
  76936. return b != null && b._isBuffer === true &&
  76937. b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
  76938. }
  76939. Buffer.compare = function compare (a, b) {
  76940. if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
  76941. if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
  76942. if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
  76943. throw new TypeError(
  76944. 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
  76945. )
  76946. }
  76947. if (a === b) return 0
  76948. var x = a.length
  76949. var y = b.length
  76950. for (var i = 0, len = Math.min(x, y); i < len; ++i) {
  76951. if (a[i] !== b[i]) {
  76952. x = a[i]
  76953. y = b[i]
  76954. break
  76955. }
  76956. }
  76957. if (x < y) return -1
  76958. if (y < x) return 1
  76959. return 0
  76960. }
  76961. Buffer.isEncoding = function isEncoding (encoding) {
  76962. switch (String(encoding).toLowerCase()) {
  76963. case 'hex':
  76964. case 'utf8':
  76965. case 'utf-8':
  76966. case 'ascii':
  76967. case 'latin1':
  76968. case 'binary':
  76969. case 'base64':
  76970. case 'ucs2':
  76971. case 'ucs-2':
  76972. case 'utf16le':
  76973. case 'utf-16le':
  76974. return true
  76975. default:
  76976. return false
  76977. }
  76978. }
  76979. Buffer.concat = function concat (list, length) {
  76980. if (!Array.isArray(list)) {
  76981. throw new TypeError('"list" argument must be an Array of Buffers')
  76982. }
  76983. if (list.length === 0) {
  76984. return Buffer.alloc(0)
  76985. }
  76986. var i
  76987. if (length === undefined) {
  76988. length = 0
  76989. for (i = 0; i < list.length; ++i) {
  76990. length += list[i].length
  76991. }
  76992. }
  76993. var buffer = Buffer.allocUnsafe(length)
  76994. var pos = 0
  76995. for (i = 0; i < list.length; ++i) {
  76996. var buf = list[i]
  76997. if (isInstance(buf, Uint8Array)) {
  76998. buf = Buffer.from(buf)
  76999. }
  77000. if (!Buffer.isBuffer(buf)) {
  77001. throw new TypeError('"list" argument must be an Array of Buffers')
  77002. }
  77003. buf.copy(buffer, pos)
  77004. pos += buf.length
  77005. }
  77006. return buffer
  77007. }
  77008. function byteLength (string, encoding) {
  77009. if (Buffer.isBuffer(string)) {
  77010. return string.length
  77011. }
  77012. if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
  77013. return string.byteLength
  77014. }
  77015. if (typeof string !== 'string') {
  77016. throw new TypeError(
  77017. 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
  77018. 'Received type ' + typeof string
  77019. )
  77020. }
  77021. var len = string.length
  77022. var mustMatch = (arguments.length > 2 && arguments[2] === true)
  77023. if (!mustMatch && len === 0) return 0
  77024. // Use a for loop to avoid recursion
  77025. var loweredCase = false
  77026. for (;;) {
  77027. switch (encoding) {
  77028. case 'ascii':
  77029. case 'latin1':
  77030. case 'binary':
  77031. return len
  77032. case 'utf8':
  77033. case 'utf-8':
  77034. return utf8ToBytes(string).length
  77035. case 'ucs2':
  77036. case 'ucs-2':
  77037. case 'utf16le':
  77038. case 'utf-16le':
  77039. return len * 2
  77040. case 'hex':
  77041. return len >>> 1
  77042. case 'base64':
  77043. return base64ToBytes(string).length
  77044. default:
  77045. if (loweredCase) {
  77046. return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
  77047. }
  77048. encoding = ('' + encoding).toLowerCase()
  77049. loweredCase = true
  77050. }
  77051. }
  77052. }
  77053. Buffer.byteLength = byteLength
  77054. function slowToString (encoding, start, end) {
  77055. var loweredCase = false
  77056. // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  77057. // property of a typed array.
  77058. // This behaves neither like String nor Uint8Array in that we set start/end
  77059. // to their upper/lower bounds if the value passed is out of range.
  77060. // undefined is handled specially as per ECMA-262 6th Edition,
  77061. // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
  77062. if (start === undefined || start < 0) {
  77063. start = 0
  77064. }
  77065. // Return early if start > this.length. Done here to prevent potential uint32
  77066. // coercion fail below.
  77067. if (start > this.length) {
  77068. return ''
  77069. }
  77070. if (end === undefined || end > this.length) {
  77071. end = this.length
  77072. }
  77073. if (end <= 0) {
  77074. return ''
  77075. }
  77076. // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
  77077. end >>>= 0
  77078. start >>>= 0
  77079. if (end <= start) {
  77080. return ''
  77081. }
  77082. if (!encoding) encoding = 'utf8'
  77083. while (true) {
  77084. switch (encoding) {
  77085. case 'hex':
  77086. return hexSlice(this, start, end)
  77087. case 'utf8':
  77088. case 'utf-8':
  77089. return utf8Slice(this, start, end)
  77090. case 'ascii':
  77091. return asciiSlice(this, start, end)
  77092. case 'latin1':
  77093. case 'binary':
  77094. return latin1Slice(this, start, end)
  77095. case 'base64':
  77096. return base64Slice(this, start, end)
  77097. case 'ucs2':
  77098. case 'ucs-2':
  77099. case 'utf16le':
  77100. case 'utf-16le':
  77101. return utf16leSlice(this, start, end)
  77102. default:
  77103. if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
  77104. encoding = (encoding + '').toLowerCase()
  77105. loweredCase = true
  77106. }
  77107. }
  77108. }
  77109. // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
  77110. // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
  77111. // reliably in a browserify context because there could be multiple different
  77112. // copies of the 'buffer' package in use. This method works even for Buffer
  77113. // instances that were created from another copy of the `buffer` package.
  77114. // See: https://github.com/feross/buffer/issues/154
  77115. Buffer.prototype._isBuffer = true
  77116. function swap (b, n, m) {
  77117. var i = b[n]
  77118. b[n] = b[m]
  77119. b[m] = i
  77120. }
  77121. Buffer.prototype.swap16 = function swap16 () {
  77122. var len = this.length
  77123. if (len % 2 !== 0) {
  77124. throw new RangeError('Buffer size must be a multiple of 16-bits')
  77125. }
  77126. for (var i = 0; i < len; i += 2) {
  77127. swap(this, i, i + 1)
  77128. }
  77129. return this
  77130. }
  77131. Buffer.prototype.swap32 = function swap32 () {
  77132. var len = this.length
  77133. if (len % 4 !== 0) {
  77134. throw new RangeError('Buffer size must be a multiple of 32-bits')
  77135. }
  77136. for (var i = 0; i < len; i += 4) {
  77137. swap(this, i, i + 3)
  77138. swap(this, i + 1, i + 2)
  77139. }
  77140. return this
  77141. }
  77142. Buffer.prototype.swap64 = function swap64 () {
  77143. var len = this.length
  77144. if (len % 8 !== 0) {
  77145. throw new RangeError('Buffer size must be a multiple of 64-bits')
  77146. }
  77147. for (var i = 0; i < len; i += 8) {
  77148. swap(this, i, i + 7)
  77149. swap(this, i + 1, i + 6)
  77150. swap(this, i + 2, i + 5)
  77151. swap(this, i + 3, i + 4)
  77152. }
  77153. return this
  77154. }
  77155. Buffer.prototype.toString = function toString () {
  77156. var length = this.length
  77157. if (length === 0) return ''
  77158. if (arguments.length === 0) return utf8Slice(this, 0, length)
  77159. return slowToString.apply(this, arguments)
  77160. }
  77161. Buffer.prototype.toLocaleString = Buffer.prototype.toString
  77162. Buffer.prototype.equals = function equals (b) {
  77163. if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  77164. if (this === b) return true
  77165. return Buffer.compare(this, b) === 0
  77166. }
  77167. Buffer.prototype.inspect = function inspect () {
  77168. var str = ''
  77169. var max = exports.INSPECT_MAX_BYTES
  77170. str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
  77171. if (this.length > max) str += ' ... '
  77172. return '<Buffer ' + str + '>'
  77173. }
  77174. if (customInspectSymbol) {
  77175. Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect
  77176. }
  77177. Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
  77178. if (isInstance(target, Uint8Array)) {
  77179. target = Buffer.from(target, target.offset, target.byteLength)
  77180. }
  77181. if (!Buffer.isBuffer(target)) {
  77182. throw new TypeError(
  77183. 'The "target" argument must be one of type Buffer or Uint8Array. ' +
  77184. 'Received type ' + (typeof target)
  77185. )
  77186. }
  77187. if (start === undefined) {
  77188. start = 0
  77189. }
  77190. if (end === undefined) {
  77191. end = target ? target.length : 0
  77192. }
  77193. if (thisStart === undefined) {
  77194. thisStart = 0
  77195. }
  77196. if (thisEnd === undefined) {
  77197. thisEnd = this.length
  77198. }
  77199. if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
  77200. throw new RangeError('out of range index')
  77201. }
  77202. if (thisStart >= thisEnd && start >= end) {
  77203. return 0
  77204. }
  77205. if (thisStart >= thisEnd) {
  77206. return -1
  77207. }
  77208. if (start >= end) {
  77209. return 1
  77210. }
  77211. start >>>= 0
  77212. end >>>= 0
  77213. thisStart >>>= 0
  77214. thisEnd >>>= 0
  77215. if (this === target) return 0
  77216. var x = thisEnd - thisStart
  77217. var y = end - start
  77218. var len = Math.min(x, y)
  77219. var thisCopy = this.slice(thisStart, thisEnd)
  77220. var targetCopy = target.slice(start, end)
  77221. for (var i = 0; i < len; ++i) {
  77222. if (thisCopy[i] !== targetCopy[i]) {
  77223. x = thisCopy[i]
  77224. y = targetCopy[i]
  77225. break
  77226. }
  77227. }
  77228. if (x < y) return -1
  77229. if (y < x) return 1
  77230. return 0
  77231. }
  77232. // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
  77233. // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
  77234. //
  77235. // Arguments:
  77236. // - buffer - a Buffer to search
  77237. // - val - a string, Buffer, or number
  77238. // - byteOffset - an index into `buffer`; will be clamped to an int32
  77239. // - encoding - an optional encoding, relevant is val is a string
  77240. // - dir - true for indexOf, false for lastIndexOf
  77241. function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
  77242. // Empty buffer means no match
  77243. if (buffer.length === 0) return -1
  77244. // Normalize byteOffset
  77245. if (typeof byteOffset === 'string') {
  77246. encoding = byteOffset
  77247. byteOffset = 0
  77248. } else if (byteOffset > 0x7fffffff) {
  77249. byteOffset = 0x7fffffff
  77250. } else if (byteOffset < -0x80000000) {
  77251. byteOffset = -0x80000000
  77252. }
  77253. byteOffset = +byteOffset // Coerce to Number.
  77254. if (numberIsNaN(byteOffset)) {
  77255. // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
  77256. byteOffset = dir ? 0 : (buffer.length - 1)
  77257. }
  77258. // Normalize byteOffset: negative offsets start from the end of the buffer
  77259. if (byteOffset < 0) byteOffset = buffer.length + byteOffset
  77260. if (byteOffset >= buffer.length) {
  77261. if (dir) return -1
  77262. else byteOffset = buffer.length - 1
  77263. } else if (byteOffset < 0) {
  77264. if (dir) byteOffset = 0
  77265. else return -1
  77266. }
  77267. // Normalize val
  77268. if (typeof val === 'string') {
  77269. val = Buffer.from(val, encoding)
  77270. }
  77271. // Finally, search either indexOf (if dir is true) or lastIndexOf
  77272. if (Buffer.isBuffer(val)) {
  77273. // Special case: looking for empty string/buffer always fails
  77274. if (val.length === 0) {
  77275. return -1
  77276. }
  77277. return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
  77278. } else if (typeof val === 'number') {
  77279. val = val & 0xFF // Search for a byte value [0-255]
  77280. if (typeof Uint8Array.prototype.indexOf === 'function') {
  77281. if (dir) {
  77282. return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
  77283. } else {
  77284. return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
  77285. }
  77286. }
  77287. return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)
  77288. }
  77289. throw new TypeError('val must be string, number or Buffer')
  77290. }
  77291. function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
  77292. var indexSize = 1
  77293. var arrLength = arr.length
  77294. var valLength = val.length
  77295. if (encoding !== undefined) {
  77296. encoding = String(encoding).toLowerCase()
  77297. if (encoding === 'ucs2' || encoding === 'ucs-2' ||
  77298. encoding === 'utf16le' || encoding === 'utf-16le') {
  77299. if (arr.length < 2 || val.length < 2) {
  77300. return -1
  77301. }
  77302. indexSize = 2
  77303. arrLength /= 2
  77304. valLength /= 2
  77305. byteOffset /= 2
  77306. }
  77307. }
  77308. function read (buf, i) {
  77309. if (indexSize === 1) {
  77310. return buf[i]
  77311. } else {
  77312. return buf.readUInt16BE(i * indexSize)
  77313. }
  77314. }
  77315. var i
  77316. if (dir) {
  77317. var foundIndex = -1
  77318. for (i = byteOffset; i < arrLength; i++) {
  77319. if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
  77320. if (foundIndex === -1) foundIndex = i
  77321. if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
  77322. } else {
  77323. if (foundIndex !== -1) i -= i - foundIndex
  77324. foundIndex = -1
  77325. }
  77326. }
  77327. } else {
  77328. if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
  77329. for (i = byteOffset; i >= 0; i--) {
  77330. var found = true
  77331. for (var j = 0; j < valLength; j++) {
  77332. if (read(arr, i + j) !== read(val, j)) {
  77333. found = false
  77334. break
  77335. }
  77336. }
  77337. if (found) return i
  77338. }
  77339. }
  77340. return -1
  77341. }
  77342. Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
  77343. return this.indexOf(val, byteOffset, encoding) !== -1
  77344. }
  77345. Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
  77346. return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
  77347. }
  77348. Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
  77349. return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
  77350. }
  77351. function hexWrite (buf, string, offset, length) {
  77352. offset = Number(offset) || 0
  77353. var remaining = buf.length - offset
  77354. if (!length) {
  77355. length = remaining
  77356. } else {
  77357. length = Number(length)
  77358. if (length > remaining) {
  77359. length = remaining
  77360. }
  77361. }
  77362. var strLen = string.length
  77363. if (length > strLen / 2) {
  77364. length = strLen / 2
  77365. }
  77366. for (var i = 0; i < length; ++i) {
  77367. var parsed = parseInt(string.substr(i * 2, 2), 16)
  77368. if (numberIsNaN(parsed)) return i
  77369. buf[offset + i] = parsed
  77370. }
  77371. return i
  77372. }
  77373. function utf8Write (buf, string, offset, length) {
  77374. return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
  77375. }
  77376. function asciiWrite (buf, string, offset, length) {
  77377. return blitBuffer(asciiToBytes(string), buf, offset, length)
  77378. }
  77379. function latin1Write (buf, string, offset, length) {
  77380. return asciiWrite(buf, string, offset, length)
  77381. }
  77382. function base64Write (buf, string, offset, length) {
  77383. return blitBuffer(base64ToBytes(string), buf, offset, length)
  77384. }
  77385. function ucs2Write (buf, string, offset, length) {
  77386. return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
  77387. }
  77388. Buffer.prototype.write = function write (string, offset, length, encoding) {
  77389. // Buffer#write(string)
  77390. if (offset === undefined) {
  77391. encoding = 'utf8'
  77392. length = this.length
  77393. offset = 0
  77394. // Buffer#write(string, encoding)
  77395. } else if (length === undefined && typeof offset === 'string') {
  77396. encoding = offset
  77397. length = this.length
  77398. offset = 0
  77399. // Buffer#write(string, offset[, length][, encoding])
  77400. } else if (isFinite(offset)) {
  77401. offset = offset >>> 0
  77402. if (isFinite(length)) {
  77403. length = length >>> 0
  77404. if (encoding === undefined) encoding = 'utf8'
  77405. } else {
  77406. encoding = length
  77407. length = undefined
  77408. }
  77409. } else {
  77410. throw new Error(
  77411. 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
  77412. )
  77413. }
  77414. var remaining = this.length - offset
  77415. if (length === undefined || length > remaining) length = remaining
  77416. if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
  77417. throw new RangeError('Attempt to write outside buffer bounds')
  77418. }
  77419. if (!encoding) encoding = 'utf8'
  77420. var loweredCase = false
  77421. for (;;) {
  77422. switch (encoding) {
  77423. case 'hex':
  77424. return hexWrite(this, string, offset, length)
  77425. case 'utf8':
  77426. case 'utf-8':
  77427. return utf8Write(this, string, offset, length)
  77428. case 'ascii':
  77429. return asciiWrite(this, string, offset, length)
  77430. case 'latin1':
  77431. case 'binary':
  77432. return latin1Write(this, string, offset, length)
  77433. case 'base64':
  77434. // Warning: maxLength not taken into account in base64Write
  77435. return base64Write(this, string, offset, length)
  77436. case 'ucs2':
  77437. case 'ucs-2':
  77438. case 'utf16le':
  77439. case 'utf-16le':
  77440. return ucs2Write(this, string, offset, length)
  77441. default:
  77442. if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
  77443. encoding = ('' + encoding).toLowerCase()
  77444. loweredCase = true
  77445. }
  77446. }
  77447. }
  77448. Buffer.prototype.toJSON = function toJSON () {
  77449. return {
  77450. type: 'Buffer',
  77451. data: Array.prototype.slice.call(this._arr || this, 0)
  77452. }
  77453. }
  77454. function base64Slice (buf, start, end) {
  77455. if (start === 0 && end === buf.length) {
  77456. return base64.fromByteArray(buf)
  77457. } else {
  77458. return base64.fromByteArray(buf.slice(start, end))
  77459. }
  77460. }
  77461. function utf8Slice (buf, start, end) {
  77462. end = Math.min(buf.length, end)
  77463. var res = []
  77464. var i = start
  77465. while (i < end) {
  77466. var firstByte = buf[i]
  77467. var codePoint = null
  77468. var bytesPerSequence = (firstByte > 0xEF) ? 4
  77469. : (firstByte > 0xDF) ? 3
  77470. : (firstByte > 0xBF) ? 2
  77471. : 1
  77472. if (i + bytesPerSequence <= end) {
  77473. var secondByte, thirdByte, fourthByte, tempCodePoint
  77474. switch (bytesPerSequence) {
  77475. case 1:
  77476. if (firstByte < 0x80) {
  77477. codePoint = firstByte
  77478. }
  77479. break
  77480. case 2:
  77481. secondByte = buf[i + 1]
  77482. if ((secondByte & 0xC0) === 0x80) {
  77483. tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
  77484. if (tempCodePoint > 0x7F) {
  77485. codePoint = tempCodePoint
  77486. }
  77487. }
  77488. break
  77489. case 3:
  77490. secondByte = buf[i + 1]
  77491. thirdByte = buf[i + 2]
  77492. if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
  77493. tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
  77494. if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
  77495. codePoint = tempCodePoint
  77496. }
  77497. }
  77498. break
  77499. case 4:
  77500. secondByte = buf[i + 1]
  77501. thirdByte = buf[i + 2]
  77502. fourthByte = buf[i + 3]
  77503. if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
  77504. tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
  77505. if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
  77506. codePoint = tempCodePoint
  77507. }
  77508. }
  77509. }
  77510. }
  77511. if (codePoint === null) {
  77512. // we did not generate a valid codePoint so insert a
  77513. // replacement char (U+FFFD) and advance only 1 byte
  77514. codePoint = 0xFFFD
  77515. bytesPerSequence = 1
  77516. } else if (codePoint > 0xFFFF) {
  77517. // encode to utf16 (surrogate pair dance)
  77518. codePoint -= 0x10000
  77519. res.push(codePoint >>> 10 & 0x3FF | 0xD800)
  77520. codePoint = 0xDC00 | codePoint & 0x3FF
  77521. }
  77522. res.push(codePoint)
  77523. i += bytesPerSequence
  77524. }
  77525. return decodeCodePointsArray(res)
  77526. }
  77527. // Based on http://stackoverflow.com/a/22747272/680742, the browser with
  77528. // the lowest limit is Chrome, with 0x10000 args.
  77529. // We go 1 magnitude less, for safety
  77530. var MAX_ARGUMENTS_LENGTH = 0x1000
  77531. function decodeCodePointsArray (codePoints) {
  77532. var len = codePoints.length
  77533. if (len <= MAX_ARGUMENTS_LENGTH) {
  77534. return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
  77535. }
  77536. // Decode in chunks to avoid "call stack size exceeded".
  77537. var res = ''
  77538. var i = 0
  77539. while (i < len) {
  77540. res += String.fromCharCode.apply(
  77541. String,
  77542. codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
  77543. )
  77544. }
  77545. return res
  77546. }
  77547. function asciiSlice (buf, start, end) {
  77548. var ret = ''
  77549. end = Math.min(buf.length, end)
  77550. for (var i = start; i < end; ++i) {
  77551. ret += String.fromCharCode(buf[i] & 0x7F)
  77552. }
  77553. return ret
  77554. }
  77555. function latin1Slice (buf, start, end) {
  77556. var ret = ''
  77557. end = Math.min(buf.length, end)
  77558. for (var i = start; i < end; ++i) {
  77559. ret += String.fromCharCode(buf[i])
  77560. }
  77561. return ret
  77562. }
  77563. function hexSlice (buf, start, end) {
  77564. var len = buf.length
  77565. if (!start || start < 0) start = 0
  77566. if (!end || end < 0 || end > len) end = len
  77567. var out = ''
  77568. for (var i = start; i < end; ++i) {
  77569. out += hexSliceLookupTable[buf[i]]
  77570. }
  77571. return out
  77572. }
  77573. function utf16leSlice (buf, start, end) {
  77574. var bytes = buf.slice(start, end)
  77575. var res = ''
  77576. for (var i = 0; i < bytes.length; i += 2) {
  77577. res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
  77578. }
  77579. return res
  77580. }
  77581. Buffer.prototype.slice = function slice (start, end) {
  77582. var len = this.length
  77583. start = ~~start
  77584. end = end === undefined ? len : ~~end
  77585. if (start < 0) {
  77586. start += len
  77587. if (start < 0) start = 0
  77588. } else if (start > len) {
  77589. start = len
  77590. }
  77591. if (end < 0) {
  77592. end += len
  77593. if (end < 0) end = 0
  77594. } else if (end > len) {
  77595. end = len
  77596. }
  77597. if (end < start) end = start
  77598. var newBuf = this.subarray(start, end)
  77599. // Return an augmented `Uint8Array` instance
  77600. Object.setPrototypeOf(newBuf, Buffer.prototype)
  77601. return newBuf
  77602. }
  77603. /*
  77604. * Need to make sure that buffer isn't trying to write out of bounds.
  77605. */
  77606. function checkOffset (offset, ext, length) {
  77607. if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
  77608. if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
  77609. }
  77610. Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
  77611. offset = offset >>> 0
  77612. byteLength = byteLength >>> 0
  77613. if (!noAssert) checkOffset(offset, byteLength, this.length)
  77614. var val = this[offset]
  77615. var mul = 1
  77616. var i = 0
  77617. while (++i < byteLength && (mul *= 0x100)) {
  77618. val += this[offset + i] * mul
  77619. }
  77620. return val
  77621. }
  77622. Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
  77623. offset = offset >>> 0
  77624. byteLength = byteLength >>> 0
  77625. if (!noAssert) {
  77626. checkOffset(offset, byteLength, this.length)
  77627. }
  77628. var val = this[offset + --byteLength]
  77629. var mul = 1
  77630. while (byteLength > 0 && (mul *= 0x100)) {
  77631. val += this[offset + --byteLength] * mul
  77632. }
  77633. return val
  77634. }
  77635. Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
  77636. offset = offset >>> 0
  77637. if (!noAssert) checkOffset(offset, 1, this.length)
  77638. return this[offset]
  77639. }
  77640. Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
  77641. offset = offset >>> 0
  77642. if (!noAssert) checkOffset(offset, 2, this.length)
  77643. return this[offset] | (this[offset + 1] << 8)
  77644. }
  77645. Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
  77646. offset = offset >>> 0
  77647. if (!noAssert) checkOffset(offset, 2, this.length)
  77648. return (this[offset] << 8) | this[offset + 1]
  77649. }
  77650. Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
  77651. offset = offset >>> 0
  77652. if (!noAssert) checkOffset(offset, 4, this.length)
  77653. return ((this[offset]) |
  77654. (this[offset + 1] << 8) |
  77655. (this[offset + 2] << 16)) +
  77656. (this[offset + 3] * 0x1000000)
  77657. }
  77658. Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
  77659. offset = offset >>> 0
  77660. if (!noAssert) checkOffset(offset, 4, this.length)
  77661. return (this[offset] * 0x1000000) +
  77662. ((this[offset + 1] << 16) |
  77663. (this[offset + 2] << 8) |
  77664. this[offset + 3])
  77665. }
  77666. Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
  77667. offset = offset >>> 0
  77668. byteLength = byteLength >>> 0
  77669. if (!noAssert) checkOffset(offset, byteLength, this.length)
  77670. var val = this[offset]
  77671. var mul = 1
  77672. var i = 0
  77673. while (++i < byteLength && (mul *= 0x100)) {
  77674. val += this[offset + i] * mul
  77675. }
  77676. mul *= 0x80
  77677. if (val >= mul) val -= Math.pow(2, 8 * byteLength)
  77678. return val
  77679. }
  77680. Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
  77681. offset = offset >>> 0
  77682. byteLength = byteLength >>> 0
  77683. if (!noAssert) checkOffset(offset, byteLength, this.length)
  77684. var i = byteLength
  77685. var mul = 1
  77686. var val = this[offset + --i]
  77687. while (i > 0 && (mul *= 0x100)) {
  77688. val += this[offset + --i] * mul
  77689. }
  77690. mul *= 0x80
  77691. if (val >= mul) val -= Math.pow(2, 8 * byteLength)
  77692. return val
  77693. }
  77694. Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
  77695. offset = offset >>> 0
  77696. if (!noAssert) checkOffset(offset, 1, this.length)
  77697. if (!(this[offset] & 0x80)) return (this[offset])
  77698. return ((0xff - this[offset] + 1) * -1)
  77699. }
  77700. Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
  77701. offset = offset >>> 0
  77702. if (!noAssert) checkOffset(offset, 2, this.length)
  77703. var val = this[offset] | (this[offset + 1] << 8)
  77704. return (val & 0x8000) ? val | 0xFFFF0000 : val
  77705. }
  77706. Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
  77707. offset = offset >>> 0
  77708. if (!noAssert) checkOffset(offset, 2, this.length)
  77709. var val = this[offset + 1] | (this[offset] << 8)
  77710. return (val & 0x8000) ? val | 0xFFFF0000 : val
  77711. }
  77712. Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
  77713. offset = offset >>> 0
  77714. if (!noAssert) checkOffset(offset, 4, this.length)
  77715. return (this[offset]) |
  77716. (this[offset + 1] << 8) |
  77717. (this[offset + 2] << 16) |
  77718. (this[offset + 3] << 24)
  77719. }
  77720. Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
  77721. offset = offset >>> 0
  77722. if (!noAssert) checkOffset(offset, 4, this.length)
  77723. return (this[offset] << 24) |
  77724. (this[offset + 1] << 16) |
  77725. (this[offset + 2] << 8) |
  77726. (this[offset + 3])
  77727. }
  77728. Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
  77729. offset = offset >>> 0
  77730. if (!noAssert) checkOffset(offset, 4, this.length)
  77731. return ieee754.read(this, offset, true, 23, 4)
  77732. }
  77733. Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
  77734. offset = offset >>> 0
  77735. if (!noAssert) checkOffset(offset, 4, this.length)
  77736. return ieee754.read(this, offset, false, 23, 4)
  77737. }
  77738. Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
  77739. offset = offset >>> 0
  77740. if (!noAssert) checkOffset(offset, 8, this.length)
  77741. return ieee754.read(this, offset, true, 52, 8)
  77742. }
  77743. Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
  77744. offset = offset >>> 0
  77745. if (!noAssert) checkOffset(offset, 8, this.length)
  77746. return ieee754.read(this, offset, false, 52, 8)
  77747. }
  77748. function checkInt (buf, value, offset, ext, max, min) {
  77749. if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
  77750. if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
  77751. if (offset + ext > buf.length) throw new RangeError('Index out of range')
  77752. }
  77753. Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
  77754. value = +value
  77755. offset = offset >>> 0
  77756. byteLength = byteLength >>> 0
  77757. if (!noAssert) {
  77758. var maxBytes = Math.pow(2, 8 * byteLength) - 1
  77759. checkInt(this, value, offset, byteLength, maxBytes, 0)
  77760. }
  77761. var mul = 1
  77762. var i = 0
  77763. this[offset] = value & 0xFF
  77764. while (++i < byteLength && (mul *= 0x100)) {
  77765. this[offset + i] = (value / mul) & 0xFF
  77766. }
  77767. return offset + byteLength
  77768. }
  77769. Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
  77770. value = +value
  77771. offset = offset >>> 0
  77772. byteLength = byteLength >>> 0
  77773. if (!noAssert) {
  77774. var maxBytes = Math.pow(2, 8 * byteLength) - 1
  77775. checkInt(this, value, offset, byteLength, maxBytes, 0)
  77776. }
  77777. var i = byteLength - 1
  77778. var mul = 1
  77779. this[offset + i] = value & 0xFF
  77780. while (--i >= 0 && (mul *= 0x100)) {
  77781. this[offset + i] = (value / mul) & 0xFF
  77782. }
  77783. return offset + byteLength
  77784. }
  77785. Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
  77786. value = +value
  77787. offset = offset >>> 0
  77788. if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
  77789. this[offset] = (value & 0xff)
  77790. return offset + 1
  77791. }
  77792. Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
  77793. value = +value
  77794. offset = offset >>> 0
  77795. if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  77796. this[offset] = (value & 0xff)
  77797. this[offset + 1] = (value >>> 8)
  77798. return offset + 2
  77799. }
  77800. Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
  77801. value = +value
  77802. offset = offset >>> 0
  77803. if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  77804. this[offset] = (value >>> 8)
  77805. this[offset + 1] = (value & 0xff)
  77806. return offset + 2
  77807. }
  77808. Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
  77809. value = +value
  77810. offset = offset >>> 0
  77811. if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  77812. this[offset + 3] = (value >>> 24)
  77813. this[offset + 2] = (value >>> 16)
  77814. this[offset + 1] = (value >>> 8)
  77815. this[offset] = (value & 0xff)
  77816. return offset + 4
  77817. }
  77818. Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
  77819. value = +value
  77820. offset = offset >>> 0
  77821. if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  77822. this[offset] = (value >>> 24)
  77823. this[offset + 1] = (value >>> 16)
  77824. this[offset + 2] = (value >>> 8)
  77825. this[offset + 3] = (value & 0xff)
  77826. return offset + 4
  77827. }
  77828. Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
  77829. value = +value
  77830. offset = offset >>> 0
  77831. if (!noAssert) {
  77832. var limit = Math.pow(2, (8 * byteLength) - 1)
  77833. checkInt(this, value, offset, byteLength, limit - 1, -limit)
  77834. }
  77835. var i = 0
  77836. var mul = 1
  77837. var sub = 0
  77838. this[offset] = value & 0xFF
  77839. while (++i < byteLength && (mul *= 0x100)) {
  77840. if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
  77841. sub = 1
  77842. }
  77843. this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  77844. }
  77845. return offset + byteLength
  77846. }
  77847. Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
  77848. value = +value
  77849. offset = offset >>> 0
  77850. if (!noAssert) {
  77851. var limit = Math.pow(2, (8 * byteLength) - 1)
  77852. checkInt(this, value, offset, byteLength, limit - 1, -limit)
  77853. }
  77854. var i = byteLength - 1
  77855. var mul = 1
  77856. var sub = 0
  77857. this[offset + i] = value & 0xFF
  77858. while (--i >= 0 && (mul *= 0x100)) {
  77859. if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
  77860. sub = 1
  77861. }
  77862. this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  77863. }
  77864. return offset + byteLength
  77865. }
  77866. Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
  77867. value = +value
  77868. offset = offset >>> 0
  77869. if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
  77870. if (value < 0) value = 0xff + value + 1
  77871. this[offset] = (value & 0xff)
  77872. return offset + 1
  77873. }
  77874. Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
  77875. value = +value
  77876. offset = offset >>> 0
  77877. if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  77878. this[offset] = (value & 0xff)
  77879. this[offset + 1] = (value >>> 8)
  77880. return offset + 2
  77881. }
  77882. Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
  77883. value = +value
  77884. offset = offset >>> 0
  77885. if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  77886. this[offset] = (value >>> 8)
  77887. this[offset + 1] = (value & 0xff)
  77888. return offset + 2
  77889. }
  77890. Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
  77891. value = +value
  77892. offset = offset >>> 0
  77893. if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  77894. this[offset] = (value & 0xff)
  77895. this[offset + 1] = (value >>> 8)
  77896. this[offset + 2] = (value >>> 16)
  77897. this[offset + 3] = (value >>> 24)
  77898. return offset + 4
  77899. }
  77900. Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
  77901. value = +value
  77902. offset = offset >>> 0
  77903. if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  77904. if (value < 0) value = 0xffffffff + value + 1
  77905. this[offset] = (value >>> 24)
  77906. this[offset + 1] = (value >>> 16)
  77907. this[offset + 2] = (value >>> 8)
  77908. this[offset + 3] = (value & 0xff)
  77909. return offset + 4
  77910. }
  77911. function checkIEEE754 (buf, value, offset, ext, max, min) {
  77912. if (offset + ext > buf.length) throw new RangeError('Index out of range')
  77913. if (offset < 0) throw new RangeError('Index out of range')
  77914. }
  77915. function writeFloat (buf, value, offset, littleEndian, noAssert) {
  77916. value = +value
  77917. offset = offset >>> 0
  77918. if (!noAssert) {
  77919. checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
  77920. }
  77921. ieee754.write(buf, value, offset, littleEndian, 23, 4)
  77922. return offset + 4
  77923. }
  77924. Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
  77925. return writeFloat(this, value, offset, true, noAssert)
  77926. }
  77927. Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
  77928. return writeFloat(this, value, offset, false, noAssert)
  77929. }
  77930. function writeDouble (buf, value, offset, littleEndian, noAssert) {
  77931. value = +value
  77932. offset = offset >>> 0
  77933. if (!noAssert) {
  77934. checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
  77935. }
  77936. ieee754.write(buf, value, offset, littleEndian, 52, 8)
  77937. return offset + 8
  77938. }
  77939. Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
  77940. return writeDouble(this, value, offset, true, noAssert)
  77941. }
  77942. Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
  77943. return writeDouble(this, value, offset, false, noAssert)
  77944. }
  77945. // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
  77946. Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  77947. if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
  77948. if (!start) start = 0
  77949. if (!end && end !== 0) end = this.length
  77950. if (targetStart >= target.length) targetStart = target.length
  77951. if (!targetStart) targetStart = 0
  77952. if (end > 0 && end < start) end = start
  77953. // Copy 0 bytes; we're done
  77954. if (end === start) return 0
  77955. if (target.length === 0 || this.length === 0) return 0
  77956. // Fatal error conditions
  77957. if (targetStart < 0) {
  77958. throw new RangeError('targetStart out of bounds')
  77959. }
  77960. if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
  77961. if (end < 0) throw new RangeError('sourceEnd out of bounds')
  77962. // Are we oob?
  77963. if (end > this.length) end = this.length
  77964. if (target.length - targetStart < end - start) {
  77965. end = target.length - targetStart + start
  77966. }
  77967. var len = end - start
  77968. if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
  77969. // Use built-in when available, missing from IE11
  77970. this.copyWithin(targetStart, start, end)
  77971. } else if (this === target && start < targetStart && targetStart < end) {
  77972. // descending copy from end
  77973. for (var i = len - 1; i >= 0; --i) {
  77974. target[i + targetStart] = this[i + start]
  77975. }
  77976. } else {
  77977. Uint8Array.prototype.set.call(
  77978. target,
  77979. this.subarray(start, end),
  77980. targetStart
  77981. )
  77982. }
  77983. return len
  77984. }
  77985. // Usage:
  77986. // buffer.fill(number[, offset[, end]])
  77987. // buffer.fill(buffer[, offset[, end]])
  77988. // buffer.fill(string[, offset[, end]][, encoding])
  77989. Buffer.prototype.fill = function fill (val, start, end, encoding) {
  77990. // Handle string cases:
  77991. if (typeof val === 'string') {
  77992. if (typeof start === 'string') {
  77993. encoding = start
  77994. start = 0
  77995. end = this.length
  77996. } else if (typeof end === 'string') {
  77997. encoding = end
  77998. end = this.length
  77999. }
  78000. if (encoding !== undefined && typeof encoding !== 'string') {
  78001. throw new TypeError('encoding must be a string')
  78002. }
  78003. if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
  78004. throw new TypeError('Unknown encoding: ' + encoding)
  78005. }
  78006. if (val.length === 1) {
  78007. var code = val.charCodeAt(0)
  78008. if ((encoding === 'utf8' && code < 128) ||
  78009. encoding === 'latin1') {
  78010. // Fast path: If `val` fits into a single byte, use that numeric value.
  78011. val = code
  78012. }
  78013. }
  78014. } else if (typeof val === 'number') {
  78015. val = val & 255
  78016. } else if (typeof val === 'boolean') {
  78017. val = Number(val)
  78018. }
  78019. // Invalid ranges are not set to a default, so can range check early.
  78020. if (start < 0 || this.length < start || this.length < end) {
  78021. throw new RangeError('Out of range index')
  78022. }
  78023. if (end <= start) {
  78024. return this
  78025. }
  78026. start = start >>> 0
  78027. end = end === undefined ? this.length : end >>> 0
  78028. if (!val) val = 0
  78029. var i
  78030. if (typeof val === 'number') {
  78031. for (i = start; i < end; ++i) {
  78032. this[i] = val
  78033. }
  78034. } else {
  78035. var bytes = Buffer.isBuffer(val)
  78036. ? val
  78037. : Buffer.from(val, encoding)
  78038. var len = bytes.length
  78039. if (len === 0) {
  78040. throw new TypeError('The value "' + val +
  78041. '" is invalid for argument "value"')
  78042. }
  78043. for (i = 0; i < end - start; ++i) {
  78044. this[i + start] = bytes[i % len]
  78045. }
  78046. }
  78047. return this
  78048. }
  78049. // HELPER FUNCTIONS
  78050. // ================
  78051. var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
  78052. function base64clean (str) {
  78053. // Node takes equal signs as end of the Base64 encoding
  78054. str = str.split('=')[0]
  78055. // Node strips out invalid characters like \n and \t from the string, base64-js does not
  78056. str = str.trim().replace(INVALID_BASE64_RE, '')
  78057. // Node converts strings with length < 2 to ''
  78058. if (str.length < 2) return ''
  78059. // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
  78060. while (str.length % 4 !== 0) {
  78061. str = str + '='
  78062. }
  78063. return str
  78064. }
  78065. function utf8ToBytes (string, units) {
  78066. units = units || Infinity
  78067. var codePoint
  78068. var length = string.length
  78069. var leadSurrogate = null
  78070. var bytes = []
  78071. for (var i = 0; i < length; ++i) {
  78072. codePoint = string.charCodeAt(i)
  78073. // is surrogate component
  78074. if (codePoint > 0xD7FF && codePoint < 0xE000) {
  78075. // last char was a lead
  78076. if (!leadSurrogate) {
  78077. // no lead yet
  78078. if (codePoint > 0xDBFF) {
  78079. // unexpected trail
  78080. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  78081. continue
  78082. } else if (i + 1 === length) {
  78083. // unpaired lead
  78084. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  78085. continue
  78086. }
  78087. // valid lead
  78088. leadSurrogate = codePoint
  78089. continue
  78090. }
  78091. // 2 leads in a row
  78092. if (codePoint < 0xDC00) {
  78093. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  78094. leadSurrogate = codePoint
  78095. continue
  78096. }
  78097. // valid surrogate pair
  78098. codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
  78099. } else if (leadSurrogate) {
  78100. // valid bmp char, but last char was a lead
  78101. if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
  78102. }
  78103. leadSurrogate = null
  78104. // encode utf8
  78105. if (codePoint < 0x80) {
  78106. if ((units -= 1) < 0) break
  78107. bytes.push(codePoint)
  78108. } else if (codePoint < 0x800) {
  78109. if ((units -= 2) < 0) break
  78110. bytes.push(
  78111. codePoint >> 0x6 | 0xC0,
  78112. codePoint & 0x3F | 0x80
  78113. )
  78114. } else if (codePoint < 0x10000) {
  78115. if ((units -= 3) < 0) break
  78116. bytes.push(
  78117. codePoint >> 0xC | 0xE0,
  78118. codePoint >> 0x6 & 0x3F | 0x80,
  78119. codePoint & 0x3F | 0x80
  78120. )
  78121. } else if (codePoint < 0x110000) {
  78122. if ((units -= 4) < 0) break
  78123. bytes.push(
  78124. codePoint >> 0x12 | 0xF0,
  78125. codePoint >> 0xC & 0x3F | 0x80,
  78126. codePoint >> 0x6 & 0x3F | 0x80,
  78127. codePoint & 0x3F | 0x80
  78128. )
  78129. } else {
  78130. throw new Error('Invalid code point')
  78131. }
  78132. }
  78133. return bytes
  78134. }
  78135. function asciiToBytes (str) {
  78136. var byteArray = []
  78137. for (var i = 0; i < str.length; ++i) {
  78138. // Node's code seems to be doing this and not & 0x7F..
  78139. byteArray.push(str.charCodeAt(i) & 0xFF)
  78140. }
  78141. return byteArray
  78142. }
  78143. function utf16leToBytes (str, units) {
  78144. var c, hi, lo
  78145. var byteArray = []
  78146. for (var i = 0; i < str.length; ++i) {
  78147. if ((units -= 2) < 0) break
  78148. c = str.charCodeAt(i)
  78149. hi = c >> 8
  78150. lo = c % 256
  78151. byteArray.push(lo)
  78152. byteArray.push(hi)
  78153. }
  78154. return byteArray
  78155. }
  78156. function base64ToBytes (str) {
  78157. return base64.toByteArray(base64clean(str))
  78158. }
  78159. function blitBuffer (src, dst, offset, length) {
  78160. for (var i = 0; i < length; ++i) {
  78161. if ((i + offset >= dst.length) || (i >= src.length)) break
  78162. dst[i + offset] = src[i]
  78163. }
  78164. return i
  78165. }
  78166. // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
  78167. // the `instanceof` check but they should be treated as of that type.
  78168. // See: https://github.com/feross/buffer/issues/166
  78169. function isInstance (obj, type) {
  78170. return obj instanceof type ||
  78171. (obj != null && obj.constructor != null && obj.constructor.name != null &&
  78172. obj.constructor.name === type.name)
  78173. }
  78174. function numberIsNaN (obj) {
  78175. // For IE11 support
  78176. return obj !== obj // eslint-disable-line no-self-compare
  78177. }
  78178. // Create lookup table for `toString('hex')`
  78179. // See: https://github.com/feross/buffer/issues/219
  78180. var hexSliceLookupTable = (function () {
  78181. var alphabet = '0123456789abcdef'
  78182. var table = new Array(256)
  78183. for (var i = 0; i < 16; ++i) {
  78184. var i16 = i * 16
  78185. for (var j = 0; j < 16; ++j) {
  78186. table[i16 + j] = alphabet[i] + alphabet[j]
  78187. }
  78188. }
  78189. return table
  78190. })()
  78191. /***/ }),
  78192. /***/ 69735:
  78193. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  78194. "use strict";
  78195. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  78196. if (k2 === undefined) k2 = k;
  78197. var desc = Object.getOwnPropertyDescriptor(m, k);
  78198. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  78199. desc = { enumerable: true, get: function() { return m[k]; } };
  78200. }
  78201. Object.defineProperty(o, k2, desc);
  78202. }) : (function(o, m, k, k2) {
  78203. if (k2 === undefined) k2 = k;
  78204. o[k2] = m[k];
  78205. }));
  78206. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  78207. Object.defineProperty(o, "default", { enumerable: true, value: v });
  78208. }) : function(o, v) {
  78209. o["default"] = v;
  78210. });
  78211. var __importStar = (this && this.__importStar) || function (mod) {
  78212. if (mod && mod.__esModule) return mod;
  78213. var result = {};
  78214. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  78215. __setModuleDefault(result, mod);
  78216. return result;
  78217. };
  78218. Object.defineProperty(exports, "__esModule", ({ value: true }));
  78219. /* eslint-disable no-bitwise --
  78220. * lots of bitwise operators necessary for this */
  78221. const hashjs = __importStar(__webpack_require__(33715));
  78222. const BigNum = __webpack_require__(13550);
  78223. class Sha512 {
  78224. constructor() {
  78225. this.hash = hashjs.sha512();
  78226. }
  78227. add(bytes) {
  78228. this.hash.update(bytes);
  78229. return this;
  78230. }
  78231. addU32(i) {
  78232. return this.add([
  78233. (i >>> 24) & 0xff,
  78234. (i >>> 16) & 0xff,
  78235. (i >>> 8) & 0xff,
  78236. i & 0xff,
  78237. ]);
  78238. }
  78239. finish() {
  78240. return this.hash.digest();
  78241. }
  78242. first256() {
  78243. return this.finish().slice(0, 32);
  78244. }
  78245. first256BN() {
  78246. return new BigNum(this.first256());
  78247. }
  78248. }
  78249. exports["default"] = Sha512;
  78250. //# sourceMappingURL=Sha512.js.map
  78251. /***/ }),
  78252. /***/ 29140:
  78253. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  78254. "use strict";
  78255. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  78256. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  78257. if (k2 === undefined) k2 = k;
  78258. var desc = Object.getOwnPropertyDescriptor(m, k);
  78259. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  78260. desc = { enumerable: true, get: function() { return m[k]; } };
  78261. }
  78262. Object.defineProperty(o, k2, desc);
  78263. }) : (function(o, m, k, k2) {
  78264. if (k2 === undefined) k2 = k;
  78265. o[k2] = m[k];
  78266. }));
  78267. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  78268. Object.defineProperty(o, "default", { enumerable: true, value: v });
  78269. }) : function(o, v) {
  78270. o["default"] = v;
  78271. });
  78272. var __importStar = (this && this.__importStar) || function (mod) {
  78273. if (mod && mod.__esModule) return mod;
  78274. var result = {};
  78275. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  78276. __setModuleDefault(result, mod);
  78277. return result;
  78278. };
  78279. Object.defineProperty(exports, "__esModule", ({ value: true }));
  78280. exports.decodeSeed = exports.deriveNodeAddress = exports.deriveAddress = exports.verify = exports.sign = exports.deriveKeypair = exports.generateSeed = void 0;
  78281. const assert = __importStar(__webpack_require__(69282));
  78282. const brorand = __webpack_require__(29931);
  78283. const hashjs = __importStar(__webpack_require__(33715));
  78284. const elliptic = __importStar(__webpack_require__(86266));
  78285. const addressCodec = __importStar(__webpack_require__(88914));
  78286. const secp256k1_1 = __webpack_require__(33342);
  78287. const utils = __importStar(__webpack_require__(50864));
  78288. const Ed25519 = elliptic.eddsa('ed25519');
  78289. const Secp256k1 = elliptic.ec('secp256k1');
  78290. const { hexToBytes } = utils;
  78291. const { bytesToHex } = utils;
  78292. function generateSeed(options = {}) {
  78293. assert.ok(!options.entropy || options.entropy.length >= 16, 'entropy too short');
  78294. const entropy = options.entropy ? options.entropy.slice(0, 16) : brorand(16);
  78295. const type = options.algorithm === 'ed25519' ? 'ed25519' : 'secp256k1';
  78296. return addressCodec.encodeSeed(Buffer.from(entropy), type);
  78297. }
  78298. exports.generateSeed = generateSeed;
  78299. function hash(message) {
  78300. return hashjs.sha512().update(message).digest().slice(0, 32);
  78301. }
  78302. const secp256k1 = {
  78303. deriveKeypair(entropy, options) {
  78304. const prefix = '00';
  78305. const privateKey = prefix + (0, secp256k1_1.derivePrivateKey)(entropy, options).toString(16, 64).toUpperCase();
  78306. const publicKey = bytesToHex(Secp256k1.keyFromPrivate(privateKey.slice(2))
  78307. .getPublic()
  78308. .encodeCompressed());
  78309. return { privateKey, publicKey };
  78310. },
  78311. sign(message, privateKey) {
  78312. return bytesToHex(Secp256k1.sign(hash(message), hexToBytes(privateKey), {
  78313. canonical: true,
  78314. }).toDER());
  78315. },
  78316. verify(message, signature, publicKey) {
  78317. return Secp256k1.verify(hash(message), signature, hexToBytes(publicKey));
  78318. },
  78319. };
  78320. const ed25519 = {
  78321. deriveKeypair(entropy) {
  78322. const prefix = 'ED';
  78323. const rawPrivateKey = hash(entropy);
  78324. const privateKey = prefix + bytesToHex(rawPrivateKey);
  78325. const publicKey = prefix + bytesToHex(Ed25519.keyFromSecret(rawPrivateKey).pubBytes());
  78326. return { privateKey, publicKey };
  78327. },
  78328. sign(message, privateKey) {
  78329. // caution: Ed25519.sign interprets all strings as hex, stripping
  78330. // any non-hex characters without warning
  78331. assert.ok(Array.isArray(message), 'message must be array of octets');
  78332. return bytesToHex(Ed25519.sign(message, hexToBytes(privateKey).slice(1)).toBytes());
  78333. },
  78334. verify(message, signature, publicKey) {
  78335. return Ed25519.verify(message, hexToBytes(signature), hexToBytes(publicKey).slice(1));
  78336. },
  78337. };
  78338. function select(algorithm) {
  78339. const methods = { 'ecdsa-secp256k1': secp256k1, ed25519 };
  78340. return methods[algorithm];
  78341. }
  78342. function deriveKeypair(seed, options) {
  78343. const decoded = addressCodec.decodeSeed(seed);
  78344. const algorithm = decoded.type === 'ed25519' ? 'ed25519' : 'ecdsa-secp256k1';
  78345. const method = select(algorithm);
  78346. const keypair = method.deriveKeypair(decoded.bytes, options);
  78347. const messageToVerify = hash('This test message should verify.');
  78348. const signature = method.sign(messageToVerify, keypair.privateKey);
  78349. /* istanbul ignore if */
  78350. if (method.verify(messageToVerify, signature, keypair.publicKey) !== true) {
  78351. throw new Error('derived keypair did not generate verifiable signature');
  78352. }
  78353. return keypair;
  78354. }
  78355. exports.deriveKeypair = deriveKeypair;
  78356. function getAlgorithmFromKey(key) {
  78357. const bytes = hexToBytes(key);
  78358. return bytes.length === 33 && bytes[0] === 0xed
  78359. ? 'ed25519'
  78360. : 'ecdsa-secp256k1';
  78361. }
  78362. function sign(messageHex, privateKey) {
  78363. const algorithm = getAlgorithmFromKey(privateKey);
  78364. return select(algorithm).sign(hexToBytes(messageHex), privateKey);
  78365. }
  78366. exports.sign = sign;
  78367. function verify(messageHex, signature, publicKey) {
  78368. const algorithm = getAlgorithmFromKey(publicKey);
  78369. return select(algorithm).verify(hexToBytes(messageHex), signature, publicKey);
  78370. }
  78371. exports.verify = verify;
  78372. function deriveAddressFromBytes(publicKeyBytes) {
  78373. return addressCodec.encodeAccountID(utils.computePublicKeyHash(publicKeyBytes));
  78374. }
  78375. function deriveAddress(publicKey) {
  78376. return deriveAddressFromBytes(Buffer.from(hexToBytes(publicKey)));
  78377. }
  78378. exports.deriveAddress = deriveAddress;
  78379. function deriveNodeAddress(publicKey) {
  78380. const generatorBytes = addressCodec.decodeNodePublic(publicKey);
  78381. const accountPublicBytes = (0, secp256k1_1.accountPublicFromPublicGenerator)(generatorBytes);
  78382. return deriveAddressFromBytes(accountPublicBytes);
  78383. }
  78384. exports.deriveNodeAddress = deriveNodeAddress;
  78385. const { decodeSeed } = addressCodec;
  78386. exports.decodeSeed = decodeSeed;
  78387. //# sourceMappingURL=index.js.map
  78388. /***/ }),
  78389. /***/ 33342:
  78390. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  78391. "use strict";
  78392. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  78393. if (k2 === undefined) k2 = k;
  78394. var desc = Object.getOwnPropertyDescriptor(m, k);
  78395. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  78396. desc = { enumerable: true, get: function() { return m[k]; } };
  78397. }
  78398. Object.defineProperty(o, k2, desc);
  78399. }) : (function(o, m, k, k2) {
  78400. if (k2 === undefined) k2 = k;
  78401. o[k2] = m[k];
  78402. }));
  78403. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  78404. Object.defineProperty(o, "default", { enumerable: true, value: v });
  78405. }) : function(o, v) {
  78406. o["default"] = v;
  78407. });
  78408. var __importStar = (this && this.__importStar) || function (mod) {
  78409. if (mod && mod.__esModule) return mod;
  78410. var result = {};
  78411. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  78412. __setModuleDefault(result, mod);
  78413. return result;
  78414. };
  78415. var __importDefault = (this && this.__importDefault) || function (mod) {
  78416. return (mod && mod.__esModule) ? mod : { "default": mod };
  78417. };
  78418. Object.defineProperty(exports, "__esModule", ({ value: true }));
  78419. exports.accountPublicFromPublicGenerator = exports.derivePrivateKey = void 0;
  78420. const elliptic = __importStar(__webpack_require__(86266));
  78421. const Sha512_1 = __importDefault(__webpack_require__(69735));
  78422. const secp256k1 = elliptic.ec('secp256k1');
  78423. function deriveScalar(bytes, discrim) {
  78424. const order = secp256k1.curve.n;
  78425. for (let i = 0; i <= 0xffffffff; i++) {
  78426. // We hash the bytes to find a 256 bit number, looping until we are sure it
  78427. // is less than the order of the curve.
  78428. const hasher = new Sha512_1.default().add(bytes);
  78429. // If the optional discriminator index was passed in, update the hash.
  78430. if (discrim !== undefined) {
  78431. hasher.addU32(discrim);
  78432. }
  78433. hasher.addU32(i);
  78434. const key = hasher.first256BN();
  78435. /* istanbul ignore else */
  78436. if (key.cmpn(0) > 0 && key.cmp(order) < 0) {
  78437. return key;
  78438. }
  78439. }
  78440. // This error is practically impossible to reach.
  78441. // The order of the curve describes the (finite) amount of points on the curve
  78442. // https://github.com/indutny/elliptic/blob/master/lib/elliptic/curves.js#L182
  78443. // How often will an (essentially) random number generated by Sha512 be larger than that?
  78444. // There's 2^32 chances (the for loop) to get a number smaller than the order,
  78445. // and it's rare that you'll even get past the first loop iteration.
  78446. // Note that in TypeScript we actually need the throw, otherwise the function signature would be BN | undefined
  78447. //
  78448. /* istanbul ignore next */
  78449. throw new Error('impossible unicorn ;)');
  78450. }
  78451. /**
  78452. * @param seed - Bytes.
  78453. * @param [opts] - Object.
  78454. * @param [opts.accountIndex=0] - The account number to generate.
  78455. * @param [opts.validator=false] - Generate root key-pair,
  78456. * as used by validators.
  78457. * @returns {bn.js} 256 bit scalar value.
  78458. *
  78459. */
  78460. function derivePrivateKey(seed, opts = {}) {
  78461. const root = opts.validator;
  78462. const order = secp256k1.curve.n;
  78463. // This private generator represents the `root` private key, and is what's
  78464. // used by validators for signing when a keypair is generated from a seed.
  78465. const privateGen = deriveScalar(seed);
  78466. if (root) {
  78467. // As returned by validation_create for a given seed
  78468. return privateGen;
  78469. }
  78470. const publicGen = secp256k1.g.mul(privateGen);
  78471. // A seed can generate many keypairs as a function of the seed and a uint32.
  78472. // Almost everyone just uses the first account, `0`.
  78473. const accountIndex = opts.accountIndex || 0;
  78474. return deriveScalar(publicGen.encodeCompressed(), accountIndex)
  78475. .add(privateGen)
  78476. .mod(order);
  78477. }
  78478. exports.derivePrivateKey = derivePrivateKey;
  78479. function accountPublicFromPublicGenerator(publicGenBytes) {
  78480. const rootPubPoint = secp256k1.curve.decodePoint(publicGenBytes);
  78481. const scalar = deriveScalar(publicGenBytes, 0);
  78482. const point = secp256k1.g.mul(scalar);
  78483. const offset = rootPubPoint.add(point);
  78484. return offset.encodeCompressed();
  78485. }
  78486. exports.accountPublicFromPublicGenerator = accountPublicFromPublicGenerator;
  78487. //# sourceMappingURL=secp256k1.js.map
  78488. /***/ }),
  78489. /***/ 50864:
  78490. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  78491. "use strict";
  78492. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  78493. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  78494. if (k2 === undefined) k2 = k;
  78495. var desc = Object.getOwnPropertyDescriptor(m, k);
  78496. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  78497. desc = { enumerable: true, get: function() { return m[k]; } };
  78498. }
  78499. Object.defineProperty(o, k2, desc);
  78500. }) : (function(o, m, k, k2) {
  78501. if (k2 === undefined) k2 = k;
  78502. o[k2] = m[k];
  78503. }));
  78504. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  78505. Object.defineProperty(o, "default", { enumerable: true, value: v });
  78506. }) : function(o, v) {
  78507. o["default"] = v;
  78508. });
  78509. var __importStar = (this && this.__importStar) || function (mod) {
  78510. if (mod && mod.__esModule) return mod;
  78511. var result = {};
  78512. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  78513. __setModuleDefault(result, mod);
  78514. return result;
  78515. };
  78516. Object.defineProperty(exports, "__esModule", ({ value: true }));
  78517. exports.computePublicKeyHash = exports.hexToBytes = exports.bytesToHex = void 0;
  78518. const assert = __importStar(__webpack_require__(69282));
  78519. const hashjs = __importStar(__webpack_require__(33715));
  78520. const BN = __webpack_require__(13550);
  78521. function bytesToHex(a) {
  78522. return Array.from(a, (byteValue) => {
  78523. const hex = byteValue.toString(16).toUpperCase();
  78524. return hex.length > 1 ? hex : `0${hex}`;
  78525. }).join('');
  78526. }
  78527. exports.bytesToHex = bytesToHex;
  78528. function hexToBytes(a) {
  78529. assert.ok(a.length % 2 === 0);
  78530. // Special-case length zero to return [].
  78531. // BN.toArray intentionally returns [0] rather than [] for length zero,
  78532. // which may make sense for BigNum data, but not for byte strings.
  78533. return a.length === 0 ? [] : new BN(a, 16).toArray(null, a.length / 2);
  78534. }
  78535. exports.hexToBytes = hexToBytes;
  78536. function computePublicKeyHash(publicKeyBytes) {
  78537. const hash256 = hashjs.sha256().update(publicKeyBytes).digest();
  78538. const hash160 = hashjs.ripemd160().update(hash256).digest();
  78539. return Buffer.from(hash160);
  78540. }
  78541. exports.computePublicKeyHash = computePublicKeyHash;
  78542. //# sourceMappingURL=utils.js.map
  78543. /***/ }),
  78544. /***/ 89509:
  78545. /***/ ((module, exports, __webpack_require__) => {
  78546. /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
  78547. /* eslint-disable node/no-deprecated-api */
  78548. var buffer = __webpack_require__(48764)
  78549. var Buffer = buffer.Buffer
  78550. // alternative to using Object.keys for old browsers
  78551. function copyProps (src, dst) {
  78552. for (var key in src) {
  78553. dst[key] = src[key]
  78554. }
  78555. }
  78556. if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
  78557. module.exports = buffer
  78558. } else {
  78559. // Copy properties from require('buffer')
  78560. copyProps(buffer, exports)
  78561. exports.Buffer = SafeBuffer
  78562. }
  78563. function SafeBuffer (arg, encodingOrOffset, length) {
  78564. return Buffer(arg, encodingOrOffset, length)
  78565. }
  78566. SafeBuffer.prototype = Object.create(Buffer.prototype)
  78567. // Copy static methods from Buffer
  78568. copyProps(Buffer, SafeBuffer)
  78569. SafeBuffer.from = function (arg, encodingOrOffset, length) {
  78570. if (typeof arg === 'number') {
  78571. throw new TypeError('Argument must not be a number')
  78572. }
  78573. return Buffer(arg, encodingOrOffset, length)
  78574. }
  78575. SafeBuffer.alloc = function (size, fill, encoding) {
  78576. if (typeof size !== 'number') {
  78577. throw new TypeError('Argument must be a number')
  78578. }
  78579. var buf = Buffer(size)
  78580. if (fill !== undefined) {
  78581. if (typeof encoding === 'string') {
  78582. buf.fill(fill, encoding)
  78583. } else {
  78584. buf.fill(fill)
  78585. }
  78586. } else {
  78587. buf.fill(0)
  78588. }
  78589. return buf
  78590. }
  78591. SafeBuffer.allocUnsafe = function (size) {
  78592. if (typeof size !== 'number') {
  78593. throw new TypeError('Argument must be a number')
  78594. }
  78595. return Buffer(size)
  78596. }
  78597. SafeBuffer.allocUnsafeSlow = function (size) {
  78598. if (typeof size !== 'number') {
  78599. throw new TypeError('Argument must be a number')
  78600. }
  78601. return buffer.SlowBuffer(size)
  78602. }
  78603. /***/ }),
  78604. /***/ 2399:
  78605. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  78606. "use strict";
  78607. /* provided dependency */ var process = __webpack_require__(34155);
  78608. /* eslint-disable node/no-deprecated-api */
  78609. var buffer = __webpack_require__(48764)
  78610. var Buffer = buffer.Buffer
  78611. var safer = {}
  78612. var key
  78613. for (key in buffer) {
  78614. if (!buffer.hasOwnProperty(key)) continue
  78615. if (key === 'SlowBuffer' || key === 'Buffer') continue
  78616. safer[key] = buffer[key]
  78617. }
  78618. var Safer = safer.Buffer = {}
  78619. for (key in Buffer) {
  78620. if (!Buffer.hasOwnProperty(key)) continue
  78621. if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue
  78622. Safer[key] = Buffer[key]
  78623. }
  78624. safer.Buffer.prototype = Buffer.prototype
  78625. if (!Safer.from || Safer.from === Uint8Array.from) {
  78626. Safer.from = function (value, encodingOrOffset, length) {
  78627. if (typeof value === 'number') {
  78628. throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value)
  78629. }
  78630. if (value && typeof value.length === 'undefined') {
  78631. throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)
  78632. }
  78633. return Buffer(value, encodingOrOffset, length)
  78634. }
  78635. }
  78636. if (!Safer.alloc) {
  78637. Safer.alloc = function (size, fill, encoding) {
  78638. if (typeof size !== 'number') {
  78639. throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size)
  78640. }
  78641. if (size < 0 || size >= 2 * (1 << 30)) {
  78642. throw new RangeError('The value "' + size + '" is invalid for option "size"')
  78643. }
  78644. var buf = Buffer(size)
  78645. if (!fill || fill.length === 0) {
  78646. buf.fill(0)
  78647. } else if (typeof encoding === 'string') {
  78648. buf.fill(fill, encoding)
  78649. } else {
  78650. buf.fill(fill)
  78651. }
  78652. return buf
  78653. }
  78654. }
  78655. if (!safer.kStringMaxLength) {
  78656. try {
  78657. safer.kStringMaxLength = process.binding('buffer').kStringMaxLength
  78658. } catch (e) {
  78659. // we can't determine kStringMaxLength in environments where process.binding
  78660. // is unsupported, so let's not set it
  78661. }
  78662. }
  78663. if (!safer.constants) {
  78664. safer.constants = {
  78665. MAX_LENGTH: safer.kMaxLength
  78666. }
  78667. if (safer.kStringMaxLength) {
  78668. safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength
  78669. }
  78670. }
  78671. module.exports = safer
  78672. /***/ }),
  78673. /***/ 24189:
  78674. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  78675. var Buffer = (__webpack_require__(89509).Buffer)
  78676. // prototype class for hash functions
  78677. function Hash (blockSize, finalSize) {
  78678. this._block = Buffer.alloc(blockSize)
  78679. this._finalSize = finalSize
  78680. this._blockSize = blockSize
  78681. this._len = 0
  78682. }
  78683. Hash.prototype.update = function (data, enc) {
  78684. if (typeof data === 'string') {
  78685. enc = enc || 'utf8'
  78686. data = Buffer.from(data, enc)
  78687. }
  78688. var block = this._block
  78689. var blockSize = this._blockSize
  78690. var length = data.length
  78691. var accum = this._len
  78692. for (var offset = 0; offset < length;) {
  78693. var assigned = accum % blockSize
  78694. var remainder = Math.min(length - offset, blockSize - assigned)
  78695. for (var i = 0; i < remainder; i++) {
  78696. block[assigned + i] = data[offset + i]
  78697. }
  78698. accum += remainder
  78699. offset += remainder
  78700. if ((accum % blockSize) === 0) {
  78701. this._update(block)
  78702. }
  78703. }
  78704. this._len += length
  78705. return this
  78706. }
  78707. Hash.prototype.digest = function (enc) {
  78708. var rem = this._len % this._blockSize
  78709. this._block[rem] = 0x80
  78710. // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
  78711. // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
  78712. this._block.fill(0, rem + 1)
  78713. if (rem >= this._finalSize) {
  78714. this._update(this._block)
  78715. this._block.fill(0)
  78716. }
  78717. var bits = this._len * 8
  78718. // uint32
  78719. if (bits <= 0xffffffff) {
  78720. this._block.writeUInt32BE(bits, this._blockSize - 4)
  78721. // uint64
  78722. } else {
  78723. var lowBits = (bits & 0xffffffff) >>> 0
  78724. var highBits = (bits - lowBits) / 0x100000000
  78725. this._block.writeUInt32BE(highBits, this._blockSize - 8)
  78726. this._block.writeUInt32BE(lowBits, this._blockSize - 4)
  78727. }
  78728. this._update(this._block)
  78729. var hash = this._hash()
  78730. return enc ? hash.toString(enc) : hash
  78731. }
  78732. Hash.prototype._update = function () {
  78733. throw new Error('_update must be implemented by subclass')
  78734. }
  78735. module.exports = Hash
  78736. /***/ }),
  78737. /***/ 89072:
  78738. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  78739. var exports = module.exports = function SHA (algorithm) {
  78740. algorithm = algorithm.toLowerCase()
  78741. var Algorithm = exports[algorithm]
  78742. if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
  78743. return new Algorithm()
  78744. }
  78745. exports.sha = __webpack_require__(74448)
  78746. exports.sha1 = __webpack_require__(18336)
  78747. exports.sha224 = __webpack_require__(48432)
  78748. exports.sha256 = __webpack_require__(67499)
  78749. exports.sha384 = __webpack_require__(51686)
  78750. exports.sha512 = __webpack_require__(87816)
  78751. /***/ }),
  78752. /***/ 74448:
  78753. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  78754. /*
  78755. * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
  78756. * in FIPS PUB 180-1
  78757. * This source code is derived from sha1.js of the same repository.
  78758. * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
  78759. * operation was added.
  78760. */
  78761. var inherits = __webpack_require__(35717)
  78762. var Hash = __webpack_require__(24189)
  78763. var Buffer = (__webpack_require__(89509).Buffer)
  78764. var K = [
  78765. 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
  78766. ]
  78767. var W = new Array(80)
  78768. function Sha () {
  78769. this.init()
  78770. this._w = W
  78771. Hash.call(this, 64, 56)
  78772. }
  78773. inherits(Sha, Hash)
  78774. Sha.prototype.init = function () {
  78775. this._a = 0x67452301
  78776. this._b = 0xefcdab89
  78777. this._c = 0x98badcfe
  78778. this._d = 0x10325476
  78779. this._e = 0xc3d2e1f0
  78780. return this
  78781. }
  78782. function rotl5 (num) {
  78783. return (num << 5) | (num >>> 27)
  78784. }
  78785. function rotl30 (num) {
  78786. return (num << 30) | (num >>> 2)
  78787. }
  78788. function ft (s, b, c, d) {
  78789. if (s === 0) return (b & c) | ((~b) & d)
  78790. if (s === 2) return (b & c) | (b & d) | (c & d)
  78791. return b ^ c ^ d
  78792. }
  78793. Sha.prototype._update = function (M) {
  78794. var W = this._w
  78795. var a = this._a | 0
  78796. var b = this._b | 0
  78797. var c = this._c | 0
  78798. var d = this._d | 0
  78799. var e = this._e | 0
  78800. for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
  78801. for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
  78802. for (var j = 0; j < 80; ++j) {
  78803. var s = ~~(j / 20)
  78804. var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
  78805. e = d
  78806. d = c
  78807. c = rotl30(b)
  78808. b = a
  78809. a = t
  78810. }
  78811. this._a = (a + this._a) | 0
  78812. this._b = (b + this._b) | 0
  78813. this._c = (c + this._c) | 0
  78814. this._d = (d + this._d) | 0
  78815. this._e = (e + this._e) | 0
  78816. }
  78817. Sha.prototype._hash = function () {
  78818. var H = Buffer.allocUnsafe(20)
  78819. H.writeInt32BE(this._a | 0, 0)
  78820. H.writeInt32BE(this._b | 0, 4)
  78821. H.writeInt32BE(this._c | 0, 8)
  78822. H.writeInt32BE(this._d | 0, 12)
  78823. H.writeInt32BE(this._e | 0, 16)
  78824. return H
  78825. }
  78826. module.exports = Sha
  78827. /***/ }),
  78828. /***/ 18336:
  78829. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  78830. /*
  78831. * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
  78832. * in FIPS PUB 180-1
  78833. * Version 2.1a Copyright Paul Johnston 2000 - 2002.
  78834. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
  78835. * Distributed under the BSD License
  78836. * See http://pajhome.org.uk/crypt/md5 for details.
  78837. */
  78838. var inherits = __webpack_require__(35717)
  78839. var Hash = __webpack_require__(24189)
  78840. var Buffer = (__webpack_require__(89509).Buffer)
  78841. var K = [
  78842. 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
  78843. ]
  78844. var W = new Array(80)
  78845. function Sha1 () {
  78846. this.init()
  78847. this._w = W
  78848. Hash.call(this, 64, 56)
  78849. }
  78850. inherits(Sha1, Hash)
  78851. Sha1.prototype.init = function () {
  78852. this._a = 0x67452301
  78853. this._b = 0xefcdab89
  78854. this._c = 0x98badcfe
  78855. this._d = 0x10325476
  78856. this._e = 0xc3d2e1f0
  78857. return this
  78858. }
  78859. function rotl1 (num) {
  78860. return (num << 1) | (num >>> 31)
  78861. }
  78862. function rotl5 (num) {
  78863. return (num << 5) | (num >>> 27)
  78864. }
  78865. function rotl30 (num) {
  78866. return (num << 30) | (num >>> 2)
  78867. }
  78868. function ft (s, b, c, d) {
  78869. if (s === 0) return (b & c) | ((~b) & d)
  78870. if (s === 2) return (b & c) | (b & d) | (c & d)
  78871. return b ^ c ^ d
  78872. }
  78873. Sha1.prototype._update = function (M) {
  78874. var W = this._w
  78875. var a = this._a | 0
  78876. var b = this._b | 0
  78877. var c = this._c | 0
  78878. var d = this._d | 0
  78879. var e = this._e | 0
  78880. for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
  78881. for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
  78882. for (var j = 0; j < 80; ++j) {
  78883. var s = ~~(j / 20)
  78884. var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
  78885. e = d
  78886. d = c
  78887. c = rotl30(b)
  78888. b = a
  78889. a = t
  78890. }
  78891. this._a = (a + this._a) | 0
  78892. this._b = (b + this._b) | 0
  78893. this._c = (c + this._c) | 0
  78894. this._d = (d + this._d) | 0
  78895. this._e = (e + this._e) | 0
  78896. }
  78897. Sha1.prototype._hash = function () {
  78898. var H = Buffer.allocUnsafe(20)
  78899. H.writeInt32BE(this._a | 0, 0)
  78900. H.writeInt32BE(this._b | 0, 4)
  78901. H.writeInt32BE(this._c | 0, 8)
  78902. H.writeInt32BE(this._d | 0, 12)
  78903. H.writeInt32BE(this._e | 0, 16)
  78904. return H
  78905. }
  78906. module.exports = Sha1
  78907. /***/ }),
  78908. /***/ 48432:
  78909. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  78910. /**
  78911. * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
  78912. * in FIPS 180-2
  78913. * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
  78914. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
  78915. *
  78916. */
  78917. var inherits = __webpack_require__(35717)
  78918. var Sha256 = __webpack_require__(67499)
  78919. var Hash = __webpack_require__(24189)
  78920. var Buffer = (__webpack_require__(89509).Buffer)
  78921. var W = new Array(64)
  78922. function Sha224 () {
  78923. this.init()
  78924. this._w = W // new Array(64)
  78925. Hash.call(this, 64, 56)
  78926. }
  78927. inherits(Sha224, Sha256)
  78928. Sha224.prototype.init = function () {
  78929. this._a = 0xc1059ed8
  78930. this._b = 0x367cd507
  78931. this._c = 0x3070dd17
  78932. this._d = 0xf70e5939
  78933. this._e = 0xffc00b31
  78934. this._f = 0x68581511
  78935. this._g = 0x64f98fa7
  78936. this._h = 0xbefa4fa4
  78937. return this
  78938. }
  78939. Sha224.prototype._hash = function () {
  78940. var H = Buffer.allocUnsafe(28)
  78941. H.writeInt32BE(this._a, 0)
  78942. H.writeInt32BE(this._b, 4)
  78943. H.writeInt32BE(this._c, 8)
  78944. H.writeInt32BE(this._d, 12)
  78945. H.writeInt32BE(this._e, 16)
  78946. H.writeInt32BE(this._f, 20)
  78947. H.writeInt32BE(this._g, 24)
  78948. return H
  78949. }
  78950. module.exports = Sha224
  78951. /***/ }),
  78952. /***/ 67499:
  78953. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  78954. /**
  78955. * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
  78956. * in FIPS 180-2
  78957. * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
  78958. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
  78959. *
  78960. */
  78961. var inherits = __webpack_require__(35717)
  78962. var Hash = __webpack_require__(24189)
  78963. var Buffer = (__webpack_require__(89509).Buffer)
  78964. var K = [
  78965. 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
  78966. 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
  78967. 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
  78968. 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
  78969. 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
  78970. 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
  78971. 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
  78972. 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
  78973. 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
  78974. 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
  78975. 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
  78976. 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
  78977. 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
  78978. 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
  78979. 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
  78980. 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
  78981. ]
  78982. var W = new Array(64)
  78983. function Sha256 () {
  78984. this.init()
  78985. this._w = W // new Array(64)
  78986. Hash.call(this, 64, 56)
  78987. }
  78988. inherits(Sha256, Hash)
  78989. Sha256.prototype.init = function () {
  78990. this._a = 0x6a09e667
  78991. this._b = 0xbb67ae85
  78992. this._c = 0x3c6ef372
  78993. this._d = 0xa54ff53a
  78994. this._e = 0x510e527f
  78995. this._f = 0x9b05688c
  78996. this._g = 0x1f83d9ab
  78997. this._h = 0x5be0cd19
  78998. return this
  78999. }
  79000. function ch (x, y, z) {
  79001. return z ^ (x & (y ^ z))
  79002. }
  79003. function maj (x, y, z) {
  79004. return (x & y) | (z & (x | y))
  79005. }
  79006. function sigma0 (x) {
  79007. return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
  79008. }
  79009. function sigma1 (x) {
  79010. return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
  79011. }
  79012. function gamma0 (x) {
  79013. return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
  79014. }
  79015. function gamma1 (x) {
  79016. return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
  79017. }
  79018. Sha256.prototype._update = function (M) {
  79019. var W = this._w
  79020. var a = this._a | 0
  79021. var b = this._b | 0
  79022. var c = this._c | 0
  79023. var d = this._d | 0
  79024. var e = this._e | 0
  79025. var f = this._f | 0
  79026. var g = this._g | 0
  79027. var h = this._h | 0
  79028. for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
  79029. for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
  79030. for (var j = 0; j < 64; ++j) {
  79031. var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
  79032. var T2 = (sigma0(a) + maj(a, b, c)) | 0
  79033. h = g
  79034. g = f
  79035. f = e
  79036. e = (d + T1) | 0
  79037. d = c
  79038. c = b
  79039. b = a
  79040. a = (T1 + T2) | 0
  79041. }
  79042. this._a = (a + this._a) | 0
  79043. this._b = (b + this._b) | 0
  79044. this._c = (c + this._c) | 0
  79045. this._d = (d + this._d) | 0
  79046. this._e = (e + this._e) | 0
  79047. this._f = (f + this._f) | 0
  79048. this._g = (g + this._g) | 0
  79049. this._h = (h + this._h) | 0
  79050. }
  79051. Sha256.prototype._hash = function () {
  79052. var H = Buffer.allocUnsafe(32)
  79053. H.writeInt32BE(this._a, 0)
  79054. H.writeInt32BE(this._b, 4)
  79055. H.writeInt32BE(this._c, 8)
  79056. H.writeInt32BE(this._d, 12)
  79057. H.writeInt32BE(this._e, 16)
  79058. H.writeInt32BE(this._f, 20)
  79059. H.writeInt32BE(this._g, 24)
  79060. H.writeInt32BE(this._h, 28)
  79061. return H
  79062. }
  79063. module.exports = Sha256
  79064. /***/ }),
  79065. /***/ 51686:
  79066. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  79067. var inherits = __webpack_require__(35717)
  79068. var SHA512 = __webpack_require__(87816)
  79069. var Hash = __webpack_require__(24189)
  79070. var Buffer = (__webpack_require__(89509).Buffer)
  79071. var W = new Array(160)
  79072. function Sha384 () {
  79073. this.init()
  79074. this._w = W
  79075. Hash.call(this, 128, 112)
  79076. }
  79077. inherits(Sha384, SHA512)
  79078. Sha384.prototype.init = function () {
  79079. this._ah = 0xcbbb9d5d
  79080. this._bh = 0x629a292a
  79081. this._ch = 0x9159015a
  79082. this._dh = 0x152fecd8
  79083. this._eh = 0x67332667
  79084. this._fh = 0x8eb44a87
  79085. this._gh = 0xdb0c2e0d
  79086. this._hh = 0x47b5481d
  79087. this._al = 0xc1059ed8
  79088. this._bl = 0x367cd507
  79089. this._cl = 0x3070dd17
  79090. this._dl = 0xf70e5939
  79091. this._el = 0xffc00b31
  79092. this._fl = 0x68581511
  79093. this._gl = 0x64f98fa7
  79094. this._hl = 0xbefa4fa4
  79095. return this
  79096. }
  79097. Sha384.prototype._hash = function () {
  79098. var H = Buffer.allocUnsafe(48)
  79099. function writeInt64BE (h, l, offset) {
  79100. H.writeInt32BE(h, offset)
  79101. H.writeInt32BE(l, offset + 4)
  79102. }
  79103. writeInt64BE(this._ah, this._al, 0)
  79104. writeInt64BE(this._bh, this._bl, 8)
  79105. writeInt64BE(this._ch, this._cl, 16)
  79106. writeInt64BE(this._dh, this._dl, 24)
  79107. writeInt64BE(this._eh, this._el, 32)
  79108. writeInt64BE(this._fh, this._fl, 40)
  79109. return H
  79110. }
  79111. module.exports = Sha384
  79112. /***/ }),
  79113. /***/ 87816:
  79114. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  79115. var inherits = __webpack_require__(35717)
  79116. var Hash = __webpack_require__(24189)
  79117. var Buffer = (__webpack_require__(89509).Buffer)
  79118. var K = [
  79119. 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
  79120. 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
  79121. 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
  79122. 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
  79123. 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
  79124. 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
  79125. 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
  79126. 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
  79127. 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
  79128. 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
  79129. 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
  79130. 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
  79131. 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
  79132. 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
  79133. 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
  79134. 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
  79135. 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
  79136. 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
  79137. 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
  79138. 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
  79139. 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
  79140. 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
  79141. 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
  79142. 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
  79143. 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
  79144. 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
  79145. 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
  79146. 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
  79147. 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
  79148. 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
  79149. 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
  79150. 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
  79151. 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
  79152. 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
  79153. 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
  79154. 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
  79155. 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
  79156. 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
  79157. 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
  79158. 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
  79159. ]
  79160. var W = new Array(160)
  79161. function Sha512 () {
  79162. this.init()
  79163. this._w = W
  79164. Hash.call(this, 128, 112)
  79165. }
  79166. inherits(Sha512, Hash)
  79167. Sha512.prototype.init = function () {
  79168. this._ah = 0x6a09e667
  79169. this._bh = 0xbb67ae85
  79170. this._ch = 0x3c6ef372
  79171. this._dh = 0xa54ff53a
  79172. this._eh = 0x510e527f
  79173. this._fh = 0x9b05688c
  79174. this._gh = 0x1f83d9ab
  79175. this._hh = 0x5be0cd19
  79176. this._al = 0xf3bcc908
  79177. this._bl = 0x84caa73b
  79178. this._cl = 0xfe94f82b
  79179. this._dl = 0x5f1d36f1
  79180. this._el = 0xade682d1
  79181. this._fl = 0x2b3e6c1f
  79182. this._gl = 0xfb41bd6b
  79183. this._hl = 0x137e2179
  79184. return this
  79185. }
  79186. function Ch (x, y, z) {
  79187. return z ^ (x & (y ^ z))
  79188. }
  79189. function maj (x, y, z) {
  79190. return (x & y) | (z & (x | y))
  79191. }
  79192. function sigma0 (x, xl) {
  79193. return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
  79194. }
  79195. function sigma1 (x, xl) {
  79196. return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
  79197. }
  79198. function Gamma0 (x, xl) {
  79199. return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
  79200. }
  79201. function Gamma0l (x, xl) {
  79202. return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
  79203. }
  79204. function Gamma1 (x, xl) {
  79205. return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
  79206. }
  79207. function Gamma1l (x, xl) {
  79208. return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
  79209. }
  79210. function getCarry (a, b) {
  79211. return (a >>> 0) < (b >>> 0) ? 1 : 0
  79212. }
  79213. Sha512.prototype._update = function (M) {
  79214. var W = this._w
  79215. var ah = this._ah | 0
  79216. var bh = this._bh | 0
  79217. var ch = this._ch | 0
  79218. var dh = this._dh | 0
  79219. var eh = this._eh | 0
  79220. var fh = this._fh | 0
  79221. var gh = this._gh | 0
  79222. var hh = this._hh | 0
  79223. var al = this._al | 0
  79224. var bl = this._bl | 0
  79225. var cl = this._cl | 0
  79226. var dl = this._dl | 0
  79227. var el = this._el | 0
  79228. var fl = this._fl | 0
  79229. var gl = this._gl | 0
  79230. var hl = this._hl | 0
  79231. for (var i = 0; i < 32; i += 2) {
  79232. W[i] = M.readInt32BE(i * 4)
  79233. W[i + 1] = M.readInt32BE(i * 4 + 4)
  79234. }
  79235. for (; i < 160; i += 2) {
  79236. var xh = W[i - 15 * 2]
  79237. var xl = W[i - 15 * 2 + 1]
  79238. var gamma0 = Gamma0(xh, xl)
  79239. var gamma0l = Gamma0l(xl, xh)
  79240. xh = W[i - 2 * 2]
  79241. xl = W[i - 2 * 2 + 1]
  79242. var gamma1 = Gamma1(xh, xl)
  79243. var gamma1l = Gamma1l(xl, xh)
  79244. // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
  79245. var Wi7h = W[i - 7 * 2]
  79246. var Wi7l = W[i - 7 * 2 + 1]
  79247. var Wi16h = W[i - 16 * 2]
  79248. var Wi16l = W[i - 16 * 2 + 1]
  79249. var Wil = (gamma0l + Wi7l) | 0
  79250. var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
  79251. Wil = (Wil + gamma1l) | 0
  79252. Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
  79253. Wil = (Wil + Wi16l) | 0
  79254. Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
  79255. W[i] = Wih
  79256. W[i + 1] = Wil
  79257. }
  79258. for (var j = 0; j < 160; j += 2) {
  79259. Wih = W[j]
  79260. Wil = W[j + 1]
  79261. var majh = maj(ah, bh, ch)
  79262. var majl = maj(al, bl, cl)
  79263. var sigma0h = sigma0(ah, al)
  79264. var sigma0l = sigma0(al, ah)
  79265. var sigma1h = sigma1(eh, el)
  79266. var sigma1l = sigma1(el, eh)
  79267. // t1 = h + sigma1 + ch + K[j] + W[j]
  79268. var Kih = K[j]
  79269. var Kil = K[j + 1]
  79270. var chh = Ch(eh, fh, gh)
  79271. var chl = Ch(el, fl, gl)
  79272. var t1l = (hl + sigma1l) | 0
  79273. var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
  79274. t1l = (t1l + chl) | 0
  79275. t1h = (t1h + chh + getCarry(t1l, chl)) | 0
  79276. t1l = (t1l + Kil) | 0
  79277. t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
  79278. t1l = (t1l + Wil) | 0
  79279. t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
  79280. // t2 = sigma0 + maj
  79281. var t2l = (sigma0l + majl) | 0
  79282. var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
  79283. hh = gh
  79284. hl = gl
  79285. gh = fh
  79286. gl = fl
  79287. fh = eh
  79288. fl = el
  79289. el = (dl + t1l) | 0
  79290. eh = (dh + t1h + getCarry(el, dl)) | 0
  79291. dh = ch
  79292. dl = cl
  79293. ch = bh
  79294. cl = bl
  79295. bh = ah
  79296. bl = al
  79297. al = (t1l + t2l) | 0
  79298. ah = (t1h + t2h + getCarry(al, t1l)) | 0
  79299. }
  79300. this._al = (this._al + al) | 0
  79301. this._bl = (this._bl + bl) | 0
  79302. this._cl = (this._cl + cl) | 0
  79303. this._dl = (this._dl + dl) | 0
  79304. this._el = (this._el + el) | 0
  79305. this._fl = (this._fl + fl) | 0
  79306. this._gl = (this._gl + gl) | 0
  79307. this._hl = (this._hl + hl) | 0
  79308. this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
  79309. this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
  79310. this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
  79311. this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
  79312. this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
  79313. this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
  79314. this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
  79315. this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
  79316. }
  79317. Sha512.prototype._hash = function () {
  79318. var H = Buffer.allocUnsafe(64)
  79319. function writeInt64BE (h, l, offset) {
  79320. H.writeInt32BE(h, offset)
  79321. H.writeInt32BE(l, offset + 4)
  79322. }
  79323. writeInt64BE(this._ah, this._al, 0)
  79324. writeInt64BE(this._bh, this._bl, 8)
  79325. writeInt64BE(this._ch, this._cl, 16)
  79326. writeInt64BE(this._dh, this._dl, 24)
  79327. writeInt64BE(this._eh, this._el, 32)
  79328. writeInt64BE(this._fh, this._fl, 40)
  79329. writeInt64BE(this._gh, this._gl, 48)
  79330. writeInt64BE(this._hh, this._hl, 56)
  79331. return H
  79332. }
  79333. module.exports = Sha512
  79334. /***/ }),
  79335. /***/ 42830:
  79336. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  79337. // Copyright Joyent, Inc. and other Node contributors.
  79338. //
  79339. // Permission is hereby granted, free of charge, to any person obtaining a
  79340. // copy of this software and associated documentation files (the
  79341. // "Software"), to deal in the Software without restriction, including
  79342. // without limitation the rights to use, copy, modify, merge, publish,
  79343. // distribute, sublicense, and/or sell copies of the Software, and to permit
  79344. // persons to whom the Software is furnished to do so, subject to the
  79345. // following conditions:
  79346. //
  79347. // The above copyright notice and this permission notice shall be included
  79348. // in all copies or substantial portions of the Software.
  79349. //
  79350. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  79351. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  79352. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  79353. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  79354. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  79355. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  79356. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  79357. module.exports = Stream;
  79358. var EE = (__webpack_require__(17187).EventEmitter);
  79359. var inherits = __webpack_require__(35717);
  79360. inherits(Stream, EE);
  79361. Stream.Readable = __webpack_require__(79481);
  79362. Stream.Writable = __webpack_require__(64229);
  79363. Stream.Duplex = __webpack_require__(56753);
  79364. Stream.Transform = __webpack_require__(74605);
  79365. Stream.PassThrough = __webpack_require__(82725);
  79366. Stream.finished = __webpack_require__(8610)
  79367. Stream.pipeline = __webpack_require__(59946)
  79368. // Backwards-compat with node 0.4.x
  79369. Stream.Stream = Stream;
  79370. // old-style streams. Note that the pipe method (the only relevant
  79371. // part of this class) is overridden in the Readable class.
  79372. function Stream() {
  79373. EE.call(this);
  79374. }
  79375. Stream.prototype.pipe = function(dest, options) {
  79376. var source = this;
  79377. function ondata(chunk) {
  79378. if (dest.writable) {
  79379. if (false === dest.write(chunk) && source.pause) {
  79380. source.pause();
  79381. }
  79382. }
  79383. }
  79384. source.on('data', ondata);
  79385. function ondrain() {
  79386. if (source.readable && source.resume) {
  79387. source.resume();
  79388. }
  79389. }
  79390. dest.on('drain', ondrain);
  79391. // If the 'end' option is not supplied, dest.end() will be called when
  79392. // source gets the 'end' or 'close' events. Only dest.end() once.
  79393. if (!dest._isStdio && (!options || options.end !== false)) {
  79394. source.on('end', onend);
  79395. source.on('close', onclose);
  79396. }
  79397. var didOnEnd = false;
  79398. function onend() {
  79399. if (didOnEnd) return;
  79400. didOnEnd = true;
  79401. dest.end();
  79402. }
  79403. function onclose() {
  79404. if (didOnEnd) return;
  79405. didOnEnd = true;
  79406. if (typeof dest.destroy === 'function') dest.destroy();
  79407. }
  79408. // don't leave dangling pipes when there are errors.
  79409. function onerror(er) {
  79410. cleanup();
  79411. if (EE.listenerCount(this, 'error') === 0) {
  79412. throw er; // Unhandled stream error in pipe.
  79413. }
  79414. }
  79415. source.on('error', onerror);
  79416. dest.on('error', onerror);
  79417. // remove all the event listeners that were added.
  79418. function cleanup() {
  79419. source.removeListener('data', ondata);
  79420. dest.removeListener('drain', ondrain);
  79421. source.removeListener('end', onend);
  79422. source.removeListener('close', onclose);
  79423. source.removeListener('error', onerror);
  79424. dest.removeListener('error', onerror);
  79425. source.removeListener('end', cleanup);
  79426. source.removeListener('close', cleanup);
  79427. dest.removeListener('close', cleanup);
  79428. }
  79429. source.on('end', cleanup);
  79430. source.on('close', cleanup);
  79431. dest.on('close', cleanup);
  79432. dest.emit('pipe', source);
  79433. // Allow for unix-like usage: A.pipe(B).pipe(C)
  79434. return dest;
  79435. };
  79436. /***/ }),
  79437. /***/ 8501:
  79438. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  79439. var ClientRequest = __webpack_require__(11989)
  79440. var response = __webpack_require__(55676)
  79441. var extend = __webpack_require__(47529)
  79442. var statusCodes = __webpack_require__(50584)
  79443. var url = __webpack_require__(8575)
  79444. var http = exports
  79445. http.request = function (opts, cb) {
  79446. if (typeof opts === 'string')
  79447. opts = url.parse(opts)
  79448. else
  79449. opts = extend(opts)
  79450. // Normally, the page is loaded from http or https, so not specifying a protocol
  79451. // will result in a (valid) protocol-relative url. However, this won't work if
  79452. // the protocol is something else, like 'file:'
  79453. var defaultProtocol = __webpack_require__.g.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''
  79454. var protocol = opts.protocol || defaultProtocol
  79455. var host = opts.hostname || opts.host
  79456. var port = opts.port
  79457. var path = opts.path || '/'
  79458. // Necessary for IPv6 addresses
  79459. if (host && host.indexOf(':') !== -1)
  79460. host = '[' + host + ']'
  79461. // This may be a relative url. The browser should always be able to interpret it correctly.
  79462. opts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path
  79463. opts.method = (opts.method || 'GET').toUpperCase()
  79464. opts.headers = opts.headers || {}
  79465. // Also valid opts.auth, opts.mode
  79466. var req = new ClientRequest(opts)
  79467. if (cb)
  79468. req.on('response', cb)
  79469. return req
  79470. }
  79471. http.get = function get (opts, cb) {
  79472. var req = http.request(opts, cb)
  79473. req.end()
  79474. return req
  79475. }
  79476. http.ClientRequest = ClientRequest
  79477. http.IncomingMessage = response.IncomingMessage
  79478. http.Agent = function () {}
  79479. http.Agent.defaultMaxSockets = 4
  79480. http.globalAgent = new http.Agent()
  79481. http.STATUS_CODES = statusCodes
  79482. http.METHODS = [
  79483. 'CHECKOUT',
  79484. 'CONNECT',
  79485. 'COPY',
  79486. 'DELETE',
  79487. 'GET',
  79488. 'HEAD',
  79489. 'LOCK',
  79490. 'M-SEARCH',
  79491. 'MERGE',
  79492. 'MKACTIVITY',
  79493. 'MKCOL',
  79494. 'MOVE',
  79495. 'NOTIFY',
  79496. 'OPTIONS',
  79497. 'PATCH',
  79498. 'POST',
  79499. 'PROPFIND',
  79500. 'PROPPATCH',
  79501. 'PURGE',
  79502. 'PUT',
  79503. 'REPORT',
  79504. 'SEARCH',
  79505. 'SUBSCRIBE',
  79506. 'TRACE',
  79507. 'UNLOCK',
  79508. 'UNSUBSCRIBE'
  79509. ]
  79510. /***/ }),
  79511. /***/ 8725:
  79512. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  79513. exports.fetch = isFunction(__webpack_require__.g.fetch) && isFunction(__webpack_require__.g.ReadableStream)
  79514. exports.writableStream = isFunction(__webpack_require__.g.WritableStream)
  79515. exports.abortController = isFunction(__webpack_require__.g.AbortController)
  79516. // The xhr request to example.com may violate some restrictive CSP configurations,
  79517. // so if we're running in a browser that supports `fetch`, avoid calling getXHR()
  79518. // and assume support for certain features below.
  79519. var xhr
  79520. function getXHR () {
  79521. // Cache the xhr value
  79522. if (xhr !== undefined) return xhr
  79523. if (__webpack_require__.g.XMLHttpRequest) {
  79524. xhr = new __webpack_require__.g.XMLHttpRequest()
  79525. // If XDomainRequest is available (ie only, where xhr might not work
  79526. // cross domain), use the page location. Otherwise use example.com
  79527. // Note: this doesn't actually make an http request.
  79528. try {
  79529. xhr.open('GET', __webpack_require__.g.XDomainRequest ? '/' : 'https://example.com')
  79530. } catch(e) {
  79531. xhr = null
  79532. }
  79533. } else {
  79534. // Service workers don't have XHR
  79535. xhr = null
  79536. }
  79537. return xhr
  79538. }
  79539. function checkTypeSupport (type) {
  79540. var xhr = getXHR()
  79541. if (!xhr) return false
  79542. try {
  79543. xhr.responseType = type
  79544. return xhr.responseType === type
  79545. } catch (e) {}
  79546. return false
  79547. }
  79548. // If fetch is supported, then arraybuffer will be supported too. Skip calling
  79549. // checkTypeSupport(), since that calls getXHR().
  79550. exports.arraybuffer = exports.fetch || checkTypeSupport('arraybuffer')
  79551. // These next two tests unavoidably show warnings in Chrome. Since fetch will always
  79552. // be used if it's available, just return false for these to avoid the warnings.
  79553. exports.msstream = !exports.fetch && checkTypeSupport('ms-stream')
  79554. exports.mozchunkedarraybuffer = !exports.fetch && checkTypeSupport('moz-chunked-arraybuffer')
  79555. // If fetch is supported, then overrideMimeType will be supported too. Skip calling
  79556. // getXHR().
  79557. exports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)
  79558. function isFunction (value) {
  79559. return typeof value === 'function'
  79560. }
  79561. xhr = null // Help gc
  79562. /***/ }),
  79563. /***/ 11989:
  79564. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  79565. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  79566. /* provided dependency */ var process = __webpack_require__(34155);
  79567. var capability = __webpack_require__(8725)
  79568. var inherits = __webpack_require__(35717)
  79569. var response = __webpack_require__(55676)
  79570. var stream = __webpack_require__(88473)
  79571. var IncomingMessage = response.IncomingMessage
  79572. var rStates = response.readyStates
  79573. function decideMode (preferBinary, useFetch) {
  79574. if (capability.fetch && useFetch) {
  79575. return 'fetch'
  79576. } else if (capability.mozchunkedarraybuffer) {
  79577. return 'moz-chunked-arraybuffer'
  79578. } else if (capability.msstream) {
  79579. return 'ms-stream'
  79580. } else if (capability.arraybuffer && preferBinary) {
  79581. return 'arraybuffer'
  79582. } else {
  79583. return 'text'
  79584. }
  79585. }
  79586. var ClientRequest = module.exports = function (opts) {
  79587. var self = this
  79588. stream.Writable.call(self)
  79589. self._opts = opts
  79590. self._body = []
  79591. self._headers = {}
  79592. if (opts.auth)
  79593. self.setHeader('Authorization', 'Basic ' + Buffer.from(opts.auth).toString('base64'))
  79594. Object.keys(opts.headers).forEach(function (name) {
  79595. self.setHeader(name, opts.headers[name])
  79596. })
  79597. var preferBinary
  79598. var useFetch = true
  79599. if (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {
  79600. // If the use of XHR should be preferred. Not typically needed.
  79601. useFetch = false
  79602. preferBinary = true
  79603. } else if (opts.mode === 'prefer-streaming') {
  79604. // If streaming is a high priority but binary compatibility and
  79605. // the accuracy of the 'content-type' header aren't
  79606. preferBinary = false
  79607. } else if (opts.mode === 'allow-wrong-content-type') {
  79608. // If streaming is more important than preserving the 'content-type' header
  79609. preferBinary = !capability.overrideMimeType
  79610. } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {
  79611. // Use binary if text streaming may corrupt data or the content-type header, or for speed
  79612. preferBinary = true
  79613. } else {
  79614. throw new Error('Invalid value for opts.mode')
  79615. }
  79616. self._mode = decideMode(preferBinary, useFetch)
  79617. self._fetchTimer = null
  79618. self._socketTimeout = null
  79619. self._socketTimer = null
  79620. self.on('finish', function () {
  79621. self._onFinish()
  79622. })
  79623. }
  79624. inherits(ClientRequest, stream.Writable)
  79625. ClientRequest.prototype.setHeader = function (name, value) {
  79626. var self = this
  79627. var lowerName = name.toLowerCase()
  79628. // This check is not necessary, but it prevents warnings from browsers about setting unsafe
  79629. // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but
  79630. // http-browserify did it, so I will too.
  79631. if (unsafeHeaders.indexOf(lowerName) !== -1)
  79632. return
  79633. self._headers[lowerName] = {
  79634. name: name,
  79635. value: value
  79636. }
  79637. }
  79638. ClientRequest.prototype.getHeader = function (name) {
  79639. var header = this._headers[name.toLowerCase()]
  79640. if (header)
  79641. return header.value
  79642. return null
  79643. }
  79644. ClientRequest.prototype.removeHeader = function (name) {
  79645. var self = this
  79646. delete self._headers[name.toLowerCase()]
  79647. }
  79648. ClientRequest.prototype._onFinish = function () {
  79649. var self = this
  79650. if (self._destroyed)
  79651. return
  79652. var opts = self._opts
  79653. if ('timeout' in opts && opts.timeout !== 0) {
  79654. self.setTimeout(opts.timeout)
  79655. }
  79656. var headersObj = self._headers
  79657. var body = null
  79658. if (opts.method !== 'GET' && opts.method !== 'HEAD') {
  79659. body = new Blob(self._body, {
  79660. type: (headersObj['content-type'] || {}).value || ''
  79661. });
  79662. }
  79663. // create flattened list of headers
  79664. var headersList = []
  79665. Object.keys(headersObj).forEach(function (keyName) {
  79666. var name = headersObj[keyName].name
  79667. var value = headersObj[keyName].value
  79668. if (Array.isArray(value)) {
  79669. value.forEach(function (v) {
  79670. headersList.push([name, v])
  79671. })
  79672. } else {
  79673. headersList.push([name, value])
  79674. }
  79675. })
  79676. if (self._mode === 'fetch') {
  79677. var signal = null
  79678. if (capability.abortController) {
  79679. var controller = new AbortController()
  79680. signal = controller.signal
  79681. self._fetchAbortController = controller
  79682. if ('requestTimeout' in opts && opts.requestTimeout !== 0) {
  79683. self._fetchTimer = __webpack_require__.g.setTimeout(function () {
  79684. self.emit('requestTimeout')
  79685. if (self._fetchAbortController)
  79686. self._fetchAbortController.abort()
  79687. }, opts.requestTimeout)
  79688. }
  79689. }
  79690. __webpack_require__.g.fetch(self._opts.url, {
  79691. method: self._opts.method,
  79692. headers: headersList,
  79693. body: body || undefined,
  79694. mode: 'cors',
  79695. credentials: opts.withCredentials ? 'include' : 'same-origin',
  79696. signal: signal
  79697. }).then(function (response) {
  79698. self._fetchResponse = response
  79699. self._resetTimers(false)
  79700. self._connect()
  79701. }, function (reason) {
  79702. self._resetTimers(true)
  79703. if (!self._destroyed)
  79704. self.emit('error', reason)
  79705. })
  79706. } else {
  79707. var xhr = self._xhr = new __webpack_require__.g.XMLHttpRequest()
  79708. try {
  79709. xhr.open(self._opts.method, self._opts.url, true)
  79710. } catch (err) {
  79711. process.nextTick(function () {
  79712. self.emit('error', err)
  79713. })
  79714. return
  79715. }
  79716. // Can't set responseType on really old browsers
  79717. if ('responseType' in xhr)
  79718. xhr.responseType = self._mode
  79719. if ('withCredentials' in xhr)
  79720. xhr.withCredentials = !!opts.withCredentials
  79721. if (self._mode === 'text' && 'overrideMimeType' in xhr)
  79722. xhr.overrideMimeType('text/plain; charset=x-user-defined')
  79723. if ('requestTimeout' in opts) {
  79724. xhr.timeout = opts.requestTimeout
  79725. xhr.ontimeout = function () {
  79726. self.emit('requestTimeout')
  79727. }
  79728. }
  79729. headersList.forEach(function (header) {
  79730. xhr.setRequestHeader(header[0], header[1])
  79731. })
  79732. self._response = null
  79733. xhr.onreadystatechange = function () {
  79734. switch (xhr.readyState) {
  79735. case rStates.LOADING:
  79736. case rStates.DONE:
  79737. self._onXHRProgress()
  79738. break
  79739. }
  79740. }
  79741. // Necessary for streaming in Firefox, since xhr.response is ONLY defined
  79742. // in onprogress, not in onreadystatechange with xhr.readyState = 3
  79743. if (self._mode === 'moz-chunked-arraybuffer') {
  79744. xhr.onprogress = function () {
  79745. self._onXHRProgress()
  79746. }
  79747. }
  79748. xhr.onerror = function () {
  79749. if (self._destroyed)
  79750. return
  79751. self._resetTimers(true)
  79752. self.emit('error', new Error('XHR error'))
  79753. }
  79754. try {
  79755. xhr.send(body)
  79756. } catch (err) {
  79757. process.nextTick(function () {
  79758. self.emit('error', err)
  79759. })
  79760. return
  79761. }
  79762. }
  79763. }
  79764. /**
  79765. * Checks if xhr.status is readable and non-zero, indicating no error.
  79766. * Even though the spec says it should be available in readyState 3,
  79767. * accessing it throws an exception in IE8
  79768. */
  79769. function statusValid (xhr) {
  79770. try {
  79771. var status = xhr.status
  79772. return (status !== null && status !== 0)
  79773. } catch (e) {
  79774. return false
  79775. }
  79776. }
  79777. ClientRequest.prototype._onXHRProgress = function () {
  79778. var self = this
  79779. self._resetTimers(false)
  79780. if (!statusValid(self._xhr) || self._destroyed)
  79781. return
  79782. if (!self._response)
  79783. self._connect()
  79784. self._response._onXHRProgress(self._resetTimers.bind(self))
  79785. }
  79786. ClientRequest.prototype._connect = function () {
  79787. var self = this
  79788. if (self._destroyed)
  79789. return
  79790. self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._resetTimers.bind(self))
  79791. self._response.on('error', function(err) {
  79792. self.emit('error', err)
  79793. })
  79794. self.emit('response', self._response)
  79795. }
  79796. ClientRequest.prototype._write = function (chunk, encoding, cb) {
  79797. var self = this
  79798. self._body.push(chunk)
  79799. cb()
  79800. }
  79801. ClientRequest.prototype._resetTimers = function (done) {
  79802. var self = this
  79803. __webpack_require__.g.clearTimeout(self._socketTimer)
  79804. self._socketTimer = null
  79805. if (done) {
  79806. __webpack_require__.g.clearTimeout(self._fetchTimer)
  79807. self._fetchTimer = null
  79808. } else if (self._socketTimeout) {
  79809. self._socketTimer = __webpack_require__.g.setTimeout(function () {
  79810. self.emit('timeout')
  79811. }, self._socketTimeout)
  79812. }
  79813. }
  79814. ClientRequest.prototype.abort = ClientRequest.prototype.destroy = function (err) {
  79815. var self = this
  79816. self._destroyed = true
  79817. self._resetTimers(true)
  79818. if (self._response)
  79819. self._response._destroyed = true
  79820. if (self._xhr)
  79821. self._xhr.abort()
  79822. else if (self._fetchAbortController)
  79823. self._fetchAbortController.abort()
  79824. if (err)
  79825. self.emit('error', err)
  79826. }
  79827. ClientRequest.prototype.end = function (data, encoding, cb) {
  79828. var self = this
  79829. if (typeof data === 'function') {
  79830. cb = data
  79831. data = undefined
  79832. }
  79833. stream.Writable.prototype.end.call(self, data, encoding, cb)
  79834. }
  79835. ClientRequest.prototype.setTimeout = function (timeout, cb) {
  79836. var self = this
  79837. if (cb)
  79838. self.once('timeout', cb)
  79839. self._socketTimeout = timeout
  79840. self._resetTimers(false)
  79841. }
  79842. ClientRequest.prototype.flushHeaders = function () {}
  79843. ClientRequest.prototype.setNoDelay = function () {}
  79844. ClientRequest.prototype.setSocketKeepAlive = function () {}
  79845. // Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method
  79846. var unsafeHeaders = [
  79847. 'accept-charset',
  79848. 'accept-encoding',
  79849. 'access-control-request-headers',
  79850. 'access-control-request-method',
  79851. 'connection',
  79852. 'content-length',
  79853. 'cookie',
  79854. 'cookie2',
  79855. 'date',
  79856. 'dnt',
  79857. 'expect',
  79858. 'host',
  79859. 'keep-alive',
  79860. 'origin',
  79861. 'referer',
  79862. 'te',
  79863. 'trailer',
  79864. 'transfer-encoding',
  79865. 'upgrade',
  79866. 'via'
  79867. ]
  79868. /***/ }),
  79869. /***/ 55676:
  79870. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  79871. /* provided dependency */ var process = __webpack_require__(34155);
  79872. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  79873. var capability = __webpack_require__(8725)
  79874. var inherits = __webpack_require__(35717)
  79875. var stream = __webpack_require__(88473)
  79876. var rStates = exports.readyStates = {
  79877. UNSENT: 0,
  79878. OPENED: 1,
  79879. HEADERS_RECEIVED: 2,
  79880. LOADING: 3,
  79881. DONE: 4
  79882. }
  79883. var IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, resetTimers) {
  79884. var self = this
  79885. stream.Readable.call(self)
  79886. self._mode = mode
  79887. self.headers = {}
  79888. self.rawHeaders = []
  79889. self.trailers = {}
  79890. self.rawTrailers = []
  79891. // Fake the 'close' event, but only once 'end' fires
  79892. self.on('end', function () {
  79893. // The nextTick is necessary to prevent the 'request' module from causing an infinite loop
  79894. process.nextTick(function () {
  79895. self.emit('close')
  79896. })
  79897. })
  79898. if (mode === 'fetch') {
  79899. self._fetchResponse = response
  79900. self.url = response.url
  79901. self.statusCode = response.status
  79902. self.statusMessage = response.statusText
  79903. response.headers.forEach(function (header, key){
  79904. self.headers[key.toLowerCase()] = header
  79905. self.rawHeaders.push(key, header)
  79906. })
  79907. if (capability.writableStream) {
  79908. var writable = new WritableStream({
  79909. write: function (chunk) {
  79910. resetTimers(false)
  79911. return new Promise(function (resolve, reject) {
  79912. if (self._destroyed) {
  79913. reject()
  79914. } else if(self.push(Buffer.from(chunk))) {
  79915. resolve()
  79916. } else {
  79917. self._resumeFetch = resolve
  79918. }
  79919. })
  79920. },
  79921. close: function () {
  79922. resetTimers(true)
  79923. if (!self._destroyed)
  79924. self.push(null)
  79925. },
  79926. abort: function (err) {
  79927. resetTimers(true)
  79928. if (!self._destroyed)
  79929. self.emit('error', err)
  79930. }
  79931. })
  79932. try {
  79933. response.body.pipeTo(writable).catch(function (err) {
  79934. resetTimers(true)
  79935. if (!self._destroyed)
  79936. self.emit('error', err)
  79937. })
  79938. return
  79939. } catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this
  79940. }
  79941. // fallback for when writableStream or pipeTo aren't available
  79942. var reader = response.body.getReader()
  79943. function read () {
  79944. reader.read().then(function (result) {
  79945. if (self._destroyed)
  79946. return
  79947. resetTimers(result.done)
  79948. if (result.done) {
  79949. self.push(null)
  79950. return
  79951. }
  79952. self.push(Buffer.from(result.value))
  79953. read()
  79954. }).catch(function (err) {
  79955. resetTimers(true)
  79956. if (!self._destroyed)
  79957. self.emit('error', err)
  79958. })
  79959. }
  79960. read()
  79961. } else {
  79962. self._xhr = xhr
  79963. self._pos = 0
  79964. self.url = xhr.responseURL
  79965. self.statusCode = xhr.status
  79966. self.statusMessage = xhr.statusText
  79967. var headers = xhr.getAllResponseHeaders().split(/\r?\n/)
  79968. headers.forEach(function (header) {
  79969. var matches = header.match(/^([^:]+):\s*(.*)/)
  79970. if (matches) {
  79971. var key = matches[1].toLowerCase()
  79972. if (key === 'set-cookie') {
  79973. if (self.headers[key] === undefined) {
  79974. self.headers[key] = []
  79975. }
  79976. self.headers[key].push(matches[2])
  79977. } else if (self.headers[key] !== undefined) {
  79978. self.headers[key] += ', ' + matches[2]
  79979. } else {
  79980. self.headers[key] = matches[2]
  79981. }
  79982. self.rawHeaders.push(matches[1], matches[2])
  79983. }
  79984. })
  79985. self._charset = 'x-user-defined'
  79986. if (!capability.overrideMimeType) {
  79987. var mimeType = self.rawHeaders['mime-type']
  79988. if (mimeType) {
  79989. var charsetMatch = mimeType.match(/;\s*charset=([^;])(;|$)/)
  79990. if (charsetMatch) {
  79991. self._charset = charsetMatch[1].toLowerCase()
  79992. }
  79993. }
  79994. if (!self._charset)
  79995. self._charset = 'utf-8' // best guess
  79996. }
  79997. }
  79998. }
  79999. inherits(IncomingMessage, stream.Readable)
  80000. IncomingMessage.prototype._read = function () {
  80001. var self = this
  80002. var resolve = self._resumeFetch
  80003. if (resolve) {
  80004. self._resumeFetch = null
  80005. resolve()
  80006. }
  80007. }
  80008. IncomingMessage.prototype._onXHRProgress = function (resetTimers) {
  80009. var self = this
  80010. var xhr = self._xhr
  80011. var response = null
  80012. switch (self._mode) {
  80013. case 'text':
  80014. response = xhr.responseText
  80015. if (response.length > self._pos) {
  80016. var newData = response.substr(self._pos)
  80017. if (self._charset === 'x-user-defined') {
  80018. var buffer = Buffer.alloc(newData.length)
  80019. for (var i = 0; i < newData.length; i++)
  80020. buffer[i] = newData.charCodeAt(i) & 0xff
  80021. self.push(buffer)
  80022. } else {
  80023. self.push(newData, self._charset)
  80024. }
  80025. self._pos = response.length
  80026. }
  80027. break
  80028. case 'arraybuffer':
  80029. if (xhr.readyState !== rStates.DONE || !xhr.response)
  80030. break
  80031. response = xhr.response
  80032. self.push(Buffer.from(new Uint8Array(response)))
  80033. break
  80034. case 'moz-chunked-arraybuffer': // take whole
  80035. response = xhr.response
  80036. if (xhr.readyState !== rStates.LOADING || !response)
  80037. break
  80038. self.push(Buffer.from(new Uint8Array(response)))
  80039. break
  80040. case 'ms-stream':
  80041. response = xhr.response
  80042. if (xhr.readyState !== rStates.LOADING)
  80043. break
  80044. var reader = new __webpack_require__.g.MSStreamReader()
  80045. reader.onprogress = function () {
  80046. if (reader.result.byteLength > self._pos) {
  80047. self.push(Buffer.from(new Uint8Array(reader.result.slice(self._pos))))
  80048. self._pos = reader.result.byteLength
  80049. }
  80050. }
  80051. reader.onload = function () {
  80052. resetTimers(true)
  80053. self.push(null)
  80054. }
  80055. // reader.onerror = ??? // TODO: this
  80056. reader.readAsArrayBuffer(response)
  80057. break
  80058. }
  80059. // The ms-stream case handles end separately in reader.onload()
  80060. if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {
  80061. resetTimers(true)
  80062. self.push(null)
  80063. }
  80064. }
  80065. /***/ }),
  80066. /***/ 32553:
  80067. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  80068. "use strict";
  80069. // Copyright Joyent, Inc. and other Node contributors.
  80070. //
  80071. // Permission is hereby granted, free of charge, to any person obtaining a
  80072. // copy of this software and associated documentation files (the
  80073. // "Software"), to deal in the Software without restriction, including
  80074. // without limitation the rights to use, copy, modify, merge, publish,
  80075. // distribute, sublicense, and/or sell copies of the Software, and to permit
  80076. // persons to whom the Software is furnished to do so, subject to the
  80077. // following conditions:
  80078. //
  80079. // The above copyright notice and this permission notice shall be included
  80080. // in all copies or substantial portions of the Software.
  80081. //
  80082. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  80083. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  80084. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  80085. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  80086. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  80087. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  80088. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  80089. /*<replacement>*/
  80090. var Buffer = (__webpack_require__(89509).Buffer);
  80091. /*</replacement>*/
  80092. var isEncoding = Buffer.isEncoding || function (encoding) {
  80093. encoding = '' + encoding;
  80094. switch (encoding && encoding.toLowerCase()) {
  80095. case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
  80096. return true;
  80097. default:
  80098. return false;
  80099. }
  80100. };
  80101. function _normalizeEncoding(enc) {
  80102. if (!enc) return 'utf8';
  80103. var retried;
  80104. while (true) {
  80105. switch (enc) {
  80106. case 'utf8':
  80107. case 'utf-8':
  80108. return 'utf8';
  80109. case 'ucs2':
  80110. case 'ucs-2':
  80111. case 'utf16le':
  80112. case 'utf-16le':
  80113. return 'utf16le';
  80114. case 'latin1':
  80115. case 'binary':
  80116. return 'latin1';
  80117. case 'base64':
  80118. case 'ascii':
  80119. case 'hex':
  80120. return enc;
  80121. default:
  80122. if (retried) return; // undefined
  80123. enc = ('' + enc).toLowerCase();
  80124. retried = true;
  80125. }
  80126. }
  80127. };
  80128. // Do not cache `Buffer.isEncoding` when checking encoding names as some
  80129. // modules monkey-patch it to support additional encodings
  80130. function normalizeEncoding(enc) {
  80131. var nenc = _normalizeEncoding(enc);
  80132. if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
  80133. return nenc || enc;
  80134. }
  80135. // StringDecoder provides an interface for efficiently splitting a series of
  80136. // buffers into a series of JS strings without breaking apart multi-byte
  80137. // characters.
  80138. exports.s = StringDecoder;
  80139. function StringDecoder(encoding) {
  80140. this.encoding = normalizeEncoding(encoding);
  80141. var nb;
  80142. switch (this.encoding) {
  80143. case 'utf16le':
  80144. this.text = utf16Text;
  80145. this.end = utf16End;
  80146. nb = 4;
  80147. break;
  80148. case 'utf8':
  80149. this.fillLast = utf8FillLast;
  80150. nb = 4;
  80151. break;
  80152. case 'base64':
  80153. this.text = base64Text;
  80154. this.end = base64End;
  80155. nb = 3;
  80156. break;
  80157. default:
  80158. this.write = simpleWrite;
  80159. this.end = simpleEnd;
  80160. return;
  80161. }
  80162. this.lastNeed = 0;
  80163. this.lastTotal = 0;
  80164. this.lastChar = Buffer.allocUnsafe(nb);
  80165. }
  80166. StringDecoder.prototype.write = function (buf) {
  80167. if (buf.length === 0) return '';
  80168. var r;
  80169. var i;
  80170. if (this.lastNeed) {
  80171. r = this.fillLast(buf);
  80172. if (r === undefined) return '';
  80173. i = this.lastNeed;
  80174. this.lastNeed = 0;
  80175. } else {
  80176. i = 0;
  80177. }
  80178. if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
  80179. return r || '';
  80180. };
  80181. StringDecoder.prototype.end = utf8End;
  80182. // Returns only complete characters in a Buffer
  80183. StringDecoder.prototype.text = utf8Text;
  80184. // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
  80185. StringDecoder.prototype.fillLast = function (buf) {
  80186. if (this.lastNeed <= buf.length) {
  80187. buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
  80188. return this.lastChar.toString(this.encoding, 0, this.lastTotal);
  80189. }
  80190. buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
  80191. this.lastNeed -= buf.length;
  80192. };
  80193. // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
  80194. // continuation byte. If an invalid byte is detected, -2 is returned.
  80195. function utf8CheckByte(byte) {
  80196. if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
  80197. return byte >> 6 === 0x02 ? -1 : -2;
  80198. }
  80199. // Checks at most 3 bytes at the end of a Buffer in order to detect an
  80200. // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
  80201. // needed to complete the UTF-8 character (if applicable) are returned.
  80202. function utf8CheckIncomplete(self, buf, i) {
  80203. var j = buf.length - 1;
  80204. if (j < i) return 0;
  80205. var nb = utf8CheckByte(buf[j]);
  80206. if (nb >= 0) {
  80207. if (nb > 0) self.lastNeed = nb - 1;
  80208. return nb;
  80209. }
  80210. if (--j < i || nb === -2) return 0;
  80211. nb = utf8CheckByte(buf[j]);
  80212. if (nb >= 0) {
  80213. if (nb > 0) self.lastNeed = nb - 2;
  80214. return nb;
  80215. }
  80216. if (--j < i || nb === -2) return 0;
  80217. nb = utf8CheckByte(buf[j]);
  80218. if (nb >= 0) {
  80219. if (nb > 0) {
  80220. if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
  80221. }
  80222. return nb;
  80223. }
  80224. return 0;
  80225. }
  80226. // Validates as many continuation bytes for a multi-byte UTF-8 character as
  80227. // needed or are available. If we see a non-continuation byte where we expect
  80228. // one, we "replace" the validated continuation bytes we've seen so far with
  80229. // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
  80230. // behavior. The continuation byte check is included three times in the case
  80231. // where all of the continuation bytes for a character exist in the same buffer.
  80232. // It is also done this way as a slight performance increase instead of using a
  80233. // loop.
  80234. function utf8CheckExtraBytes(self, buf, p) {
  80235. if ((buf[0] & 0xC0) !== 0x80) {
  80236. self.lastNeed = 0;
  80237. return '\ufffd';
  80238. }
  80239. if (self.lastNeed > 1 && buf.length > 1) {
  80240. if ((buf[1] & 0xC0) !== 0x80) {
  80241. self.lastNeed = 1;
  80242. return '\ufffd';
  80243. }
  80244. if (self.lastNeed > 2 && buf.length > 2) {
  80245. if ((buf[2] & 0xC0) !== 0x80) {
  80246. self.lastNeed = 2;
  80247. return '\ufffd';
  80248. }
  80249. }
  80250. }
  80251. }
  80252. // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
  80253. function utf8FillLast(buf) {
  80254. var p = this.lastTotal - this.lastNeed;
  80255. var r = utf8CheckExtraBytes(this, buf, p);
  80256. if (r !== undefined) return r;
  80257. if (this.lastNeed <= buf.length) {
  80258. buf.copy(this.lastChar, p, 0, this.lastNeed);
  80259. return this.lastChar.toString(this.encoding, 0, this.lastTotal);
  80260. }
  80261. buf.copy(this.lastChar, p, 0, buf.length);
  80262. this.lastNeed -= buf.length;
  80263. }
  80264. // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
  80265. // partial character, the character's bytes are buffered until the required
  80266. // number of bytes are available.
  80267. function utf8Text(buf, i) {
  80268. var total = utf8CheckIncomplete(this, buf, i);
  80269. if (!this.lastNeed) return buf.toString('utf8', i);
  80270. this.lastTotal = total;
  80271. var end = buf.length - (total - this.lastNeed);
  80272. buf.copy(this.lastChar, 0, end);
  80273. return buf.toString('utf8', i, end);
  80274. }
  80275. // For UTF-8, a replacement character is added when ending on a partial
  80276. // character.
  80277. function utf8End(buf) {
  80278. var r = buf && buf.length ? this.write(buf) : '';
  80279. if (this.lastNeed) return r + '\ufffd';
  80280. return r;
  80281. }
  80282. // UTF-16LE typically needs two bytes per character, but even if we have an even
  80283. // number of bytes available, we need to check if we end on a leading/high
  80284. // surrogate. In that case, we need to wait for the next two bytes in order to
  80285. // decode the last character properly.
  80286. function utf16Text(buf, i) {
  80287. if ((buf.length - i) % 2 === 0) {
  80288. var r = buf.toString('utf16le', i);
  80289. if (r) {
  80290. var c = r.charCodeAt(r.length - 1);
  80291. if (c >= 0xD800 && c <= 0xDBFF) {
  80292. this.lastNeed = 2;
  80293. this.lastTotal = 4;
  80294. this.lastChar[0] = buf[buf.length - 2];
  80295. this.lastChar[1] = buf[buf.length - 1];
  80296. return r.slice(0, -1);
  80297. }
  80298. }
  80299. return r;
  80300. }
  80301. this.lastNeed = 1;
  80302. this.lastTotal = 2;
  80303. this.lastChar[0] = buf[buf.length - 1];
  80304. return buf.toString('utf16le', i, buf.length - 1);
  80305. }
  80306. // For UTF-16LE we do not explicitly append special replacement characters if we
  80307. // end on a partial character, we simply let v8 handle that.
  80308. function utf16End(buf) {
  80309. var r = buf && buf.length ? this.write(buf) : '';
  80310. if (this.lastNeed) {
  80311. var end = this.lastTotal - this.lastNeed;
  80312. return r + this.lastChar.toString('utf16le', 0, end);
  80313. }
  80314. return r;
  80315. }
  80316. function base64Text(buf, i) {
  80317. var n = (buf.length - i) % 3;
  80318. if (n === 0) return buf.toString('base64', i);
  80319. this.lastNeed = 3 - n;
  80320. this.lastTotal = 3;
  80321. if (n === 1) {
  80322. this.lastChar[0] = buf[buf.length - 1];
  80323. } else {
  80324. this.lastChar[0] = buf[buf.length - 2];
  80325. this.lastChar[1] = buf[buf.length - 1];
  80326. }
  80327. return buf.toString('base64', i, buf.length - n);
  80328. }
  80329. function base64End(buf) {
  80330. var r = buf && buf.length ? this.write(buf) : '';
  80331. if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
  80332. return r;
  80333. }
  80334. // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
  80335. function simpleWrite(buf) {
  80336. return buf.toString(this.encoding);
  80337. }
  80338. function simpleEnd(buf) {
  80339. return buf && buf.length ? this.write(buf) : '';
  80340. }
  80341. /***/ }),
  80342. /***/ 95892:
  80343. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  80344. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  80345. const BN = __webpack_require__(94220)
  80346. const EC = (__webpack_require__(86266).ec)
  80347. const secp256k1 = new EC('secp256k1')
  80348. const deterministicGenerateK = __webpack_require__(44142)
  80349. const ZERO32 = Buffer.alloc(32, 0)
  80350. const EC_GROUP_ORDER = Buffer.from('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 'hex')
  80351. const EC_P = Buffer.from('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', 'hex')
  80352. const n = secp256k1.curve.n
  80353. const nDiv2 = n.shrn(1)
  80354. const G = secp256k1.curve.g
  80355. const THROW_BAD_PRIVATE = 'Expected Private'
  80356. const THROW_BAD_POINT = 'Expected Point'
  80357. const THROW_BAD_TWEAK = 'Expected Tweak'
  80358. const THROW_BAD_HASH = 'Expected Hash'
  80359. const THROW_BAD_SIGNATURE = 'Expected Signature'
  80360. const THROW_BAD_EXTRA_DATA = 'Expected Extra Data (32 bytes)'
  80361. function isScalar (x) {
  80362. return Buffer.isBuffer(x) && x.length === 32
  80363. }
  80364. function isOrderScalar (x) {
  80365. if (!isScalar(x)) return false
  80366. return x.compare(EC_GROUP_ORDER) < 0 // < G
  80367. }
  80368. function isPoint (p) {
  80369. if (!Buffer.isBuffer(p)) return false
  80370. if (p.length < 33) return false
  80371. const t = p[0]
  80372. const x = p.slice(1, 33)
  80373. if (x.compare(ZERO32) === 0) return false
  80374. if (x.compare(EC_P) >= 0) return false
  80375. if ((t === 0x02 || t === 0x03) && p.length === 33) {
  80376. try { decodeFrom(p) } catch (e) { return false } // TODO: temporary
  80377. return true
  80378. }
  80379. const y = p.slice(33)
  80380. if (y.compare(ZERO32) === 0) return false
  80381. if (y.compare(EC_P) >= 0) return false
  80382. if (t === 0x04 && p.length === 65) return true
  80383. return false
  80384. }
  80385. function __isPointCompressed (p) {
  80386. return p[0] !== 0x04
  80387. }
  80388. function isPointCompressed (p) {
  80389. if (!isPoint(p)) return false
  80390. return __isPointCompressed(p)
  80391. }
  80392. function isPrivate (x) {
  80393. if (!isScalar(x)) return false
  80394. return x.compare(ZERO32) > 0 && // > 0
  80395. x.compare(EC_GROUP_ORDER) < 0 // < G
  80396. }
  80397. function isSignature (value) {
  80398. const r = value.slice(0, 32)
  80399. const s = value.slice(32, 64)
  80400. return Buffer.isBuffer(value) && value.length === 64 &&
  80401. r.compare(EC_GROUP_ORDER) < 0 &&
  80402. s.compare(EC_GROUP_ORDER) < 0
  80403. }
  80404. function assumeCompression (value, pubkey) {
  80405. if (value === undefined && pubkey !== undefined) return __isPointCompressed(pubkey)
  80406. if (value === undefined) return true
  80407. return value
  80408. }
  80409. function fromBuffer (d) { return new BN(d) }
  80410. function toBuffer (d) { return d.toArrayLike(Buffer, 'be', 32) }
  80411. function decodeFrom (P) { return secp256k1.curve.decodePoint(P) }
  80412. function getEncoded (P, compressed) { return Buffer.from(P._encode(compressed)) }
  80413. function pointAdd (pA, pB, __compressed) {
  80414. if (!isPoint(pA)) throw new TypeError(THROW_BAD_POINT)
  80415. if (!isPoint(pB)) throw new TypeError(THROW_BAD_POINT)
  80416. const a = decodeFrom(pA)
  80417. const b = decodeFrom(pB)
  80418. const pp = a.add(b)
  80419. if (pp.isInfinity()) return null
  80420. const compressed = assumeCompression(__compressed, pA)
  80421. return getEncoded(pp, compressed)
  80422. }
  80423. function pointAddScalar (p, tweak, __compressed) {
  80424. if (!isPoint(p)) throw new TypeError(THROW_BAD_POINT)
  80425. if (!isOrderScalar(tweak)) throw new TypeError(THROW_BAD_TWEAK)
  80426. const compressed = assumeCompression(__compressed, p)
  80427. const pp = decodeFrom(p)
  80428. if (tweak.compare(ZERO32) === 0) return getEncoded(pp, compressed)
  80429. const tt = fromBuffer(tweak)
  80430. const qq = G.mul(tt)
  80431. const uu = pp.add(qq)
  80432. if (uu.isInfinity()) return null
  80433. return getEncoded(uu, compressed)
  80434. }
  80435. function pointCompress (p, __compressed) {
  80436. if (!isPoint(p)) throw new TypeError(THROW_BAD_POINT)
  80437. const pp = decodeFrom(p)
  80438. if (pp.isInfinity()) throw new TypeError(THROW_BAD_POINT)
  80439. const compressed = assumeCompression(__compressed, p)
  80440. return getEncoded(pp, compressed)
  80441. }
  80442. function pointFromScalar (d, __compressed) {
  80443. if (!isPrivate(d)) throw new TypeError(THROW_BAD_PRIVATE)
  80444. const dd = fromBuffer(d)
  80445. const pp = G.mul(dd)
  80446. if (pp.isInfinity()) return null
  80447. const compressed = assumeCompression(__compressed)
  80448. return getEncoded(pp, compressed)
  80449. }
  80450. function pointMultiply (p, tweak, __compressed) {
  80451. if (!isPoint(p)) throw new TypeError(THROW_BAD_POINT)
  80452. if (!isOrderScalar(tweak)) throw new TypeError(THROW_BAD_TWEAK)
  80453. const compressed = assumeCompression(__compressed, p)
  80454. const pp = decodeFrom(p)
  80455. const tt = fromBuffer(tweak)
  80456. const qq = pp.mul(tt)
  80457. if (qq.isInfinity()) return null
  80458. return getEncoded(qq, compressed)
  80459. }
  80460. function privateAdd (d, tweak) {
  80461. if (!isPrivate(d)) throw new TypeError(THROW_BAD_PRIVATE)
  80462. if (!isOrderScalar(tweak)) throw new TypeError(THROW_BAD_TWEAK)
  80463. const dd = fromBuffer(d)
  80464. const tt = fromBuffer(tweak)
  80465. const dt = toBuffer(dd.add(tt).umod(n))
  80466. if (!isPrivate(dt)) return null
  80467. return dt
  80468. }
  80469. function privateSub (d, tweak) {
  80470. if (!isPrivate(d)) throw new TypeError(THROW_BAD_PRIVATE)
  80471. if (!isOrderScalar(tweak)) throw new TypeError(THROW_BAD_TWEAK)
  80472. const dd = fromBuffer(d)
  80473. const tt = fromBuffer(tweak)
  80474. const dt = toBuffer(dd.sub(tt).umod(n))
  80475. if (!isPrivate(dt)) return null
  80476. return dt
  80477. }
  80478. function sign (hash, x) {
  80479. return __sign(hash, x)
  80480. }
  80481. function signWithEntropy (hash, x, addData) {
  80482. return __sign(hash, x, addData)
  80483. }
  80484. function __sign (hash, x, addData) {
  80485. if (!isScalar(hash)) throw new TypeError(THROW_BAD_HASH)
  80486. if (!isPrivate(x)) throw new TypeError(THROW_BAD_PRIVATE)
  80487. if (addData !== undefined && !isScalar(addData)) throw new TypeError(THROW_BAD_EXTRA_DATA)
  80488. const d = fromBuffer(x)
  80489. const e = fromBuffer(hash)
  80490. let r, s
  80491. const checkSig = function (k) {
  80492. const kI = fromBuffer(k)
  80493. const Q = G.mul(kI)
  80494. if (Q.isInfinity()) return false
  80495. r = Q.x.umod(n)
  80496. if (r.isZero() === 0) return false
  80497. s = kI
  80498. .invm(n)
  80499. .mul(e.add(d.mul(r)))
  80500. .umod(n)
  80501. if (s.isZero() === 0) return false
  80502. return true
  80503. }
  80504. deterministicGenerateK(hash, x, checkSig, isPrivate, addData)
  80505. // enforce low S values, see bip62: 'low s values in signatures'
  80506. if (s.cmp(nDiv2) > 0) {
  80507. s = n.sub(s)
  80508. }
  80509. const buffer = Buffer.allocUnsafe(64)
  80510. toBuffer(r).copy(buffer, 0)
  80511. toBuffer(s).copy(buffer, 32)
  80512. return buffer
  80513. }
  80514. function verify (hash, q, signature, strict) {
  80515. if (!isScalar(hash)) throw new TypeError(THROW_BAD_HASH)
  80516. if (!isPoint(q)) throw new TypeError(THROW_BAD_POINT)
  80517. // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1] (1, isSignature enforces '< n - 1')
  80518. if (!isSignature(signature)) throw new TypeError(THROW_BAD_SIGNATURE)
  80519. const Q = decodeFrom(q)
  80520. const r = fromBuffer(signature.slice(0, 32))
  80521. const s = fromBuffer(signature.slice(32, 64))
  80522. if (strict && s.cmp(nDiv2) > 0) {
  80523. return false
  80524. }
  80525. // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1] (2, enforces '> 0')
  80526. if (r.gtn(0) <= 0 /* || r.compareTo(n) >= 0 */) return false
  80527. if (s.gtn(0) <= 0 /* || s.compareTo(n) >= 0 */) return false
  80528. // 1.4.2 H = Hash(M), already done by the user
  80529. // 1.4.3 e = H
  80530. const e = fromBuffer(hash)
  80531. // Compute s^-1
  80532. const sInv = s.invm(n)
  80533. // 1.4.4 Compute u1 = es^−1 mod n
  80534. // u2 = rs^−1 mod n
  80535. const u1 = e.mul(sInv).umod(n)
  80536. const u2 = r.mul(sInv).umod(n)
  80537. // 1.4.5 Compute R = (xR, yR)
  80538. // R = u1G + u2Q
  80539. const R = G.mulAdd(u1, Q, u2)
  80540. // 1.4.5 (cont.) Enforce R is not at infinity
  80541. if (R.isInfinity()) return false
  80542. // 1.4.6 Convert the field element R.x to an integer
  80543. const xR = R.x
  80544. // 1.4.7 Set v = xR mod n
  80545. const v = xR.umod(n)
  80546. // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
  80547. return v.eq(r)
  80548. }
  80549. module.exports = {
  80550. isPoint,
  80551. isPointCompressed,
  80552. isPrivate,
  80553. pointAdd,
  80554. pointAddScalar,
  80555. pointCompress,
  80556. pointFromScalar,
  80557. pointMultiply,
  80558. privateAdd,
  80559. privateSub,
  80560. sign,
  80561. signWithEntropy,
  80562. verify
  80563. }
  80564. /***/ }),
  80565. /***/ 94220:
  80566. /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
  80567. /* module decorator */ module = __webpack_require__.nmd(module);
  80568. (function (module, exports) {
  80569. 'use strict';
  80570. // Utils
  80571. function assert (val, msg) {
  80572. if (!val) throw new Error(msg || 'Assertion failed');
  80573. }
  80574. // Could use `inherits` module, but don't want to move from single file
  80575. // architecture yet.
  80576. function inherits (ctor, superCtor) {
  80577. ctor.super_ = superCtor;
  80578. var TempCtor = function () {};
  80579. TempCtor.prototype = superCtor.prototype;
  80580. ctor.prototype = new TempCtor();
  80581. ctor.prototype.constructor = ctor;
  80582. }
  80583. // BN
  80584. function BN (number, base, endian) {
  80585. if (BN.isBN(number)) {
  80586. return number;
  80587. }
  80588. this.negative = 0;
  80589. this.words = null;
  80590. this.length = 0;
  80591. // Reduction context
  80592. this.red = null;
  80593. if (number !== null) {
  80594. if (base === 'le' || base === 'be') {
  80595. endian = base;
  80596. base = 10;
  80597. }
  80598. this._init(number || 0, base || 10, endian || 'be');
  80599. }
  80600. }
  80601. if (typeof module === 'object') {
  80602. module.exports = BN;
  80603. } else {
  80604. exports.BN = BN;
  80605. }
  80606. BN.BN = BN;
  80607. BN.wordSize = 26;
  80608. var Buffer;
  80609. try {
  80610. if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {
  80611. Buffer = window.Buffer;
  80612. } else {
  80613. Buffer = (__webpack_require__(33370).Buffer);
  80614. }
  80615. } catch (e) {
  80616. }
  80617. BN.isBN = function isBN (num) {
  80618. if (num instanceof BN) {
  80619. return true;
  80620. }
  80621. return num !== null && typeof num === 'object' &&
  80622. num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
  80623. };
  80624. BN.max = function max (left, right) {
  80625. if (left.cmp(right) > 0) return left;
  80626. return right;
  80627. };
  80628. BN.min = function min (left, right) {
  80629. if (left.cmp(right) < 0) return left;
  80630. return right;
  80631. };
  80632. BN.prototype._init = function init (number, base, endian) {
  80633. if (typeof number === 'number') {
  80634. return this._initNumber(number, base, endian);
  80635. }
  80636. if (typeof number === 'object') {
  80637. return this._initArray(number, base, endian);
  80638. }
  80639. if (base === 'hex') {
  80640. base = 16;
  80641. }
  80642. assert(base === (base | 0) && base >= 2 && base <= 36);
  80643. number = number.toString().replace(/\s+/g, '');
  80644. var start = 0;
  80645. if (number[0] === '-') {
  80646. start++;
  80647. this.negative = 1;
  80648. }
  80649. if (start < number.length) {
  80650. if (base === 16) {
  80651. this._parseHex(number, start, endian);
  80652. } else {
  80653. this._parseBase(number, base, start);
  80654. if (endian === 'le') {
  80655. this._initArray(this.toArray(), base, endian);
  80656. }
  80657. }
  80658. }
  80659. };
  80660. BN.prototype._initNumber = function _initNumber (number, base, endian) {
  80661. if (number < 0) {
  80662. this.negative = 1;
  80663. number = -number;
  80664. }
  80665. if (number < 0x4000000) {
  80666. this.words = [ number & 0x3ffffff ];
  80667. this.length = 1;
  80668. } else if (number < 0x10000000000000) {
  80669. this.words = [
  80670. number & 0x3ffffff,
  80671. (number / 0x4000000) & 0x3ffffff
  80672. ];
  80673. this.length = 2;
  80674. } else {
  80675. assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
  80676. this.words = [
  80677. number & 0x3ffffff,
  80678. (number / 0x4000000) & 0x3ffffff,
  80679. 1
  80680. ];
  80681. this.length = 3;
  80682. }
  80683. if (endian !== 'le') return;
  80684. // Reverse the bytes
  80685. this._initArray(this.toArray(), base, endian);
  80686. };
  80687. BN.prototype._initArray = function _initArray (number, base, endian) {
  80688. // Perhaps a Uint8Array
  80689. assert(typeof number.length === 'number');
  80690. if (number.length <= 0) {
  80691. this.words = [ 0 ];
  80692. this.length = 1;
  80693. return this;
  80694. }
  80695. this.length = Math.ceil(number.length / 3);
  80696. this.words = new Array(this.length);
  80697. for (var i = 0; i < this.length; i++) {
  80698. this.words[i] = 0;
  80699. }
  80700. var j, w;
  80701. var off = 0;
  80702. if (endian === 'be') {
  80703. for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
  80704. w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
  80705. this.words[j] |= (w << off) & 0x3ffffff;
  80706. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  80707. off += 24;
  80708. if (off >= 26) {
  80709. off -= 26;
  80710. j++;
  80711. }
  80712. }
  80713. } else if (endian === 'le') {
  80714. for (i = 0, j = 0; i < number.length; i += 3) {
  80715. w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
  80716. this.words[j] |= (w << off) & 0x3ffffff;
  80717. this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
  80718. off += 24;
  80719. if (off >= 26) {
  80720. off -= 26;
  80721. j++;
  80722. }
  80723. }
  80724. }
  80725. return this.strip();
  80726. };
  80727. function parseHex4Bits (string, index) {
  80728. var c = string.charCodeAt(index);
  80729. // 'A' - 'F'
  80730. if (c >= 65 && c <= 70) {
  80731. return c - 55;
  80732. // 'a' - 'f'
  80733. } else if (c >= 97 && c <= 102) {
  80734. return c - 87;
  80735. // '0' - '9'
  80736. } else {
  80737. return (c - 48) & 0xf;
  80738. }
  80739. }
  80740. function parseHexByte (string, lowerBound, index) {
  80741. var r = parseHex4Bits(string, index);
  80742. if (index - 1 >= lowerBound) {
  80743. r |= parseHex4Bits(string, index - 1) << 4;
  80744. }
  80745. return r;
  80746. }
  80747. BN.prototype._parseHex = function _parseHex (number, start, endian) {
  80748. // Create possibly bigger array to ensure that it fits the number
  80749. this.length = Math.ceil((number.length - start) / 6);
  80750. this.words = new Array(this.length);
  80751. for (var i = 0; i < this.length; i++) {
  80752. this.words[i] = 0;
  80753. }
  80754. // 24-bits chunks
  80755. var off = 0;
  80756. var j = 0;
  80757. var w;
  80758. if (endian === 'be') {
  80759. for (i = number.length - 1; i >= start; i -= 2) {
  80760. w = parseHexByte(number, start, i) << off;
  80761. this.words[j] |= w & 0x3ffffff;
  80762. if (off >= 18) {
  80763. off -= 18;
  80764. j += 1;
  80765. this.words[j] |= w >>> 26;
  80766. } else {
  80767. off += 8;
  80768. }
  80769. }
  80770. } else {
  80771. var parseLength = number.length - start;
  80772. for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {
  80773. w = parseHexByte(number, start, i) << off;
  80774. this.words[j] |= w & 0x3ffffff;
  80775. if (off >= 18) {
  80776. off -= 18;
  80777. j += 1;
  80778. this.words[j] |= w >>> 26;
  80779. } else {
  80780. off += 8;
  80781. }
  80782. }
  80783. }
  80784. this.strip();
  80785. };
  80786. function parseBase (str, start, end, mul) {
  80787. var r = 0;
  80788. var len = Math.min(str.length, end);
  80789. for (var i = start; i < len; i++) {
  80790. var c = str.charCodeAt(i) - 48;
  80791. r *= mul;
  80792. // 'a'
  80793. if (c >= 49) {
  80794. r += c - 49 + 0xa;
  80795. // 'A'
  80796. } else if (c >= 17) {
  80797. r += c - 17 + 0xa;
  80798. // '0' - '9'
  80799. } else {
  80800. r += c;
  80801. }
  80802. }
  80803. return r;
  80804. }
  80805. BN.prototype._parseBase = function _parseBase (number, base, start) {
  80806. // Initialize as zero
  80807. this.words = [ 0 ];
  80808. this.length = 1;
  80809. // Find length of limb in base
  80810. for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
  80811. limbLen++;
  80812. }
  80813. limbLen--;
  80814. limbPow = (limbPow / base) | 0;
  80815. var total = number.length - start;
  80816. var mod = total % limbLen;
  80817. var end = Math.min(total, total - mod) + start;
  80818. var word = 0;
  80819. for (var i = start; i < end; i += limbLen) {
  80820. word = parseBase(number, i, i + limbLen, base);
  80821. this.imuln(limbPow);
  80822. if (this.words[0] + word < 0x4000000) {
  80823. this.words[0] += word;
  80824. } else {
  80825. this._iaddn(word);
  80826. }
  80827. }
  80828. if (mod !== 0) {
  80829. var pow = 1;
  80830. word = parseBase(number, i, number.length, base);
  80831. for (i = 0; i < mod; i++) {
  80832. pow *= base;
  80833. }
  80834. this.imuln(pow);
  80835. if (this.words[0] + word < 0x4000000) {
  80836. this.words[0] += word;
  80837. } else {
  80838. this._iaddn(word);
  80839. }
  80840. }
  80841. this.strip();
  80842. };
  80843. BN.prototype.copy = function copy (dest) {
  80844. dest.words = new Array(this.length);
  80845. for (var i = 0; i < this.length; i++) {
  80846. dest.words[i] = this.words[i];
  80847. }
  80848. dest.length = this.length;
  80849. dest.negative = this.negative;
  80850. dest.red = this.red;
  80851. };
  80852. BN.prototype.clone = function clone () {
  80853. var r = new BN(null);
  80854. this.copy(r);
  80855. return r;
  80856. };
  80857. BN.prototype._expand = function _expand (size) {
  80858. while (this.length < size) {
  80859. this.words[this.length++] = 0;
  80860. }
  80861. return this;
  80862. };
  80863. // Remove leading `0` from `this`
  80864. BN.prototype.strip = function strip () {
  80865. while (this.length > 1 && this.words[this.length - 1] === 0) {
  80866. this.length--;
  80867. }
  80868. return this._normSign();
  80869. };
  80870. BN.prototype._normSign = function _normSign () {
  80871. // -0 = 0
  80872. if (this.length === 1 && this.words[0] === 0) {
  80873. this.negative = 0;
  80874. }
  80875. return this;
  80876. };
  80877. BN.prototype.inspect = function inspect () {
  80878. return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
  80879. };
  80880. /*
  80881. var zeros = [];
  80882. var groupSizes = [];
  80883. var groupBases = [];
  80884. var s = '';
  80885. var i = -1;
  80886. while (++i < BN.wordSize) {
  80887. zeros[i] = s;
  80888. s += '0';
  80889. }
  80890. groupSizes[0] = 0;
  80891. groupSizes[1] = 0;
  80892. groupBases[0] = 0;
  80893. groupBases[1] = 0;
  80894. var base = 2 - 1;
  80895. while (++base < 36 + 1) {
  80896. var groupSize = 0;
  80897. var groupBase = 1;
  80898. while (groupBase < (1 << BN.wordSize) / base) {
  80899. groupBase *= base;
  80900. groupSize += 1;
  80901. }
  80902. groupSizes[base] = groupSize;
  80903. groupBases[base] = groupBase;
  80904. }
  80905. */
  80906. var zeros = [
  80907. '',
  80908. '0',
  80909. '00',
  80910. '000',
  80911. '0000',
  80912. '00000',
  80913. '000000',
  80914. '0000000',
  80915. '00000000',
  80916. '000000000',
  80917. '0000000000',
  80918. '00000000000',
  80919. '000000000000',
  80920. '0000000000000',
  80921. '00000000000000',
  80922. '000000000000000',
  80923. '0000000000000000',
  80924. '00000000000000000',
  80925. '000000000000000000',
  80926. '0000000000000000000',
  80927. '00000000000000000000',
  80928. '000000000000000000000',
  80929. '0000000000000000000000',
  80930. '00000000000000000000000',
  80931. '000000000000000000000000',
  80932. '0000000000000000000000000'
  80933. ];
  80934. var groupSizes = [
  80935. 0, 0,
  80936. 25, 16, 12, 11, 10, 9, 8,
  80937. 8, 7, 7, 7, 7, 6, 6,
  80938. 6, 6, 6, 6, 6, 5, 5,
  80939. 5, 5, 5, 5, 5, 5, 5,
  80940. 5, 5, 5, 5, 5, 5, 5
  80941. ];
  80942. var groupBases = [
  80943. 0, 0,
  80944. 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
  80945. 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
  80946. 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
  80947. 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
  80948. 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
  80949. ];
  80950. BN.prototype.toString = function toString (base, padding) {
  80951. base = base || 10;
  80952. padding = padding | 0 || 1;
  80953. var out;
  80954. if (base === 16 || base === 'hex') {
  80955. out = '';
  80956. var off = 0;
  80957. var carry = 0;
  80958. for (var i = 0; i < this.length; i++) {
  80959. var w = this.words[i];
  80960. var word = (((w << off) | carry) & 0xffffff).toString(16);
  80961. carry = (w >>> (24 - off)) & 0xffffff;
  80962. if (carry !== 0 || i !== this.length - 1) {
  80963. out = zeros[6 - word.length] + word + out;
  80964. } else {
  80965. out = word + out;
  80966. }
  80967. off += 2;
  80968. if (off >= 26) {
  80969. off -= 26;
  80970. i--;
  80971. }
  80972. }
  80973. if (carry !== 0) {
  80974. out = carry.toString(16) + out;
  80975. }
  80976. while (out.length % padding !== 0) {
  80977. out = '0' + out;
  80978. }
  80979. if (this.negative !== 0) {
  80980. out = '-' + out;
  80981. }
  80982. return out;
  80983. }
  80984. if (base === (base | 0) && base >= 2 && base <= 36) {
  80985. // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
  80986. var groupSize = groupSizes[base];
  80987. // var groupBase = Math.pow(base, groupSize);
  80988. var groupBase = groupBases[base];
  80989. out = '';
  80990. var c = this.clone();
  80991. c.negative = 0;
  80992. while (!c.isZero()) {
  80993. var r = c.modn(groupBase).toString(base);
  80994. c = c.idivn(groupBase);
  80995. if (!c.isZero()) {
  80996. out = zeros[groupSize - r.length] + r + out;
  80997. } else {
  80998. out = r + out;
  80999. }
  81000. }
  81001. if (this.isZero()) {
  81002. out = '0' + out;
  81003. }
  81004. while (out.length % padding !== 0) {
  81005. out = '0' + out;
  81006. }
  81007. if (this.negative !== 0) {
  81008. out = '-' + out;
  81009. }
  81010. return out;
  81011. }
  81012. assert(false, 'Base should be between 2 and 36');
  81013. };
  81014. BN.prototype.toNumber = function toNumber () {
  81015. var ret = this.words[0];
  81016. if (this.length === 2) {
  81017. ret += this.words[1] * 0x4000000;
  81018. } else if (this.length === 3 && this.words[2] === 0x01) {
  81019. // NOTE: at this stage it is known that the top bit is set
  81020. ret += 0x10000000000000 + (this.words[1] * 0x4000000);
  81021. } else if (this.length > 2) {
  81022. assert(false, 'Number can only safely store up to 53 bits');
  81023. }
  81024. return (this.negative !== 0) ? -ret : ret;
  81025. };
  81026. BN.prototype.toJSON = function toJSON () {
  81027. return this.toString(16);
  81028. };
  81029. BN.prototype.toBuffer = function toBuffer (endian, length) {
  81030. assert(typeof Buffer !== 'undefined');
  81031. return this.toArrayLike(Buffer, endian, length);
  81032. };
  81033. BN.prototype.toArray = function toArray (endian, length) {
  81034. return this.toArrayLike(Array, endian, length);
  81035. };
  81036. BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
  81037. var byteLength = this.byteLength();
  81038. var reqLength = length || Math.max(1, byteLength);
  81039. assert(byteLength <= reqLength, 'byte array longer than desired length');
  81040. assert(reqLength > 0, 'Requested array length <= 0');
  81041. this.strip();
  81042. var littleEndian = endian === 'le';
  81043. var res = new ArrayType(reqLength);
  81044. var b, i;
  81045. var q = this.clone();
  81046. if (!littleEndian) {
  81047. // Assume big-endian
  81048. for (i = 0; i < reqLength - byteLength; i++) {
  81049. res[i] = 0;
  81050. }
  81051. for (i = 0; !q.isZero(); i++) {
  81052. b = q.andln(0xff);
  81053. q.iushrn(8);
  81054. res[reqLength - i - 1] = b;
  81055. }
  81056. } else {
  81057. for (i = 0; !q.isZero(); i++) {
  81058. b = q.andln(0xff);
  81059. q.iushrn(8);
  81060. res[i] = b;
  81061. }
  81062. for (; i < reqLength; i++) {
  81063. res[i] = 0;
  81064. }
  81065. }
  81066. return res;
  81067. };
  81068. if (Math.clz32) {
  81069. BN.prototype._countBits = function _countBits (w) {
  81070. return 32 - Math.clz32(w);
  81071. };
  81072. } else {
  81073. BN.prototype._countBits = function _countBits (w) {
  81074. var t = w;
  81075. var r = 0;
  81076. if (t >= 0x1000) {
  81077. r += 13;
  81078. t >>>= 13;
  81079. }
  81080. if (t >= 0x40) {
  81081. r += 7;
  81082. t >>>= 7;
  81083. }
  81084. if (t >= 0x8) {
  81085. r += 4;
  81086. t >>>= 4;
  81087. }
  81088. if (t >= 0x02) {
  81089. r += 2;
  81090. t >>>= 2;
  81091. }
  81092. return r + t;
  81093. };
  81094. }
  81095. BN.prototype._zeroBits = function _zeroBits (w) {
  81096. // Short-cut
  81097. if (w === 0) return 26;
  81098. var t = w;
  81099. var r = 0;
  81100. if ((t & 0x1fff) === 0) {
  81101. r += 13;
  81102. t >>>= 13;
  81103. }
  81104. if ((t & 0x7f) === 0) {
  81105. r += 7;
  81106. t >>>= 7;
  81107. }
  81108. if ((t & 0xf) === 0) {
  81109. r += 4;
  81110. t >>>= 4;
  81111. }
  81112. if ((t & 0x3) === 0) {
  81113. r += 2;
  81114. t >>>= 2;
  81115. }
  81116. if ((t & 0x1) === 0) {
  81117. r++;
  81118. }
  81119. return r;
  81120. };
  81121. // Return number of used bits in a BN
  81122. BN.prototype.bitLength = function bitLength () {
  81123. var w = this.words[this.length - 1];
  81124. var hi = this._countBits(w);
  81125. return (this.length - 1) * 26 + hi;
  81126. };
  81127. function toBitArray (num) {
  81128. var w = new Array(num.bitLength());
  81129. for (var bit = 0; bit < w.length; bit++) {
  81130. var off = (bit / 26) | 0;
  81131. var wbit = bit % 26;
  81132. w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
  81133. }
  81134. return w;
  81135. }
  81136. // Number of trailing zero bits
  81137. BN.prototype.zeroBits = function zeroBits () {
  81138. if (this.isZero()) return 0;
  81139. var r = 0;
  81140. for (var i = 0; i < this.length; i++) {
  81141. var b = this._zeroBits(this.words[i]);
  81142. r += b;
  81143. if (b !== 26) break;
  81144. }
  81145. return r;
  81146. };
  81147. BN.prototype.byteLength = function byteLength () {
  81148. return Math.ceil(this.bitLength() / 8);
  81149. };
  81150. BN.prototype.toTwos = function toTwos (width) {
  81151. if (this.negative !== 0) {
  81152. return this.abs().inotn(width).iaddn(1);
  81153. }
  81154. return this.clone();
  81155. };
  81156. BN.prototype.fromTwos = function fromTwos (width) {
  81157. if (this.testn(width - 1)) {
  81158. return this.notn(width).iaddn(1).ineg();
  81159. }
  81160. return this.clone();
  81161. };
  81162. BN.prototype.isNeg = function isNeg () {
  81163. return this.negative !== 0;
  81164. };
  81165. // Return negative clone of `this`
  81166. BN.prototype.neg = function neg () {
  81167. return this.clone().ineg();
  81168. };
  81169. BN.prototype.ineg = function ineg () {
  81170. if (!this.isZero()) {
  81171. this.negative ^= 1;
  81172. }
  81173. return this;
  81174. };
  81175. // Or `num` with `this` in-place
  81176. BN.prototype.iuor = function iuor (num) {
  81177. while (this.length < num.length) {
  81178. this.words[this.length++] = 0;
  81179. }
  81180. for (var i = 0; i < num.length; i++) {
  81181. this.words[i] = this.words[i] | num.words[i];
  81182. }
  81183. return this.strip();
  81184. };
  81185. BN.prototype.ior = function ior (num) {
  81186. assert((this.negative | num.negative) === 0);
  81187. return this.iuor(num);
  81188. };
  81189. // Or `num` with `this`
  81190. BN.prototype.or = function or (num) {
  81191. if (this.length > num.length) return this.clone().ior(num);
  81192. return num.clone().ior(this);
  81193. };
  81194. BN.prototype.uor = function uor (num) {
  81195. if (this.length > num.length) return this.clone().iuor(num);
  81196. return num.clone().iuor(this);
  81197. };
  81198. // And `num` with `this` in-place
  81199. BN.prototype.iuand = function iuand (num) {
  81200. // b = min-length(num, this)
  81201. var b;
  81202. if (this.length > num.length) {
  81203. b = num;
  81204. } else {
  81205. b = this;
  81206. }
  81207. for (var i = 0; i < b.length; i++) {
  81208. this.words[i] = this.words[i] & num.words[i];
  81209. }
  81210. this.length = b.length;
  81211. return this.strip();
  81212. };
  81213. BN.prototype.iand = function iand (num) {
  81214. assert((this.negative | num.negative) === 0);
  81215. return this.iuand(num);
  81216. };
  81217. // And `num` with `this`
  81218. BN.prototype.and = function and (num) {
  81219. if (this.length > num.length) return this.clone().iand(num);
  81220. return num.clone().iand(this);
  81221. };
  81222. BN.prototype.uand = function uand (num) {
  81223. if (this.length > num.length) return this.clone().iuand(num);
  81224. return num.clone().iuand(this);
  81225. };
  81226. // Xor `num` with `this` in-place
  81227. BN.prototype.iuxor = function iuxor (num) {
  81228. // a.length > b.length
  81229. var a;
  81230. var b;
  81231. if (this.length > num.length) {
  81232. a = this;
  81233. b = num;
  81234. } else {
  81235. a = num;
  81236. b = this;
  81237. }
  81238. for (var i = 0; i < b.length; i++) {
  81239. this.words[i] = a.words[i] ^ b.words[i];
  81240. }
  81241. if (this !== a) {
  81242. for (; i < a.length; i++) {
  81243. this.words[i] = a.words[i];
  81244. }
  81245. }
  81246. this.length = a.length;
  81247. return this.strip();
  81248. };
  81249. BN.prototype.ixor = function ixor (num) {
  81250. assert((this.negative | num.negative) === 0);
  81251. return this.iuxor(num);
  81252. };
  81253. // Xor `num` with `this`
  81254. BN.prototype.xor = function xor (num) {
  81255. if (this.length > num.length) return this.clone().ixor(num);
  81256. return num.clone().ixor(this);
  81257. };
  81258. BN.prototype.uxor = function uxor (num) {
  81259. if (this.length > num.length) return this.clone().iuxor(num);
  81260. return num.clone().iuxor(this);
  81261. };
  81262. // Not ``this`` with ``width`` bitwidth
  81263. BN.prototype.inotn = function inotn (width) {
  81264. assert(typeof width === 'number' && width >= 0);
  81265. var bytesNeeded = Math.ceil(width / 26) | 0;
  81266. var bitsLeft = width % 26;
  81267. // Extend the buffer with leading zeroes
  81268. this._expand(bytesNeeded);
  81269. if (bitsLeft > 0) {
  81270. bytesNeeded--;
  81271. }
  81272. // Handle complete words
  81273. for (var i = 0; i < bytesNeeded; i++) {
  81274. this.words[i] = ~this.words[i] & 0x3ffffff;
  81275. }
  81276. // Handle the residue
  81277. if (bitsLeft > 0) {
  81278. this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
  81279. }
  81280. // And remove leading zeroes
  81281. return this.strip();
  81282. };
  81283. BN.prototype.notn = function notn (width) {
  81284. return this.clone().inotn(width);
  81285. };
  81286. // Set `bit` of `this`
  81287. BN.prototype.setn = function setn (bit, val) {
  81288. assert(typeof bit === 'number' && bit >= 0);
  81289. var off = (bit / 26) | 0;
  81290. var wbit = bit % 26;
  81291. this._expand(off + 1);
  81292. if (val) {
  81293. this.words[off] = this.words[off] | (1 << wbit);
  81294. } else {
  81295. this.words[off] = this.words[off] & ~(1 << wbit);
  81296. }
  81297. return this.strip();
  81298. };
  81299. // Add `num` to `this` in-place
  81300. BN.prototype.iadd = function iadd (num) {
  81301. var r;
  81302. // negative + positive
  81303. if (this.negative !== 0 && num.negative === 0) {
  81304. this.negative = 0;
  81305. r = this.isub(num);
  81306. this.negative ^= 1;
  81307. return this._normSign();
  81308. // positive + negative
  81309. } else if (this.negative === 0 && num.negative !== 0) {
  81310. num.negative = 0;
  81311. r = this.isub(num);
  81312. num.negative = 1;
  81313. return r._normSign();
  81314. }
  81315. // a.length > b.length
  81316. var a, b;
  81317. if (this.length > num.length) {
  81318. a = this;
  81319. b = num;
  81320. } else {
  81321. a = num;
  81322. b = this;
  81323. }
  81324. var carry = 0;
  81325. for (var i = 0; i < b.length; i++) {
  81326. r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
  81327. this.words[i] = r & 0x3ffffff;
  81328. carry = r >>> 26;
  81329. }
  81330. for (; carry !== 0 && i < a.length; i++) {
  81331. r = (a.words[i] | 0) + carry;
  81332. this.words[i] = r & 0x3ffffff;
  81333. carry = r >>> 26;
  81334. }
  81335. this.length = a.length;
  81336. if (carry !== 0) {
  81337. this.words[this.length] = carry;
  81338. this.length++;
  81339. // Copy the rest of the words
  81340. } else if (a !== this) {
  81341. for (; i < a.length; i++) {
  81342. this.words[i] = a.words[i];
  81343. }
  81344. }
  81345. return this;
  81346. };
  81347. // Add `num` to `this`
  81348. BN.prototype.add = function add (num) {
  81349. var res;
  81350. if (num.negative !== 0 && this.negative === 0) {
  81351. num.negative = 0;
  81352. res = this.sub(num);
  81353. num.negative ^= 1;
  81354. return res;
  81355. } else if (num.negative === 0 && this.negative !== 0) {
  81356. this.negative = 0;
  81357. res = num.sub(this);
  81358. this.negative = 1;
  81359. return res;
  81360. }
  81361. if (this.length > num.length) return this.clone().iadd(num);
  81362. return num.clone().iadd(this);
  81363. };
  81364. // Subtract `num` from `this` in-place
  81365. BN.prototype.isub = function isub (num) {
  81366. // this - (-num) = this + num
  81367. if (num.negative !== 0) {
  81368. num.negative = 0;
  81369. var r = this.iadd(num);
  81370. num.negative = 1;
  81371. return r._normSign();
  81372. // -this - num = -(this + num)
  81373. } else if (this.negative !== 0) {
  81374. this.negative = 0;
  81375. this.iadd(num);
  81376. this.negative = 1;
  81377. return this._normSign();
  81378. }
  81379. // At this point both numbers are positive
  81380. var cmp = this.cmp(num);
  81381. // Optimization - zeroify
  81382. if (cmp === 0) {
  81383. this.negative = 0;
  81384. this.length = 1;
  81385. this.words[0] = 0;
  81386. return this;
  81387. }
  81388. // a > b
  81389. var a, b;
  81390. if (cmp > 0) {
  81391. a = this;
  81392. b = num;
  81393. } else {
  81394. a = num;
  81395. b = this;
  81396. }
  81397. var carry = 0;
  81398. for (var i = 0; i < b.length; i++) {
  81399. r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
  81400. carry = r >> 26;
  81401. this.words[i] = r & 0x3ffffff;
  81402. }
  81403. for (; carry !== 0 && i < a.length; i++) {
  81404. r = (a.words[i] | 0) + carry;
  81405. carry = r >> 26;
  81406. this.words[i] = r & 0x3ffffff;
  81407. }
  81408. // Copy rest of the words
  81409. if (carry === 0 && i < a.length && a !== this) {
  81410. for (; i < a.length; i++) {
  81411. this.words[i] = a.words[i];
  81412. }
  81413. }
  81414. this.length = Math.max(this.length, i);
  81415. if (a !== this) {
  81416. this.negative = 1;
  81417. }
  81418. return this.strip();
  81419. };
  81420. // Subtract `num` from `this`
  81421. BN.prototype.sub = function sub (num) {
  81422. return this.clone().isub(num);
  81423. };
  81424. function smallMulTo (self, num, out) {
  81425. out.negative = num.negative ^ self.negative;
  81426. var len = (self.length + num.length) | 0;
  81427. out.length = len;
  81428. len = (len - 1) | 0;
  81429. // Peel one iteration (compiler can't do it, because of code complexity)
  81430. var a = self.words[0] | 0;
  81431. var b = num.words[0] | 0;
  81432. var r = a * b;
  81433. var lo = r & 0x3ffffff;
  81434. var carry = (r / 0x4000000) | 0;
  81435. out.words[0] = lo;
  81436. for (var k = 1; k < len; k++) {
  81437. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  81438. // note that ncarry could be >= 0x3ffffff
  81439. var ncarry = carry >>> 26;
  81440. var rword = carry & 0x3ffffff;
  81441. var maxJ = Math.min(k, num.length - 1);
  81442. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  81443. var i = (k - j) | 0;
  81444. a = self.words[i] | 0;
  81445. b = num.words[j] | 0;
  81446. r = a * b + rword;
  81447. ncarry += (r / 0x4000000) | 0;
  81448. rword = r & 0x3ffffff;
  81449. }
  81450. out.words[k] = rword | 0;
  81451. carry = ncarry | 0;
  81452. }
  81453. if (carry !== 0) {
  81454. out.words[k] = carry | 0;
  81455. } else {
  81456. out.length--;
  81457. }
  81458. return out.strip();
  81459. }
  81460. // TODO(indutny): it may be reasonable to omit it for users who don't need
  81461. // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
  81462. // multiplication (like elliptic secp256k1).
  81463. var comb10MulTo = function comb10MulTo (self, num, out) {
  81464. var a = self.words;
  81465. var b = num.words;
  81466. var o = out.words;
  81467. var c = 0;
  81468. var lo;
  81469. var mid;
  81470. var hi;
  81471. var a0 = a[0] | 0;
  81472. var al0 = a0 & 0x1fff;
  81473. var ah0 = a0 >>> 13;
  81474. var a1 = a[1] | 0;
  81475. var al1 = a1 & 0x1fff;
  81476. var ah1 = a1 >>> 13;
  81477. var a2 = a[2] | 0;
  81478. var al2 = a2 & 0x1fff;
  81479. var ah2 = a2 >>> 13;
  81480. var a3 = a[3] | 0;
  81481. var al3 = a3 & 0x1fff;
  81482. var ah3 = a3 >>> 13;
  81483. var a4 = a[4] | 0;
  81484. var al4 = a4 & 0x1fff;
  81485. var ah4 = a4 >>> 13;
  81486. var a5 = a[5] | 0;
  81487. var al5 = a5 & 0x1fff;
  81488. var ah5 = a5 >>> 13;
  81489. var a6 = a[6] | 0;
  81490. var al6 = a6 & 0x1fff;
  81491. var ah6 = a6 >>> 13;
  81492. var a7 = a[7] | 0;
  81493. var al7 = a7 & 0x1fff;
  81494. var ah7 = a7 >>> 13;
  81495. var a8 = a[8] | 0;
  81496. var al8 = a8 & 0x1fff;
  81497. var ah8 = a8 >>> 13;
  81498. var a9 = a[9] | 0;
  81499. var al9 = a9 & 0x1fff;
  81500. var ah9 = a9 >>> 13;
  81501. var b0 = b[0] | 0;
  81502. var bl0 = b0 & 0x1fff;
  81503. var bh0 = b0 >>> 13;
  81504. var b1 = b[1] | 0;
  81505. var bl1 = b1 & 0x1fff;
  81506. var bh1 = b1 >>> 13;
  81507. var b2 = b[2] | 0;
  81508. var bl2 = b2 & 0x1fff;
  81509. var bh2 = b2 >>> 13;
  81510. var b3 = b[3] | 0;
  81511. var bl3 = b3 & 0x1fff;
  81512. var bh3 = b3 >>> 13;
  81513. var b4 = b[4] | 0;
  81514. var bl4 = b4 & 0x1fff;
  81515. var bh4 = b4 >>> 13;
  81516. var b5 = b[5] | 0;
  81517. var bl5 = b5 & 0x1fff;
  81518. var bh5 = b5 >>> 13;
  81519. var b6 = b[6] | 0;
  81520. var bl6 = b6 & 0x1fff;
  81521. var bh6 = b6 >>> 13;
  81522. var b7 = b[7] | 0;
  81523. var bl7 = b7 & 0x1fff;
  81524. var bh7 = b7 >>> 13;
  81525. var b8 = b[8] | 0;
  81526. var bl8 = b8 & 0x1fff;
  81527. var bh8 = b8 >>> 13;
  81528. var b9 = b[9] | 0;
  81529. var bl9 = b9 & 0x1fff;
  81530. var bh9 = b9 >>> 13;
  81531. out.negative = self.negative ^ num.negative;
  81532. out.length = 19;
  81533. /* k = 0 */
  81534. lo = Math.imul(al0, bl0);
  81535. mid = Math.imul(al0, bh0);
  81536. mid = (mid + Math.imul(ah0, bl0)) | 0;
  81537. hi = Math.imul(ah0, bh0);
  81538. var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81539. c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
  81540. w0 &= 0x3ffffff;
  81541. /* k = 1 */
  81542. lo = Math.imul(al1, bl0);
  81543. mid = Math.imul(al1, bh0);
  81544. mid = (mid + Math.imul(ah1, bl0)) | 0;
  81545. hi = Math.imul(ah1, bh0);
  81546. lo = (lo + Math.imul(al0, bl1)) | 0;
  81547. mid = (mid + Math.imul(al0, bh1)) | 0;
  81548. mid = (mid + Math.imul(ah0, bl1)) | 0;
  81549. hi = (hi + Math.imul(ah0, bh1)) | 0;
  81550. var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81551. c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
  81552. w1 &= 0x3ffffff;
  81553. /* k = 2 */
  81554. lo = Math.imul(al2, bl0);
  81555. mid = Math.imul(al2, bh0);
  81556. mid = (mid + Math.imul(ah2, bl0)) | 0;
  81557. hi = Math.imul(ah2, bh0);
  81558. lo = (lo + Math.imul(al1, bl1)) | 0;
  81559. mid = (mid + Math.imul(al1, bh1)) | 0;
  81560. mid = (mid + Math.imul(ah1, bl1)) | 0;
  81561. hi = (hi + Math.imul(ah1, bh1)) | 0;
  81562. lo = (lo + Math.imul(al0, bl2)) | 0;
  81563. mid = (mid + Math.imul(al0, bh2)) | 0;
  81564. mid = (mid + Math.imul(ah0, bl2)) | 0;
  81565. hi = (hi + Math.imul(ah0, bh2)) | 0;
  81566. var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81567. c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
  81568. w2 &= 0x3ffffff;
  81569. /* k = 3 */
  81570. lo = Math.imul(al3, bl0);
  81571. mid = Math.imul(al3, bh0);
  81572. mid = (mid + Math.imul(ah3, bl0)) | 0;
  81573. hi = Math.imul(ah3, bh0);
  81574. lo = (lo + Math.imul(al2, bl1)) | 0;
  81575. mid = (mid + Math.imul(al2, bh1)) | 0;
  81576. mid = (mid + Math.imul(ah2, bl1)) | 0;
  81577. hi = (hi + Math.imul(ah2, bh1)) | 0;
  81578. lo = (lo + Math.imul(al1, bl2)) | 0;
  81579. mid = (mid + Math.imul(al1, bh2)) | 0;
  81580. mid = (mid + Math.imul(ah1, bl2)) | 0;
  81581. hi = (hi + Math.imul(ah1, bh2)) | 0;
  81582. lo = (lo + Math.imul(al0, bl3)) | 0;
  81583. mid = (mid + Math.imul(al0, bh3)) | 0;
  81584. mid = (mid + Math.imul(ah0, bl3)) | 0;
  81585. hi = (hi + Math.imul(ah0, bh3)) | 0;
  81586. var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81587. c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
  81588. w3 &= 0x3ffffff;
  81589. /* k = 4 */
  81590. lo = Math.imul(al4, bl0);
  81591. mid = Math.imul(al4, bh0);
  81592. mid = (mid + Math.imul(ah4, bl0)) | 0;
  81593. hi = Math.imul(ah4, bh0);
  81594. lo = (lo + Math.imul(al3, bl1)) | 0;
  81595. mid = (mid + Math.imul(al3, bh1)) | 0;
  81596. mid = (mid + Math.imul(ah3, bl1)) | 0;
  81597. hi = (hi + Math.imul(ah3, bh1)) | 0;
  81598. lo = (lo + Math.imul(al2, bl2)) | 0;
  81599. mid = (mid + Math.imul(al2, bh2)) | 0;
  81600. mid = (mid + Math.imul(ah2, bl2)) | 0;
  81601. hi = (hi + Math.imul(ah2, bh2)) | 0;
  81602. lo = (lo + Math.imul(al1, bl3)) | 0;
  81603. mid = (mid + Math.imul(al1, bh3)) | 0;
  81604. mid = (mid + Math.imul(ah1, bl3)) | 0;
  81605. hi = (hi + Math.imul(ah1, bh3)) | 0;
  81606. lo = (lo + Math.imul(al0, bl4)) | 0;
  81607. mid = (mid + Math.imul(al0, bh4)) | 0;
  81608. mid = (mid + Math.imul(ah0, bl4)) | 0;
  81609. hi = (hi + Math.imul(ah0, bh4)) | 0;
  81610. var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81611. c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
  81612. w4 &= 0x3ffffff;
  81613. /* k = 5 */
  81614. lo = Math.imul(al5, bl0);
  81615. mid = Math.imul(al5, bh0);
  81616. mid = (mid + Math.imul(ah5, bl0)) | 0;
  81617. hi = Math.imul(ah5, bh0);
  81618. lo = (lo + Math.imul(al4, bl1)) | 0;
  81619. mid = (mid + Math.imul(al4, bh1)) | 0;
  81620. mid = (mid + Math.imul(ah4, bl1)) | 0;
  81621. hi = (hi + Math.imul(ah4, bh1)) | 0;
  81622. lo = (lo + Math.imul(al3, bl2)) | 0;
  81623. mid = (mid + Math.imul(al3, bh2)) | 0;
  81624. mid = (mid + Math.imul(ah3, bl2)) | 0;
  81625. hi = (hi + Math.imul(ah3, bh2)) | 0;
  81626. lo = (lo + Math.imul(al2, bl3)) | 0;
  81627. mid = (mid + Math.imul(al2, bh3)) | 0;
  81628. mid = (mid + Math.imul(ah2, bl3)) | 0;
  81629. hi = (hi + Math.imul(ah2, bh3)) | 0;
  81630. lo = (lo + Math.imul(al1, bl4)) | 0;
  81631. mid = (mid + Math.imul(al1, bh4)) | 0;
  81632. mid = (mid + Math.imul(ah1, bl4)) | 0;
  81633. hi = (hi + Math.imul(ah1, bh4)) | 0;
  81634. lo = (lo + Math.imul(al0, bl5)) | 0;
  81635. mid = (mid + Math.imul(al0, bh5)) | 0;
  81636. mid = (mid + Math.imul(ah0, bl5)) | 0;
  81637. hi = (hi + Math.imul(ah0, bh5)) | 0;
  81638. var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81639. c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
  81640. w5 &= 0x3ffffff;
  81641. /* k = 6 */
  81642. lo = Math.imul(al6, bl0);
  81643. mid = Math.imul(al6, bh0);
  81644. mid = (mid + Math.imul(ah6, bl0)) | 0;
  81645. hi = Math.imul(ah6, bh0);
  81646. lo = (lo + Math.imul(al5, bl1)) | 0;
  81647. mid = (mid + Math.imul(al5, bh1)) | 0;
  81648. mid = (mid + Math.imul(ah5, bl1)) | 0;
  81649. hi = (hi + Math.imul(ah5, bh1)) | 0;
  81650. lo = (lo + Math.imul(al4, bl2)) | 0;
  81651. mid = (mid + Math.imul(al4, bh2)) | 0;
  81652. mid = (mid + Math.imul(ah4, bl2)) | 0;
  81653. hi = (hi + Math.imul(ah4, bh2)) | 0;
  81654. lo = (lo + Math.imul(al3, bl3)) | 0;
  81655. mid = (mid + Math.imul(al3, bh3)) | 0;
  81656. mid = (mid + Math.imul(ah3, bl3)) | 0;
  81657. hi = (hi + Math.imul(ah3, bh3)) | 0;
  81658. lo = (lo + Math.imul(al2, bl4)) | 0;
  81659. mid = (mid + Math.imul(al2, bh4)) | 0;
  81660. mid = (mid + Math.imul(ah2, bl4)) | 0;
  81661. hi = (hi + Math.imul(ah2, bh4)) | 0;
  81662. lo = (lo + Math.imul(al1, bl5)) | 0;
  81663. mid = (mid + Math.imul(al1, bh5)) | 0;
  81664. mid = (mid + Math.imul(ah1, bl5)) | 0;
  81665. hi = (hi + Math.imul(ah1, bh5)) | 0;
  81666. lo = (lo + Math.imul(al0, bl6)) | 0;
  81667. mid = (mid + Math.imul(al0, bh6)) | 0;
  81668. mid = (mid + Math.imul(ah0, bl6)) | 0;
  81669. hi = (hi + Math.imul(ah0, bh6)) | 0;
  81670. var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81671. c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
  81672. w6 &= 0x3ffffff;
  81673. /* k = 7 */
  81674. lo = Math.imul(al7, bl0);
  81675. mid = Math.imul(al7, bh0);
  81676. mid = (mid + Math.imul(ah7, bl0)) | 0;
  81677. hi = Math.imul(ah7, bh0);
  81678. lo = (lo + Math.imul(al6, bl1)) | 0;
  81679. mid = (mid + Math.imul(al6, bh1)) | 0;
  81680. mid = (mid + Math.imul(ah6, bl1)) | 0;
  81681. hi = (hi + Math.imul(ah6, bh1)) | 0;
  81682. lo = (lo + Math.imul(al5, bl2)) | 0;
  81683. mid = (mid + Math.imul(al5, bh2)) | 0;
  81684. mid = (mid + Math.imul(ah5, bl2)) | 0;
  81685. hi = (hi + Math.imul(ah5, bh2)) | 0;
  81686. lo = (lo + Math.imul(al4, bl3)) | 0;
  81687. mid = (mid + Math.imul(al4, bh3)) | 0;
  81688. mid = (mid + Math.imul(ah4, bl3)) | 0;
  81689. hi = (hi + Math.imul(ah4, bh3)) | 0;
  81690. lo = (lo + Math.imul(al3, bl4)) | 0;
  81691. mid = (mid + Math.imul(al3, bh4)) | 0;
  81692. mid = (mid + Math.imul(ah3, bl4)) | 0;
  81693. hi = (hi + Math.imul(ah3, bh4)) | 0;
  81694. lo = (lo + Math.imul(al2, bl5)) | 0;
  81695. mid = (mid + Math.imul(al2, bh5)) | 0;
  81696. mid = (mid + Math.imul(ah2, bl5)) | 0;
  81697. hi = (hi + Math.imul(ah2, bh5)) | 0;
  81698. lo = (lo + Math.imul(al1, bl6)) | 0;
  81699. mid = (mid + Math.imul(al1, bh6)) | 0;
  81700. mid = (mid + Math.imul(ah1, bl6)) | 0;
  81701. hi = (hi + Math.imul(ah1, bh6)) | 0;
  81702. lo = (lo + Math.imul(al0, bl7)) | 0;
  81703. mid = (mid + Math.imul(al0, bh7)) | 0;
  81704. mid = (mid + Math.imul(ah0, bl7)) | 0;
  81705. hi = (hi + Math.imul(ah0, bh7)) | 0;
  81706. var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81707. c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
  81708. w7 &= 0x3ffffff;
  81709. /* k = 8 */
  81710. lo = Math.imul(al8, bl0);
  81711. mid = Math.imul(al8, bh0);
  81712. mid = (mid + Math.imul(ah8, bl0)) | 0;
  81713. hi = Math.imul(ah8, bh0);
  81714. lo = (lo + Math.imul(al7, bl1)) | 0;
  81715. mid = (mid + Math.imul(al7, bh1)) | 0;
  81716. mid = (mid + Math.imul(ah7, bl1)) | 0;
  81717. hi = (hi + Math.imul(ah7, bh1)) | 0;
  81718. lo = (lo + Math.imul(al6, bl2)) | 0;
  81719. mid = (mid + Math.imul(al6, bh2)) | 0;
  81720. mid = (mid + Math.imul(ah6, bl2)) | 0;
  81721. hi = (hi + Math.imul(ah6, bh2)) | 0;
  81722. lo = (lo + Math.imul(al5, bl3)) | 0;
  81723. mid = (mid + Math.imul(al5, bh3)) | 0;
  81724. mid = (mid + Math.imul(ah5, bl3)) | 0;
  81725. hi = (hi + Math.imul(ah5, bh3)) | 0;
  81726. lo = (lo + Math.imul(al4, bl4)) | 0;
  81727. mid = (mid + Math.imul(al4, bh4)) | 0;
  81728. mid = (mid + Math.imul(ah4, bl4)) | 0;
  81729. hi = (hi + Math.imul(ah4, bh4)) | 0;
  81730. lo = (lo + Math.imul(al3, bl5)) | 0;
  81731. mid = (mid + Math.imul(al3, bh5)) | 0;
  81732. mid = (mid + Math.imul(ah3, bl5)) | 0;
  81733. hi = (hi + Math.imul(ah3, bh5)) | 0;
  81734. lo = (lo + Math.imul(al2, bl6)) | 0;
  81735. mid = (mid + Math.imul(al2, bh6)) | 0;
  81736. mid = (mid + Math.imul(ah2, bl6)) | 0;
  81737. hi = (hi + Math.imul(ah2, bh6)) | 0;
  81738. lo = (lo + Math.imul(al1, bl7)) | 0;
  81739. mid = (mid + Math.imul(al1, bh7)) | 0;
  81740. mid = (mid + Math.imul(ah1, bl7)) | 0;
  81741. hi = (hi + Math.imul(ah1, bh7)) | 0;
  81742. lo = (lo + Math.imul(al0, bl8)) | 0;
  81743. mid = (mid + Math.imul(al0, bh8)) | 0;
  81744. mid = (mid + Math.imul(ah0, bl8)) | 0;
  81745. hi = (hi + Math.imul(ah0, bh8)) | 0;
  81746. var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81747. c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
  81748. w8 &= 0x3ffffff;
  81749. /* k = 9 */
  81750. lo = Math.imul(al9, bl0);
  81751. mid = Math.imul(al9, bh0);
  81752. mid = (mid + Math.imul(ah9, bl0)) | 0;
  81753. hi = Math.imul(ah9, bh0);
  81754. lo = (lo + Math.imul(al8, bl1)) | 0;
  81755. mid = (mid + Math.imul(al8, bh1)) | 0;
  81756. mid = (mid + Math.imul(ah8, bl1)) | 0;
  81757. hi = (hi + Math.imul(ah8, bh1)) | 0;
  81758. lo = (lo + Math.imul(al7, bl2)) | 0;
  81759. mid = (mid + Math.imul(al7, bh2)) | 0;
  81760. mid = (mid + Math.imul(ah7, bl2)) | 0;
  81761. hi = (hi + Math.imul(ah7, bh2)) | 0;
  81762. lo = (lo + Math.imul(al6, bl3)) | 0;
  81763. mid = (mid + Math.imul(al6, bh3)) | 0;
  81764. mid = (mid + Math.imul(ah6, bl3)) | 0;
  81765. hi = (hi + Math.imul(ah6, bh3)) | 0;
  81766. lo = (lo + Math.imul(al5, bl4)) | 0;
  81767. mid = (mid + Math.imul(al5, bh4)) | 0;
  81768. mid = (mid + Math.imul(ah5, bl4)) | 0;
  81769. hi = (hi + Math.imul(ah5, bh4)) | 0;
  81770. lo = (lo + Math.imul(al4, bl5)) | 0;
  81771. mid = (mid + Math.imul(al4, bh5)) | 0;
  81772. mid = (mid + Math.imul(ah4, bl5)) | 0;
  81773. hi = (hi + Math.imul(ah4, bh5)) | 0;
  81774. lo = (lo + Math.imul(al3, bl6)) | 0;
  81775. mid = (mid + Math.imul(al3, bh6)) | 0;
  81776. mid = (mid + Math.imul(ah3, bl6)) | 0;
  81777. hi = (hi + Math.imul(ah3, bh6)) | 0;
  81778. lo = (lo + Math.imul(al2, bl7)) | 0;
  81779. mid = (mid + Math.imul(al2, bh7)) | 0;
  81780. mid = (mid + Math.imul(ah2, bl7)) | 0;
  81781. hi = (hi + Math.imul(ah2, bh7)) | 0;
  81782. lo = (lo + Math.imul(al1, bl8)) | 0;
  81783. mid = (mid + Math.imul(al1, bh8)) | 0;
  81784. mid = (mid + Math.imul(ah1, bl8)) | 0;
  81785. hi = (hi + Math.imul(ah1, bh8)) | 0;
  81786. lo = (lo + Math.imul(al0, bl9)) | 0;
  81787. mid = (mid + Math.imul(al0, bh9)) | 0;
  81788. mid = (mid + Math.imul(ah0, bl9)) | 0;
  81789. hi = (hi + Math.imul(ah0, bh9)) | 0;
  81790. var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81791. c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
  81792. w9 &= 0x3ffffff;
  81793. /* k = 10 */
  81794. lo = Math.imul(al9, bl1);
  81795. mid = Math.imul(al9, bh1);
  81796. mid = (mid + Math.imul(ah9, bl1)) | 0;
  81797. hi = Math.imul(ah9, bh1);
  81798. lo = (lo + Math.imul(al8, bl2)) | 0;
  81799. mid = (mid + Math.imul(al8, bh2)) | 0;
  81800. mid = (mid + Math.imul(ah8, bl2)) | 0;
  81801. hi = (hi + Math.imul(ah8, bh2)) | 0;
  81802. lo = (lo + Math.imul(al7, bl3)) | 0;
  81803. mid = (mid + Math.imul(al7, bh3)) | 0;
  81804. mid = (mid + Math.imul(ah7, bl3)) | 0;
  81805. hi = (hi + Math.imul(ah7, bh3)) | 0;
  81806. lo = (lo + Math.imul(al6, bl4)) | 0;
  81807. mid = (mid + Math.imul(al6, bh4)) | 0;
  81808. mid = (mid + Math.imul(ah6, bl4)) | 0;
  81809. hi = (hi + Math.imul(ah6, bh4)) | 0;
  81810. lo = (lo + Math.imul(al5, bl5)) | 0;
  81811. mid = (mid + Math.imul(al5, bh5)) | 0;
  81812. mid = (mid + Math.imul(ah5, bl5)) | 0;
  81813. hi = (hi + Math.imul(ah5, bh5)) | 0;
  81814. lo = (lo + Math.imul(al4, bl6)) | 0;
  81815. mid = (mid + Math.imul(al4, bh6)) | 0;
  81816. mid = (mid + Math.imul(ah4, bl6)) | 0;
  81817. hi = (hi + Math.imul(ah4, bh6)) | 0;
  81818. lo = (lo + Math.imul(al3, bl7)) | 0;
  81819. mid = (mid + Math.imul(al3, bh7)) | 0;
  81820. mid = (mid + Math.imul(ah3, bl7)) | 0;
  81821. hi = (hi + Math.imul(ah3, bh7)) | 0;
  81822. lo = (lo + Math.imul(al2, bl8)) | 0;
  81823. mid = (mid + Math.imul(al2, bh8)) | 0;
  81824. mid = (mid + Math.imul(ah2, bl8)) | 0;
  81825. hi = (hi + Math.imul(ah2, bh8)) | 0;
  81826. lo = (lo + Math.imul(al1, bl9)) | 0;
  81827. mid = (mid + Math.imul(al1, bh9)) | 0;
  81828. mid = (mid + Math.imul(ah1, bl9)) | 0;
  81829. hi = (hi + Math.imul(ah1, bh9)) | 0;
  81830. var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81831. c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
  81832. w10 &= 0x3ffffff;
  81833. /* k = 11 */
  81834. lo = Math.imul(al9, bl2);
  81835. mid = Math.imul(al9, bh2);
  81836. mid = (mid + Math.imul(ah9, bl2)) | 0;
  81837. hi = Math.imul(ah9, bh2);
  81838. lo = (lo + Math.imul(al8, bl3)) | 0;
  81839. mid = (mid + Math.imul(al8, bh3)) | 0;
  81840. mid = (mid + Math.imul(ah8, bl3)) | 0;
  81841. hi = (hi + Math.imul(ah8, bh3)) | 0;
  81842. lo = (lo + Math.imul(al7, bl4)) | 0;
  81843. mid = (mid + Math.imul(al7, bh4)) | 0;
  81844. mid = (mid + Math.imul(ah7, bl4)) | 0;
  81845. hi = (hi + Math.imul(ah7, bh4)) | 0;
  81846. lo = (lo + Math.imul(al6, bl5)) | 0;
  81847. mid = (mid + Math.imul(al6, bh5)) | 0;
  81848. mid = (mid + Math.imul(ah6, bl5)) | 0;
  81849. hi = (hi + Math.imul(ah6, bh5)) | 0;
  81850. lo = (lo + Math.imul(al5, bl6)) | 0;
  81851. mid = (mid + Math.imul(al5, bh6)) | 0;
  81852. mid = (mid + Math.imul(ah5, bl6)) | 0;
  81853. hi = (hi + Math.imul(ah5, bh6)) | 0;
  81854. lo = (lo + Math.imul(al4, bl7)) | 0;
  81855. mid = (mid + Math.imul(al4, bh7)) | 0;
  81856. mid = (mid + Math.imul(ah4, bl7)) | 0;
  81857. hi = (hi + Math.imul(ah4, bh7)) | 0;
  81858. lo = (lo + Math.imul(al3, bl8)) | 0;
  81859. mid = (mid + Math.imul(al3, bh8)) | 0;
  81860. mid = (mid + Math.imul(ah3, bl8)) | 0;
  81861. hi = (hi + Math.imul(ah3, bh8)) | 0;
  81862. lo = (lo + Math.imul(al2, bl9)) | 0;
  81863. mid = (mid + Math.imul(al2, bh9)) | 0;
  81864. mid = (mid + Math.imul(ah2, bl9)) | 0;
  81865. hi = (hi + Math.imul(ah2, bh9)) | 0;
  81866. var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81867. c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
  81868. w11 &= 0x3ffffff;
  81869. /* k = 12 */
  81870. lo = Math.imul(al9, bl3);
  81871. mid = Math.imul(al9, bh3);
  81872. mid = (mid + Math.imul(ah9, bl3)) | 0;
  81873. hi = Math.imul(ah9, bh3);
  81874. lo = (lo + Math.imul(al8, bl4)) | 0;
  81875. mid = (mid + Math.imul(al8, bh4)) | 0;
  81876. mid = (mid + Math.imul(ah8, bl4)) | 0;
  81877. hi = (hi + Math.imul(ah8, bh4)) | 0;
  81878. lo = (lo + Math.imul(al7, bl5)) | 0;
  81879. mid = (mid + Math.imul(al7, bh5)) | 0;
  81880. mid = (mid + Math.imul(ah7, bl5)) | 0;
  81881. hi = (hi + Math.imul(ah7, bh5)) | 0;
  81882. lo = (lo + Math.imul(al6, bl6)) | 0;
  81883. mid = (mid + Math.imul(al6, bh6)) | 0;
  81884. mid = (mid + Math.imul(ah6, bl6)) | 0;
  81885. hi = (hi + Math.imul(ah6, bh6)) | 0;
  81886. lo = (lo + Math.imul(al5, bl7)) | 0;
  81887. mid = (mid + Math.imul(al5, bh7)) | 0;
  81888. mid = (mid + Math.imul(ah5, bl7)) | 0;
  81889. hi = (hi + Math.imul(ah5, bh7)) | 0;
  81890. lo = (lo + Math.imul(al4, bl8)) | 0;
  81891. mid = (mid + Math.imul(al4, bh8)) | 0;
  81892. mid = (mid + Math.imul(ah4, bl8)) | 0;
  81893. hi = (hi + Math.imul(ah4, bh8)) | 0;
  81894. lo = (lo + Math.imul(al3, bl9)) | 0;
  81895. mid = (mid + Math.imul(al3, bh9)) | 0;
  81896. mid = (mid + Math.imul(ah3, bl9)) | 0;
  81897. hi = (hi + Math.imul(ah3, bh9)) | 0;
  81898. var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81899. c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
  81900. w12 &= 0x3ffffff;
  81901. /* k = 13 */
  81902. lo = Math.imul(al9, bl4);
  81903. mid = Math.imul(al9, bh4);
  81904. mid = (mid + Math.imul(ah9, bl4)) | 0;
  81905. hi = Math.imul(ah9, bh4);
  81906. lo = (lo + Math.imul(al8, bl5)) | 0;
  81907. mid = (mid + Math.imul(al8, bh5)) | 0;
  81908. mid = (mid + Math.imul(ah8, bl5)) | 0;
  81909. hi = (hi + Math.imul(ah8, bh5)) | 0;
  81910. lo = (lo + Math.imul(al7, bl6)) | 0;
  81911. mid = (mid + Math.imul(al7, bh6)) | 0;
  81912. mid = (mid + Math.imul(ah7, bl6)) | 0;
  81913. hi = (hi + Math.imul(ah7, bh6)) | 0;
  81914. lo = (lo + Math.imul(al6, bl7)) | 0;
  81915. mid = (mid + Math.imul(al6, bh7)) | 0;
  81916. mid = (mid + Math.imul(ah6, bl7)) | 0;
  81917. hi = (hi + Math.imul(ah6, bh7)) | 0;
  81918. lo = (lo + Math.imul(al5, bl8)) | 0;
  81919. mid = (mid + Math.imul(al5, bh8)) | 0;
  81920. mid = (mid + Math.imul(ah5, bl8)) | 0;
  81921. hi = (hi + Math.imul(ah5, bh8)) | 0;
  81922. lo = (lo + Math.imul(al4, bl9)) | 0;
  81923. mid = (mid + Math.imul(al4, bh9)) | 0;
  81924. mid = (mid + Math.imul(ah4, bl9)) | 0;
  81925. hi = (hi + Math.imul(ah4, bh9)) | 0;
  81926. var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81927. c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
  81928. w13 &= 0x3ffffff;
  81929. /* k = 14 */
  81930. lo = Math.imul(al9, bl5);
  81931. mid = Math.imul(al9, bh5);
  81932. mid = (mid + Math.imul(ah9, bl5)) | 0;
  81933. hi = Math.imul(ah9, bh5);
  81934. lo = (lo + Math.imul(al8, bl6)) | 0;
  81935. mid = (mid + Math.imul(al8, bh6)) | 0;
  81936. mid = (mid + Math.imul(ah8, bl6)) | 0;
  81937. hi = (hi + Math.imul(ah8, bh6)) | 0;
  81938. lo = (lo + Math.imul(al7, bl7)) | 0;
  81939. mid = (mid + Math.imul(al7, bh7)) | 0;
  81940. mid = (mid + Math.imul(ah7, bl7)) | 0;
  81941. hi = (hi + Math.imul(ah7, bh7)) | 0;
  81942. lo = (lo + Math.imul(al6, bl8)) | 0;
  81943. mid = (mid + Math.imul(al6, bh8)) | 0;
  81944. mid = (mid + Math.imul(ah6, bl8)) | 0;
  81945. hi = (hi + Math.imul(ah6, bh8)) | 0;
  81946. lo = (lo + Math.imul(al5, bl9)) | 0;
  81947. mid = (mid + Math.imul(al5, bh9)) | 0;
  81948. mid = (mid + Math.imul(ah5, bl9)) | 0;
  81949. hi = (hi + Math.imul(ah5, bh9)) | 0;
  81950. var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81951. c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
  81952. w14 &= 0x3ffffff;
  81953. /* k = 15 */
  81954. lo = Math.imul(al9, bl6);
  81955. mid = Math.imul(al9, bh6);
  81956. mid = (mid + Math.imul(ah9, bl6)) | 0;
  81957. hi = Math.imul(ah9, bh6);
  81958. lo = (lo + Math.imul(al8, bl7)) | 0;
  81959. mid = (mid + Math.imul(al8, bh7)) | 0;
  81960. mid = (mid + Math.imul(ah8, bl7)) | 0;
  81961. hi = (hi + Math.imul(ah8, bh7)) | 0;
  81962. lo = (lo + Math.imul(al7, bl8)) | 0;
  81963. mid = (mid + Math.imul(al7, bh8)) | 0;
  81964. mid = (mid + Math.imul(ah7, bl8)) | 0;
  81965. hi = (hi + Math.imul(ah7, bh8)) | 0;
  81966. lo = (lo + Math.imul(al6, bl9)) | 0;
  81967. mid = (mid + Math.imul(al6, bh9)) | 0;
  81968. mid = (mid + Math.imul(ah6, bl9)) | 0;
  81969. hi = (hi + Math.imul(ah6, bh9)) | 0;
  81970. var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81971. c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
  81972. w15 &= 0x3ffffff;
  81973. /* k = 16 */
  81974. lo = Math.imul(al9, bl7);
  81975. mid = Math.imul(al9, bh7);
  81976. mid = (mid + Math.imul(ah9, bl7)) | 0;
  81977. hi = Math.imul(ah9, bh7);
  81978. lo = (lo + Math.imul(al8, bl8)) | 0;
  81979. mid = (mid + Math.imul(al8, bh8)) | 0;
  81980. mid = (mid + Math.imul(ah8, bl8)) | 0;
  81981. hi = (hi + Math.imul(ah8, bh8)) | 0;
  81982. lo = (lo + Math.imul(al7, bl9)) | 0;
  81983. mid = (mid + Math.imul(al7, bh9)) | 0;
  81984. mid = (mid + Math.imul(ah7, bl9)) | 0;
  81985. hi = (hi + Math.imul(ah7, bh9)) | 0;
  81986. var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81987. c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
  81988. w16 &= 0x3ffffff;
  81989. /* k = 17 */
  81990. lo = Math.imul(al9, bl8);
  81991. mid = Math.imul(al9, bh8);
  81992. mid = (mid + Math.imul(ah9, bl8)) | 0;
  81993. hi = Math.imul(ah9, bh8);
  81994. lo = (lo + Math.imul(al8, bl9)) | 0;
  81995. mid = (mid + Math.imul(al8, bh9)) | 0;
  81996. mid = (mid + Math.imul(ah8, bl9)) | 0;
  81997. hi = (hi + Math.imul(ah8, bh9)) | 0;
  81998. var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  81999. c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
  82000. w17 &= 0x3ffffff;
  82001. /* k = 18 */
  82002. lo = Math.imul(al9, bl9);
  82003. mid = Math.imul(al9, bh9);
  82004. mid = (mid + Math.imul(ah9, bl9)) | 0;
  82005. hi = Math.imul(ah9, bh9);
  82006. var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
  82007. c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
  82008. w18 &= 0x3ffffff;
  82009. o[0] = w0;
  82010. o[1] = w1;
  82011. o[2] = w2;
  82012. o[3] = w3;
  82013. o[4] = w4;
  82014. o[5] = w5;
  82015. o[6] = w6;
  82016. o[7] = w7;
  82017. o[8] = w8;
  82018. o[9] = w9;
  82019. o[10] = w10;
  82020. o[11] = w11;
  82021. o[12] = w12;
  82022. o[13] = w13;
  82023. o[14] = w14;
  82024. o[15] = w15;
  82025. o[16] = w16;
  82026. o[17] = w17;
  82027. o[18] = w18;
  82028. if (c !== 0) {
  82029. o[19] = c;
  82030. out.length++;
  82031. }
  82032. return out;
  82033. };
  82034. // Polyfill comb
  82035. if (!Math.imul) {
  82036. comb10MulTo = smallMulTo;
  82037. }
  82038. function bigMulTo (self, num, out) {
  82039. out.negative = num.negative ^ self.negative;
  82040. out.length = self.length + num.length;
  82041. var carry = 0;
  82042. var hncarry = 0;
  82043. for (var k = 0; k < out.length - 1; k++) {
  82044. // Sum all words with the same `i + j = k` and accumulate `ncarry`,
  82045. // note that ncarry could be >= 0x3ffffff
  82046. var ncarry = hncarry;
  82047. hncarry = 0;
  82048. var rword = carry & 0x3ffffff;
  82049. var maxJ = Math.min(k, num.length - 1);
  82050. for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
  82051. var i = k - j;
  82052. var a = self.words[i] | 0;
  82053. var b = num.words[j] | 0;
  82054. var r = a * b;
  82055. var lo = r & 0x3ffffff;
  82056. ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
  82057. lo = (lo + rword) | 0;
  82058. rword = lo & 0x3ffffff;
  82059. ncarry = (ncarry + (lo >>> 26)) | 0;
  82060. hncarry += ncarry >>> 26;
  82061. ncarry &= 0x3ffffff;
  82062. }
  82063. out.words[k] = rword;
  82064. carry = ncarry;
  82065. ncarry = hncarry;
  82066. }
  82067. if (carry !== 0) {
  82068. out.words[k] = carry;
  82069. } else {
  82070. out.length--;
  82071. }
  82072. return out.strip();
  82073. }
  82074. function jumboMulTo (self, num, out) {
  82075. var fftm = new FFTM();
  82076. return fftm.mulp(self, num, out);
  82077. }
  82078. BN.prototype.mulTo = function mulTo (num, out) {
  82079. var res;
  82080. var len = this.length + num.length;
  82081. if (this.length === 10 && num.length === 10) {
  82082. res = comb10MulTo(this, num, out);
  82083. } else if (len < 63) {
  82084. res = smallMulTo(this, num, out);
  82085. } else if (len < 1024) {
  82086. res = bigMulTo(this, num, out);
  82087. } else {
  82088. res = jumboMulTo(this, num, out);
  82089. }
  82090. return res;
  82091. };
  82092. // Cooley-Tukey algorithm for FFT
  82093. // slightly revisited to rely on looping instead of recursion
  82094. function FFTM (x, y) {
  82095. this.x = x;
  82096. this.y = y;
  82097. }
  82098. FFTM.prototype.makeRBT = function makeRBT (N) {
  82099. var t = new Array(N);
  82100. var l = BN.prototype._countBits(N) - 1;
  82101. for (var i = 0; i < N; i++) {
  82102. t[i] = this.revBin(i, l, N);
  82103. }
  82104. return t;
  82105. };
  82106. // Returns binary-reversed representation of `x`
  82107. FFTM.prototype.revBin = function revBin (x, l, N) {
  82108. if (x === 0 || x === N - 1) return x;
  82109. var rb = 0;
  82110. for (var i = 0; i < l; i++) {
  82111. rb |= (x & 1) << (l - i - 1);
  82112. x >>= 1;
  82113. }
  82114. return rb;
  82115. };
  82116. // Performs "tweedling" phase, therefore 'emulating'
  82117. // behaviour of the recursive algorithm
  82118. FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
  82119. for (var i = 0; i < N; i++) {
  82120. rtws[i] = rws[rbt[i]];
  82121. itws[i] = iws[rbt[i]];
  82122. }
  82123. };
  82124. FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
  82125. this.permute(rbt, rws, iws, rtws, itws, N);
  82126. for (var s = 1; s < N; s <<= 1) {
  82127. var l = s << 1;
  82128. var rtwdf = Math.cos(2 * Math.PI / l);
  82129. var itwdf = Math.sin(2 * Math.PI / l);
  82130. for (var p = 0; p < N; p += l) {
  82131. var rtwdf_ = rtwdf;
  82132. var itwdf_ = itwdf;
  82133. for (var j = 0; j < s; j++) {
  82134. var re = rtws[p + j];
  82135. var ie = itws[p + j];
  82136. var ro = rtws[p + j + s];
  82137. var io = itws[p + j + s];
  82138. var rx = rtwdf_ * ro - itwdf_ * io;
  82139. io = rtwdf_ * io + itwdf_ * ro;
  82140. ro = rx;
  82141. rtws[p + j] = re + ro;
  82142. itws[p + j] = ie + io;
  82143. rtws[p + j + s] = re - ro;
  82144. itws[p + j + s] = ie - io;
  82145. /* jshint maxdepth : false */
  82146. if (j !== l) {
  82147. rx = rtwdf * rtwdf_ - itwdf * itwdf_;
  82148. itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
  82149. rtwdf_ = rx;
  82150. }
  82151. }
  82152. }
  82153. }
  82154. };
  82155. FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
  82156. var N = Math.max(m, n) | 1;
  82157. var odd = N & 1;
  82158. var i = 0;
  82159. for (N = N / 2 | 0; N; N = N >>> 1) {
  82160. i++;
  82161. }
  82162. return 1 << i + 1 + odd;
  82163. };
  82164. FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
  82165. if (N <= 1) return;
  82166. for (var i = 0; i < N / 2; i++) {
  82167. var t = rws[i];
  82168. rws[i] = rws[N - i - 1];
  82169. rws[N - i - 1] = t;
  82170. t = iws[i];
  82171. iws[i] = -iws[N - i - 1];
  82172. iws[N - i - 1] = -t;
  82173. }
  82174. };
  82175. FFTM.prototype.normalize13b = function normalize13b (ws, N) {
  82176. var carry = 0;
  82177. for (var i = 0; i < N / 2; i++) {
  82178. var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
  82179. Math.round(ws[2 * i] / N) +
  82180. carry;
  82181. ws[i] = w & 0x3ffffff;
  82182. if (w < 0x4000000) {
  82183. carry = 0;
  82184. } else {
  82185. carry = w / 0x4000000 | 0;
  82186. }
  82187. }
  82188. return ws;
  82189. };
  82190. FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
  82191. var carry = 0;
  82192. for (var i = 0; i < len; i++) {
  82193. carry = carry + (ws[i] | 0);
  82194. rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
  82195. rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
  82196. }
  82197. // Pad with zeroes
  82198. for (i = 2 * len; i < N; ++i) {
  82199. rws[i] = 0;
  82200. }
  82201. assert(carry === 0);
  82202. assert((carry & ~0x1fff) === 0);
  82203. };
  82204. FFTM.prototype.stub = function stub (N) {
  82205. var ph = new Array(N);
  82206. for (var i = 0; i < N; i++) {
  82207. ph[i] = 0;
  82208. }
  82209. return ph;
  82210. };
  82211. FFTM.prototype.mulp = function mulp (x, y, out) {
  82212. var N = 2 * this.guessLen13b(x.length, y.length);
  82213. var rbt = this.makeRBT(N);
  82214. var _ = this.stub(N);
  82215. var rws = new Array(N);
  82216. var rwst = new Array(N);
  82217. var iwst = new Array(N);
  82218. var nrws = new Array(N);
  82219. var nrwst = new Array(N);
  82220. var niwst = new Array(N);
  82221. var rmws = out.words;
  82222. rmws.length = N;
  82223. this.convert13b(x.words, x.length, rws, N);
  82224. this.convert13b(y.words, y.length, nrws, N);
  82225. this.transform(rws, _, rwst, iwst, N, rbt);
  82226. this.transform(nrws, _, nrwst, niwst, N, rbt);
  82227. for (var i = 0; i < N; i++) {
  82228. var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
  82229. iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
  82230. rwst[i] = rx;
  82231. }
  82232. this.conjugate(rwst, iwst, N);
  82233. this.transform(rwst, iwst, rmws, _, N, rbt);
  82234. this.conjugate(rmws, _, N);
  82235. this.normalize13b(rmws, N);
  82236. out.negative = x.negative ^ y.negative;
  82237. out.length = x.length + y.length;
  82238. return out.strip();
  82239. };
  82240. // Multiply `this` by `num`
  82241. BN.prototype.mul = function mul (num) {
  82242. var out = new BN(null);
  82243. out.words = new Array(this.length + num.length);
  82244. return this.mulTo(num, out);
  82245. };
  82246. // Multiply employing FFT
  82247. BN.prototype.mulf = function mulf (num) {
  82248. var out = new BN(null);
  82249. out.words = new Array(this.length + num.length);
  82250. return jumboMulTo(this, num, out);
  82251. };
  82252. // In-place Multiplication
  82253. BN.prototype.imul = function imul (num) {
  82254. return this.clone().mulTo(num, this);
  82255. };
  82256. BN.prototype.imuln = function imuln (num) {
  82257. assert(typeof num === 'number');
  82258. assert(num < 0x4000000);
  82259. // Carry
  82260. var carry = 0;
  82261. for (var i = 0; i < this.length; i++) {
  82262. var w = (this.words[i] | 0) * num;
  82263. var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
  82264. carry >>= 26;
  82265. carry += (w / 0x4000000) | 0;
  82266. // NOTE: lo is 27bit maximum
  82267. carry += lo >>> 26;
  82268. this.words[i] = lo & 0x3ffffff;
  82269. }
  82270. if (carry !== 0) {
  82271. this.words[i] = carry;
  82272. this.length++;
  82273. }
  82274. return this;
  82275. };
  82276. BN.prototype.muln = function muln (num) {
  82277. return this.clone().imuln(num);
  82278. };
  82279. // `this` * `this`
  82280. BN.prototype.sqr = function sqr () {
  82281. return this.mul(this);
  82282. };
  82283. // `this` * `this` in-place
  82284. BN.prototype.isqr = function isqr () {
  82285. return this.imul(this.clone());
  82286. };
  82287. // Math.pow(`this`, `num`)
  82288. BN.prototype.pow = function pow (num) {
  82289. var w = toBitArray(num);
  82290. if (w.length === 0) return new BN(1);
  82291. // Skip leading zeroes
  82292. var res = this;
  82293. for (var i = 0; i < w.length; i++, res = res.sqr()) {
  82294. if (w[i] !== 0) break;
  82295. }
  82296. if (++i < w.length) {
  82297. for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
  82298. if (w[i] === 0) continue;
  82299. res = res.mul(q);
  82300. }
  82301. }
  82302. return res;
  82303. };
  82304. // Shift-left in-place
  82305. BN.prototype.iushln = function iushln (bits) {
  82306. assert(typeof bits === 'number' && bits >= 0);
  82307. var r = bits % 26;
  82308. var s = (bits - r) / 26;
  82309. var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
  82310. var i;
  82311. if (r !== 0) {
  82312. var carry = 0;
  82313. for (i = 0; i < this.length; i++) {
  82314. var newCarry = this.words[i] & carryMask;
  82315. var c = ((this.words[i] | 0) - newCarry) << r;
  82316. this.words[i] = c | carry;
  82317. carry = newCarry >>> (26 - r);
  82318. }
  82319. if (carry) {
  82320. this.words[i] = carry;
  82321. this.length++;
  82322. }
  82323. }
  82324. if (s !== 0) {
  82325. for (i = this.length - 1; i >= 0; i--) {
  82326. this.words[i + s] = this.words[i];
  82327. }
  82328. for (i = 0; i < s; i++) {
  82329. this.words[i] = 0;
  82330. }
  82331. this.length += s;
  82332. }
  82333. return this.strip();
  82334. };
  82335. BN.prototype.ishln = function ishln (bits) {
  82336. // TODO(indutny): implement me
  82337. assert(this.negative === 0);
  82338. return this.iushln(bits);
  82339. };
  82340. // Shift-right in-place
  82341. // NOTE: `hint` is a lowest bit before trailing zeroes
  82342. // NOTE: if `extended` is present - it will be filled with destroyed bits
  82343. BN.prototype.iushrn = function iushrn (bits, hint, extended) {
  82344. assert(typeof bits === 'number' && bits >= 0);
  82345. var h;
  82346. if (hint) {
  82347. h = (hint - (hint % 26)) / 26;
  82348. } else {
  82349. h = 0;
  82350. }
  82351. var r = bits % 26;
  82352. var s = Math.min((bits - r) / 26, this.length);
  82353. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  82354. var maskedWords = extended;
  82355. h -= s;
  82356. h = Math.max(0, h);
  82357. // Extended mode, copy masked part
  82358. if (maskedWords) {
  82359. for (var i = 0; i < s; i++) {
  82360. maskedWords.words[i] = this.words[i];
  82361. }
  82362. maskedWords.length = s;
  82363. }
  82364. if (s === 0) {
  82365. // No-op, we should not move anything at all
  82366. } else if (this.length > s) {
  82367. this.length -= s;
  82368. for (i = 0; i < this.length; i++) {
  82369. this.words[i] = this.words[i + s];
  82370. }
  82371. } else {
  82372. this.words[0] = 0;
  82373. this.length = 1;
  82374. }
  82375. var carry = 0;
  82376. for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
  82377. var word = this.words[i] | 0;
  82378. this.words[i] = (carry << (26 - r)) | (word >>> r);
  82379. carry = word & mask;
  82380. }
  82381. // Push carried bits as a mask
  82382. if (maskedWords && carry !== 0) {
  82383. maskedWords.words[maskedWords.length++] = carry;
  82384. }
  82385. if (this.length === 0) {
  82386. this.words[0] = 0;
  82387. this.length = 1;
  82388. }
  82389. return this.strip();
  82390. };
  82391. BN.prototype.ishrn = function ishrn (bits, hint, extended) {
  82392. // TODO(indutny): implement me
  82393. assert(this.negative === 0);
  82394. return this.iushrn(bits, hint, extended);
  82395. };
  82396. // Shift-left
  82397. BN.prototype.shln = function shln (bits) {
  82398. return this.clone().ishln(bits);
  82399. };
  82400. BN.prototype.ushln = function ushln (bits) {
  82401. return this.clone().iushln(bits);
  82402. };
  82403. // Shift-right
  82404. BN.prototype.shrn = function shrn (bits) {
  82405. return this.clone().ishrn(bits);
  82406. };
  82407. BN.prototype.ushrn = function ushrn (bits) {
  82408. return this.clone().iushrn(bits);
  82409. };
  82410. // Test if n bit is set
  82411. BN.prototype.testn = function testn (bit) {
  82412. assert(typeof bit === 'number' && bit >= 0);
  82413. var r = bit % 26;
  82414. var s = (bit - r) / 26;
  82415. var q = 1 << r;
  82416. // Fast case: bit is much higher than all existing words
  82417. if (this.length <= s) return false;
  82418. // Check bit and return
  82419. var w = this.words[s];
  82420. return !!(w & q);
  82421. };
  82422. // Return only lowers bits of number (in-place)
  82423. BN.prototype.imaskn = function imaskn (bits) {
  82424. assert(typeof bits === 'number' && bits >= 0);
  82425. var r = bits % 26;
  82426. var s = (bits - r) / 26;
  82427. assert(this.negative === 0, 'imaskn works only with positive numbers');
  82428. if (this.length <= s) {
  82429. return this;
  82430. }
  82431. if (r !== 0) {
  82432. s++;
  82433. }
  82434. this.length = Math.min(s, this.length);
  82435. if (r !== 0) {
  82436. var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
  82437. this.words[this.length - 1] &= mask;
  82438. }
  82439. return this.strip();
  82440. };
  82441. // Return only lowers bits of number
  82442. BN.prototype.maskn = function maskn (bits) {
  82443. return this.clone().imaskn(bits);
  82444. };
  82445. // Add plain number `num` to `this`
  82446. BN.prototype.iaddn = function iaddn (num) {
  82447. assert(typeof num === 'number');
  82448. assert(num < 0x4000000);
  82449. if (num < 0) return this.isubn(-num);
  82450. // Possible sign change
  82451. if (this.negative !== 0) {
  82452. if (this.length === 1 && (this.words[0] | 0) < num) {
  82453. this.words[0] = num - (this.words[0] | 0);
  82454. this.negative = 0;
  82455. return this;
  82456. }
  82457. this.negative = 0;
  82458. this.isubn(num);
  82459. this.negative = 1;
  82460. return this;
  82461. }
  82462. // Add without checks
  82463. return this._iaddn(num);
  82464. };
  82465. BN.prototype._iaddn = function _iaddn (num) {
  82466. this.words[0] += num;
  82467. // Carry
  82468. for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
  82469. this.words[i] -= 0x4000000;
  82470. if (i === this.length - 1) {
  82471. this.words[i + 1] = 1;
  82472. } else {
  82473. this.words[i + 1]++;
  82474. }
  82475. }
  82476. this.length = Math.max(this.length, i + 1);
  82477. return this;
  82478. };
  82479. // Subtract plain number `num` from `this`
  82480. BN.prototype.isubn = function isubn (num) {
  82481. assert(typeof num === 'number');
  82482. assert(num < 0x4000000);
  82483. if (num < 0) return this.iaddn(-num);
  82484. if (this.negative !== 0) {
  82485. this.negative = 0;
  82486. this.iaddn(num);
  82487. this.negative = 1;
  82488. return this;
  82489. }
  82490. this.words[0] -= num;
  82491. if (this.length === 1 && this.words[0] < 0) {
  82492. this.words[0] = -this.words[0];
  82493. this.negative = 1;
  82494. } else {
  82495. // Carry
  82496. for (var i = 0; i < this.length && this.words[i] < 0; i++) {
  82497. this.words[i] += 0x4000000;
  82498. this.words[i + 1] -= 1;
  82499. }
  82500. }
  82501. return this.strip();
  82502. };
  82503. BN.prototype.addn = function addn (num) {
  82504. return this.clone().iaddn(num);
  82505. };
  82506. BN.prototype.subn = function subn (num) {
  82507. return this.clone().isubn(num);
  82508. };
  82509. BN.prototype.iabs = function iabs () {
  82510. this.negative = 0;
  82511. return this;
  82512. };
  82513. BN.prototype.abs = function abs () {
  82514. return this.clone().iabs();
  82515. };
  82516. BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
  82517. var len = num.length + shift;
  82518. var i;
  82519. this._expand(len);
  82520. var w;
  82521. var carry = 0;
  82522. for (i = 0; i < num.length; i++) {
  82523. w = (this.words[i + shift] | 0) + carry;
  82524. var right = (num.words[i] | 0) * mul;
  82525. w -= right & 0x3ffffff;
  82526. carry = (w >> 26) - ((right / 0x4000000) | 0);
  82527. this.words[i + shift] = w & 0x3ffffff;
  82528. }
  82529. for (; i < this.length - shift; i++) {
  82530. w = (this.words[i + shift] | 0) + carry;
  82531. carry = w >> 26;
  82532. this.words[i + shift] = w & 0x3ffffff;
  82533. }
  82534. if (carry === 0) return this.strip();
  82535. // Subtraction overflow
  82536. assert(carry === -1);
  82537. carry = 0;
  82538. for (i = 0; i < this.length; i++) {
  82539. w = -(this.words[i] | 0) + carry;
  82540. carry = w >> 26;
  82541. this.words[i] = w & 0x3ffffff;
  82542. }
  82543. this.negative = 1;
  82544. return this.strip();
  82545. };
  82546. BN.prototype._wordDiv = function _wordDiv (num, mode) {
  82547. var shift = this.length - num.length;
  82548. var a = this.clone();
  82549. var b = num;
  82550. // Normalize
  82551. var bhi = b.words[b.length - 1] | 0;
  82552. var bhiBits = this._countBits(bhi);
  82553. shift = 26 - bhiBits;
  82554. if (shift !== 0) {
  82555. b = b.ushln(shift);
  82556. a.iushln(shift);
  82557. bhi = b.words[b.length - 1] | 0;
  82558. }
  82559. // Initialize quotient
  82560. var m = a.length - b.length;
  82561. var q;
  82562. if (mode !== 'mod') {
  82563. q = new BN(null);
  82564. q.length = m + 1;
  82565. q.words = new Array(q.length);
  82566. for (var i = 0; i < q.length; i++) {
  82567. q.words[i] = 0;
  82568. }
  82569. }
  82570. var diff = a.clone()._ishlnsubmul(b, 1, m);
  82571. if (diff.negative === 0) {
  82572. a = diff;
  82573. if (q) {
  82574. q.words[m] = 1;
  82575. }
  82576. }
  82577. for (var j = m - 1; j >= 0; j--) {
  82578. var qj = (a.words[b.length + j] | 0) * 0x4000000 +
  82579. (a.words[b.length + j - 1] | 0);
  82580. // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
  82581. // (0x7ffffff)
  82582. qj = Math.min((qj / bhi) | 0, 0x3ffffff);
  82583. a._ishlnsubmul(b, qj, j);
  82584. while (a.negative !== 0) {
  82585. qj--;
  82586. a.negative = 0;
  82587. a._ishlnsubmul(b, 1, j);
  82588. if (!a.isZero()) {
  82589. a.negative ^= 1;
  82590. }
  82591. }
  82592. if (q) {
  82593. q.words[j] = qj;
  82594. }
  82595. }
  82596. if (q) {
  82597. q.strip();
  82598. }
  82599. a.strip();
  82600. // Denormalize
  82601. if (mode !== 'div' && shift !== 0) {
  82602. a.iushrn(shift);
  82603. }
  82604. return {
  82605. div: q || null,
  82606. mod: a
  82607. };
  82608. };
  82609. // NOTE: 1) `mode` can be set to `mod` to request mod only,
  82610. // to `div` to request div only, or be absent to
  82611. // request both div & mod
  82612. // 2) `positive` is true if unsigned mod is requested
  82613. BN.prototype.divmod = function divmod (num, mode, positive) {
  82614. assert(!num.isZero());
  82615. if (this.isZero()) {
  82616. return {
  82617. div: new BN(0),
  82618. mod: new BN(0)
  82619. };
  82620. }
  82621. var div, mod, res;
  82622. if (this.negative !== 0 && num.negative === 0) {
  82623. res = this.neg().divmod(num, mode);
  82624. if (mode !== 'mod') {
  82625. div = res.div.neg();
  82626. }
  82627. if (mode !== 'div') {
  82628. mod = res.mod.neg();
  82629. if (positive && mod.negative !== 0) {
  82630. mod.iadd(num);
  82631. }
  82632. }
  82633. return {
  82634. div: div,
  82635. mod: mod
  82636. };
  82637. }
  82638. if (this.negative === 0 && num.negative !== 0) {
  82639. res = this.divmod(num.neg(), mode);
  82640. if (mode !== 'mod') {
  82641. div = res.div.neg();
  82642. }
  82643. return {
  82644. div: div,
  82645. mod: res.mod
  82646. };
  82647. }
  82648. if ((this.negative & num.negative) !== 0) {
  82649. res = this.neg().divmod(num.neg(), mode);
  82650. if (mode !== 'div') {
  82651. mod = res.mod.neg();
  82652. if (positive && mod.negative !== 0) {
  82653. mod.isub(num);
  82654. }
  82655. }
  82656. return {
  82657. div: res.div,
  82658. mod: mod
  82659. };
  82660. }
  82661. // Both numbers are positive at this point
  82662. // Strip both numbers to approximate shift value
  82663. if (num.length > this.length || this.cmp(num) < 0) {
  82664. return {
  82665. div: new BN(0),
  82666. mod: this
  82667. };
  82668. }
  82669. // Very short reduction
  82670. if (num.length === 1) {
  82671. if (mode === 'div') {
  82672. return {
  82673. div: this.divn(num.words[0]),
  82674. mod: null
  82675. };
  82676. }
  82677. if (mode === 'mod') {
  82678. return {
  82679. div: null,
  82680. mod: new BN(this.modn(num.words[0]))
  82681. };
  82682. }
  82683. return {
  82684. div: this.divn(num.words[0]),
  82685. mod: new BN(this.modn(num.words[0]))
  82686. };
  82687. }
  82688. return this._wordDiv(num, mode);
  82689. };
  82690. // Find `this` / `num`
  82691. BN.prototype.div = function div (num) {
  82692. return this.divmod(num, 'div', false).div;
  82693. };
  82694. // Find `this` % `num`
  82695. BN.prototype.mod = function mod (num) {
  82696. return this.divmod(num, 'mod', false).mod;
  82697. };
  82698. BN.prototype.umod = function umod (num) {
  82699. return this.divmod(num, 'mod', true).mod;
  82700. };
  82701. // Find Round(`this` / `num`)
  82702. BN.prototype.divRound = function divRound (num) {
  82703. var dm = this.divmod(num);
  82704. // Fast case - exact division
  82705. if (dm.mod.isZero()) return dm.div;
  82706. var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
  82707. var half = num.ushrn(1);
  82708. var r2 = num.andln(1);
  82709. var cmp = mod.cmp(half);
  82710. // Round down
  82711. if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
  82712. // Round up
  82713. return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
  82714. };
  82715. BN.prototype.modn = function modn (num) {
  82716. assert(num <= 0x3ffffff);
  82717. var p = (1 << 26) % num;
  82718. var acc = 0;
  82719. for (var i = this.length - 1; i >= 0; i--) {
  82720. acc = (p * acc + (this.words[i] | 0)) % num;
  82721. }
  82722. return acc;
  82723. };
  82724. // In-place division by number
  82725. BN.prototype.idivn = function idivn (num) {
  82726. assert(num <= 0x3ffffff);
  82727. var carry = 0;
  82728. for (var i = this.length - 1; i >= 0; i--) {
  82729. var w = (this.words[i] | 0) + carry * 0x4000000;
  82730. this.words[i] = (w / num) | 0;
  82731. carry = w % num;
  82732. }
  82733. return this.strip();
  82734. };
  82735. BN.prototype.divn = function divn (num) {
  82736. return this.clone().idivn(num);
  82737. };
  82738. BN.prototype.egcd = function egcd (p) {
  82739. assert(p.negative === 0);
  82740. assert(!p.isZero());
  82741. var x = this;
  82742. var y = p.clone();
  82743. if (x.negative !== 0) {
  82744. x = x.umod(p);
  82745. } else {
  82746. x = x.clone();
  82747. }
  82748. // A * x + B * y = x
  82749. var A = new BN(1);
  82750. var B = new BN(0);
  82751. // C * x + D * y = y
  82752. var C = new BN(0);
  82753. var D = new BN(1);
  82754. var g = 0;
  82755. while (x.isEven() && y.isEven()) {
  82756. x.iushrn(1);
  82757. y.iushrn(1);
  82758. ++g;
  82759. }
  82760. var yp = y.clone();
  82761. var xp = x.clone();
  82762. while (!x.isZero()) {
  82763. for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  82764. if (i > 0) {
  82765. x.iushrn(i);
  82766. while (i-- > 0) {
  82767. if (A.isOdd() || B.isOdd()) {
  82768. A.iadd(yp);
  82769. B.isub(xp);
  82770. }
  82771. A.iushrn(1);
  82772. B.iushrn(1);
  82773. }
  82774. }
  82775. for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  82776. if (j > 0) {
  82777. y.iushrn(j);
  82778. while (j-- > 0) {
  82779. if (C.isOdd() || D.isOdd()) {
  82780. C.iadd(yp);
  82781. D.isub(xp);
  82782. }
  82783. C.iushrn(1);
  82784. D.iushrn(1);
  82785. }
  82786. }
  82787. if (x.cmp(y) >= 0) {
  82788. x.isub(y);
  82789. A.isub(C);
  82790. B.isub(D);
  82791. } else {
  82792. y.isub(x);
  82793. C.isub(A);
  82794. D.isub(B);
  82795. }
  82796. }
  82797. return {
  82798. a: C,
  82799. b: D,
  82800. gcd: y.iushln(g)
  82801. };
  82802. };
  82803. // This is reduced incarnation of the binary EEA
  82804. // above, designated to invert members of the
  82805. // _prime_ fields F(p) at a maximal speed
  82806. BN.prototype._invmp = function _invmp (p) {
  82807. assert(p.negative === 0);
  82808. assert(!p.isZero());
  82809. var a = this;
  82810. var b = p.clone();
  82811. if (a.negative !== 0) {
  82812. a = a.umod(p);
  82813. } else {
  82814. a = a.clone();
  82815. }
  82816. var x1 = new BN(1);
  82817. var x2 = new BN(0);
  82818. var delta = b.clone();
  82819. while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
  82820. for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
  82821. if (i > 0) {
  82822. a.iushrn(i);
  82823. while (i-- > 0) {
  82824. if (x1.isOdd()) {
  82825. x1.iadd(delta);
  82826. }
  82827. x1.iushrn(1);
  82828. }
  82829. }
  82830. for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
  82831. if (j > 0) {
  82832. b.iushrn(j);
  82833. while (j-- > 0) {
  82834. if (x2.isOdd()) {
  82835. x2.iadd(delta);
  82836. }
  82837. x2.iushrn(1);
  82838. }
  82839. }
  82840. if (a.cmp(b) >= 0) {
  82841. a.isub(b);
  82842. x1.isub(x2);
  82843. } else {
  82844. b.isub(a);
  82845. x2.isub(x1);
  82846. }
  82847. }
  82848. var res;
  82849. if (a.cmpn(1) === 0) {
  82850. res = x1;
  82851. } else {
  82852. res = x2;
  82853. }
  82854. if (res.cmpn(0) < 0) {
  82855. res.iadd(p);
  82856. }
  82857. return res;
  82858. };
  82859. BN.prototype.gcd = function gcd (num) {
  82860. if (this.isZero()) return num.abs();
  82861. if (num.isZero()) return this.abs();
  82862. var a = this.clone();
  82863. var b = num.clone();
  82864. a.negative = 0;
  82865. b.negative = 0;
  82866. // Remove common factor of two
  82867. for (var shift = 0; a.isEven() && b.isEven(); shift++) {
  82868. a.iushrn(1);
  82869. b.iushrn(1);
  82870. }
  82871. do {
  82872. while (a.isEven()) {
  82873. a.iushrn(1);
  82874. }
  82875. while (b.isEven()) {
  82876. b.iushrn(1);
  82877. }
  82878. var r = a.cmp(b);
  82879. if (r < 0) {
  82880. // Swap `a` and `b` to make `a` always bigger than `b`
  82881. var t = a;
  82882. a = b;
  82883. b = t;
  82884. } else if (r === 0 || b.cmpn(1) === 0) {
  82885. break;
  82886. }
  82887. a.isub(b);
  82888. } while (true);
  82889. return b.iushln(shift);
  82890. };
  82891. // Invert number in the field F(num)
  82892. BN.prototype.invm = function invm (num) {
  82893. return this.egcd(num).a.umod(num);
  82894. };
  82895. BN.prototype.isEven = function isEven () {
  82896. return (this.words[0] & 1) === 0;
  82897. };
  82898. BN.prototype.isOdd = function isOdd () {
  82899. return (this.words[0] & 1) === 1;
  82900. };
  82901. // And first word and num
  82902. BN.prototype.andln = function andln (num) {
  82903. return this.words[0] & num;
  82904. };
  82905. // Increment at the bit position in-line
  82906. BN.prototype.bincn = function bincn (bit) {
  82907. assert(typeof bit === 'number');
  82908. var r = bit % 26;
  82909. var s = (bit - r) / 26;
  82910. var q = 1 << r;
  82911. // Fast case: bit is much higher than all existing words
  82912. if (this.length <= s) {
  82913. this._expand(s + 1);
  82914. this.words[s] |= q;
  82915. return this;
  82916. }
  82917. // Add bit and propagate, if needed
  82918. var carry = q;
  82919. for (var i = s; carry !== 0 && i < this.length; i++) {
  82920. var w = this.words[i] | 0;
  82921. w += carry;
  82922. carry = w >>> 26;
  82923. w &= 0x3ffffff;
  82924. this.words[i] = w;
  82925. }
  82926. if (carry !== 0) {
  82927. this.words[i] = carry;
  82928. this.length++;
  82929. }
  82930. return this;
  82931. };
  82932. BN.prototype.isZero = function isZero () {
  82933. return this.length === 1 && this.words[0] === 0;
  82934. };
  82935. BN.prototype.cmpn = function cmpn (num) {
  82936. var negative = num < 0;
  82937. if (this.negative !== 0 && !negative) return -1;
  82938. if (this.negative === 0 && negative) return 1;
  82939. this.strip();
  82940. var res;
  82941. if (this.length > 1) {
  82942. res = 1;
  82943. } else {
  82944. if (negative) {
  82945. num = -num;
  82946. }
  82947. assert(num <= 0x3ffffff, 'Number is too big');
  82948. var w = this.words[0] | 0;
  82949. res = w === num ? 0 : w < num ? -1 : 1;
  82950. }
  82951. if (this.negative !== 0) return -res | 0;
  82952. return res;
  82953. };
  82954. // Compare two numbers and return:
  82955. // 1 - if `this` > `num`
  82956. // 0 - if `this` == `num`
  82957. // -1 - if `this` < `num`
  82958. BN.prototype.cmp = function cmp (num) {
  82959. if (this.negative !== 0 && num.negative === 0) return -1;
  82960. if (this.negative === 0 && num.negative !== 0) return 1;
  82961. var res = this.ucmp(num);
  82962. if (this.negative !== 0) return -res | 0;
  82963. return res;
  82964. };
  82965. // Unsigned comparison
  82966. BN.prototype.ucmp = function ucmp (num) {
  82967. // At this point both numbers have the same sign
  82968. if (this.length > num.length) return 1;
  82969. if (this.length < num.length) return -1;
  82970. var res = 0;
  82971. for (var i = this.length - 1; i >= 0; i--) {
  82972. var a = this.words[i] | 0;
  82973. var b = num.words[i] | 0;
  82974. if (a === b) continue;
  82975. if (a < b) {
  82976. res = -1;
  82977. } else if (a > b) {
  82978. res = 1;
  82979. }
  82980. break;
  82981. }
  82982. return res;
  82983. };
  82984. BN.prototype.gtn = function gtn (num) {
  82985. return this.cmpn(num) === 1;
  82986. };
  82987. BN.prototype.gt = function gt (num) {
  82988. return this.cmp(num) === 1;
  82989. };
  82990. BN.prototype.gten = function gten (num) {
  82991. return this.cmpn(num) >= 0;
  82992. };
  82993. BN.prototype.gte = function gte (num) {
  82994. return this.cmp(num) >= 0;
  82995. };
  82996. BN.prototype.ltn = function ltn (num) {
  82997. return this.cmpn(num) === -1;
  82998. };
  82999. BN.prototype.lt = function lt (num) {
  83000. return this.cmp(num) === -1;
  83001. };
  83002. BN.prototype.lten = function lten (num) {
  83003. return this.cmpn(num) <= 0;
  83004. };
  83005. BN.prototype.lte = function lte (num) {
  83006. return this.cmp(num) <= 0;
  83007. };
  83008. BN.prototype.eqn = function eqn (num) {
  83009. return this.cmpn(num) === 0;
  83010. };
  83011. BN.prototype.eq = function eq (num) {
  83012. return this.cmp(num) === 0;
  83013. };
  83014. //
  83015. // A reduce context, could be using montgomery or something better, depending
  83016. // on the `m` itself.
  83017. //
  83018. BN.red = function red (num) {
  83019. return new Red(num);
  83020. };
  83021. BN.prototype.toRed = function toRed (ctx) {
  83022. assert(!this.red, 'Already a number in reduction context');
  83023. assert(this.negative === 0, 'red works only with positives');
  83024. return ctx.convertTo(this)._forceRed(ctx);
  83025. };
  83026. BN.prototype.fromRed = function fromRed () {
  83027. assert(this.red, 'fromRed works only with numbers in reduction context');
  83028. return this.red.convertFrom(this);
  83029. };
  83030. BN.prototype._forceRed = function _forceRed (ctx) {
  83031. this.red = ctx;
  83032. return this;
  83033. };
  83034. BN.prototype.forceRed = function forceRed (ctx) {
  83035. assert(!this.red, 'Already a number in reduction context');
  83036. return this._forceRed(ctx);
  83037. };
  83038. BN.prototype.redAdd = function redAdd (num) {
  83039. assert(this.red, 'redAdd works only with red numbers');
  83040. return this.red.add(this, num);
  83041. };
  83042. BN.prototype.redIAdd = function redIAdd (num) {
  83043. assert(this.red, 'redIAdd works only with red numbers');
  83044. return this.red.iadd(this, num);
  83045. };
  83046. BN.prototype.redSub = function redSub (num) {
  83047. assert(this.red, 'redSub works only with red numbers');
  83048. return this.red.sub(this, num);
  83049. };
  83050. BN.prototype.redISub = function redISub (num) {
  83051. assert(this.red, 'redISub works only with red numbers');
  83052. return this.red.isub(this, num);
  83053. };
  83054. BN.prototype.redShl = function redShl (num) {
  83055. assert(this.red, 'redShl works only with red numbers');
  83056. return this.red.shl(this, num);
  83057. };
  83058. BN.prototype.redMul = function redMul (num) {
  83059. assert(this.red, 'redMul works only with red numbers');
  83060. this.red._verify2(this, num);
  83061. return this.red.mul(this, num);
  83062. };
  83063. BN.prototype.redIMul = function redIMul (num) {
  83064. assert(this.red, 'redMul works only with red numbers');
  83065. this.red._verify2(this, num);
  83066. return this.red.imul(this, num);
  83067. };
  83068. BN.prototype.redSqr = function redSqr () {
  83069. assert(this.red, 'redSqr works only with red numbers');
  83070. this.red._verify1(this);
  83071. return this.red.sqr(this);
  83072. };
  83073. BN.prototype.redISqr = function redISqr () {
  83074. assert(this.red, 'redISqr works only with red numbers');
  83075. this.red._verify1(this);
  83076. return this.red.isqr(this);
  83077. };
  83078. // Square root over p
  83079. BN.prototype.redSqrt = function redSqrt () {
  83080. assert(this.red, 'redSqrt works only with red numbers');
  83081. this.red._verify1(this);
  83082. return this.red.sqrt(this);
  83083. };
  83084. BN.prototype.redInvm = function redInvm () {
  83085. assert(this.red, 'redInvm works only with red numbers');
  83086. this.red._verify1(this);
  83087. return this.red.invm(this);
  83088. };
  83089. // Return negative clone of `this` % `red modulo`
  83090. BN.prototype.redNeg = function redNeg () {
  83091. assert(this.red, 'redNeg works only with red numbers');
  83092. this.red._verify1(this);
  83093. return this.red.neg(this);
  83094. };
  83095. BN.prototype.redPow = function redPow (num) {
  83096. assert(this.red && !num.red, 'redPow(normalNum)');
  83097. this.red._verify1(this);
  83098. return this.red.pow(this, num);
  83099. };
  83100. // Prime numbers with efficient reduction
  83101. var primes = {
  83102. k256: null,
  83103. p224: null,
  83104. p192: null,
  83105. p25519: null
  83106. };
  83107. // Pseudo-Mersenne prime
  83108. function MPrime (name, p) {
  83109. // P = 2 ^ N - K
  83110. this.name = name;
  83111. this.p = new BN(p, 16);
  83112. this.n = this.p.bitLength();
  83113. this.k = new BN(1).iushln(this.n).isub(this.p);
  83114. this.tmp = this._tmp();
  83115. }
  83116. MPrime.prototype._tmp = function _tmp () {
  83117. var tmp = new BN(null);
  83118. tmp.words = new Array(Math.ceil(this.n / 13));
  83119. return tmp;
  83120. };
  83121. MPrime.prototype.ireduce = function ireduce (num) {
  83122. // Assumes that `num` is less than `P^2`
  83123. // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
  83124. var r = num;
  83125. var rlen;
  83126. do {
  83127. this.split(r, this.tmp);
  83128. r = this.imulK(r);
  83129. r = r.iadd(this.tmp);
  83130. rlen = r.bitLength();
  83131. } while (rlen > this.n);
  83132. var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
  83133. if (cmp === 0) {
  83134. r.words[0] = 0;
  83135. r.length = 1;
  83136. } else if (cmp > 0) {
  83137. r.isub(this.p);
  83138. } else {
  83139. if (r.strip !== undefined) {
  83140. // r is BN v4 instance
  83141. r.strip();
  83142. } else {
  83143. // r is BN v5 instance
  83144. r._strip();
  83145. }
  83146. }
  83147. return r;
  83148. };
  83149. MPrime.prototype.split = function split (input, out) {
  83150. input.iushrn(this.n, 0, out);
  83151. };
  83152. MPrime.prototype.imulK = function imulK (num) {
  83153. return num.imul(this.k);
  83154. };
  83155. function K256 () {
  83156. MPrime.call(
  83157. this,
  83158. 'k256',
  83159. 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
  83160. }
  83161. inherits(K256, MPrime);
  83162. K256.prototype.split = function split (input, output) {
  83163. // 256 = 9 * 26 + 22
  83164. var mask = 0x3fffff;
  83165. var outLen = Math.min(input.length, 9);
  83166. for (var i = 0; i < outLen; i++) {
  83167. output.words[i] = input.words[i];
  83168. }
  83169. output.length = outLen;
  83170. if (input.length <= 9) {
  83171. input.words[0] = 0;
  83172. input.length = 1;
  83173. return;
  83174. }
  83175. // Shift by 9 limbs
  83176. var prev = input.words[9];
  83177. output.words[output.length++] = prev & mask;
  83178. for (i = 10; i < input.length; i++) {
  83179. var next = input.words[i] | 0;
  83180. input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
  83181. prev = next;
  83182. }
  83183. prev >>>= 22;
  83184. input.words[i - 10] = prev;
  83185. if (prev === 0 && input.length > 10) {
  83186. input.length -= 10;
  83187. } else {
  83188. input.length -= 9;
  83189. }
  83190. };
  83191. K256.prototype.imulK = function imulK (num) {
  83192. // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
  83193. num.words[num.length] = 0;
  83194. num.words[num.length + 1] = 0;
  83195. num.length += 2;
  83196. // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
  83197. var lo = 0;
  83198. for (var i = 0; i < num.length; i++) {
  83199. var w = num.words[i] | 0;
  83200. lo += w * 0x3d1;
  83201. num.words[i] = lo & 0x3ffffff;
  83202. lo = w * 0x40 + ((lo / 0x4000000) | 0);
  83203. }
  83204. // Fast length reduction
  83205. if (num.words[num.length - 1] === 0) {
  83206. num.length--;
  83207. if (num.words[num.length - 1] === 0) {
  83208. num.length--;
  83209. }
  83210. }
  83211. return num;
  83212. };
  83213. function P224 () {
  83214. MPrime.call(
  83215. this,
  83216. 'p224',
  83217. 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
  83218. }
  83219. inherits(P224, MPrime);
  83220. function P192 () {
  83221. MPrime.call(
  83222. this,
  83223. 'p192',
  83224. 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
  83225. }
  83226. inherits(P192, MPrime);
  83227. function P25519 () {
  83228. // 2 ^ 255 - 19
  83229. MPrime.call(
  83230. this,
  83231. '25519',
  83232. '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
  83233. }
  83234. inherits(P25519, MPrime);
  83235. P25519.prototype.imulK = function imulK (num) {
  83236. // K = 0x13
  83237. var carry = 0;
  83238. for (var i = 0; i < num.length; i++) {
  83239. var hi = (num.words[i] | 0) * 0x13 + carry;
  83240. var lo = hi & 0x3ffffff;
  83241. hi >>>= 26;
  83242. num.words[i] = lo;
  83243. carry = hi;
  83244. }
  83245. if (carry !== 0) {
  83246. num.words[num.length++] = carry;
  83247. }
  83248. return num;
  83249. };
  83250. // Exported mostly for testing purposes, use plain name instead
  83251. BN._prime = function prime (name) {
  83252. // Cached version of prime
  83253. if (primes[name]) return primes[name];
  83254. var prime;
  83255. if (name === 'k256') {
  83256. prime = new K256();
  83257. } else if (name === 'p224') {
  83258. prime = new P224();
  83259. } else if (name === 'p192') {
  83260. prime = new P192();
  83261. } else if (name === 'p25519') {
  83262. prime = new P25519();
  83263. } else {
  83264. throw new Error('Unknown prime ' + name);
  83265. }
  83266. primes[name] = prime;
  83267. return prime;
  83268. };
  83269. //
  83270. // Base reduction engine
  83271. //
  83272. function Red (m) {
  83273. if (typeof m === 'string') {
  83274. var prime = BN._prime(m);
  83275. this.m = prime.p;
  83276. this.prime = prime;
  83277. } else {
  83278. assert(m.gtn(1), 'modulus must be greater than 1');
  83279. this.m = m;
  83280. this.prime = null;
  83281. }
  83282. }
  83283. Red.prototype._verify1 = function _verify1 (a) {
  83284. assert(a.negative === 0, 'red works only with positives');
  83285. assert(a.red, 'red works only with red numbers');
  83286. };
  83287. Red.prototype._verify2 = function _verify2 (a, b) {
  83288. assert((a.negative | b.negative) === 0, 'red works only with positives');
  83289. assert(a.red && a.red === b.red,
  83290. 'red works only with red numbers');
  83291. };
  83292. Red.prototype.imod = function imod (a) {
  83293. if (this.prime) return this.prime.ireduce(a)._forceRed(this);
  83294. return a.umod(this.m)._forceRed(this);
  83295. };
  83296. Red.prototype.neg = function neg (a) {
  83297. if (a.isZero()) {
  83298. return a.clone();
  83299. }
  83300. return this.m.sub(a)._forceRed(this);
  83301. };
  83302. Red.prototype.add = function add (a, b) {
  83303. this._verify2(a, b);
  83304. var res = a.add(b);
  83305. if (res.cmp(this.m) >= 0) {
  83306. res.isub(this.m);
  83307. }
  83308. return res._forceRed(this);
  83309. };
  83310. Red.prototype.iadd = function iadd (a, b) {
  83311. this._verify2(a, b);
  83312. var res = a.iadd(b);
  83313. if (res.cmp(this.m) >= 0) {
  83314. res.isub(this.m);
  83315. }
  83316. return res;
  83317. };
  83318. Red.prototype.sub = function sub (a, b) {
  83319. this._verify2(a, b);
  83320. var res = a.sub(b);
  83321. if (res.cmpn(0) < 0) {
  83322. res.iadd(this.m);
  83323. }
  83324. return res._forceRed(this);
  83325. };
  83326. Red.prototype.isub = function isub (a, b) {
  83327. this._verify2(a, b);
  83328. var res = a.isub(b);
  83329. if (res.cmpn(0) < 0) {
  83330. res.iadd(this.m);
  83331. }
  83332. return res;
  83333. };
  83334. Red.prototype.shl = function shl (a, num) {
  83335. this._verify1(a);
  83336. return this.imod(a.ushln(num));
  83337. };
  83338. Red.prototype.imul = function imul (a, b) {
  83339. this._verify2(a, b);
  83340. return this.imod(a.imul(b));
  83341. };
  83342. Red.prototype.mul = function mul (a, b) {
  83343. this._verify2(a, b);
  83344. return this.imod(a.mul(b));
  83345. };
  83346. Red.prototype.isqr = function isqr (a) {
  83347. return this.imul(a, a.clone());
  83348. };
  83349. Red.prototype.sqr = function sqr (a) {
  83350. return this.mul(a, a);
  83351. };
  83352. Red.prototype.sqrt = function sqrt (a) {
  83353. if (a.isZero()) return a.clone();
  83354. var mod3 = this.m.andln(3);
  83355. assert(mod3 % 2 === 1);
  83356. // Fast case
  83357. if (mod3 === 3) {
  83358. var pow = this.m.add(new BN(1)).iushrn(2);
  83359. return this.pow(a, pow);
  83360. }
  83361. // Tonelli-Shanks algorithm (Totally unoptimized and slow)
  83362. //
  83363. // Find Q and S, that Q * 2 ^ S = (P - 1)
  83364. var q = this.m.subn(1);
  83365. var s = 0;
  83366. while (!q.isZero() && q.andln(1) === 0) {
  83367. s++;
  83368. q.iushrn(1);
  83369. }
  83370. assert(!q.isZero());
  83371. var one = new BN(1).toRed(this);
  83372. var nOne = one.redNeg();
  83373. // Find quadratic non-residue
  83374. // NOTE: Max is such because of generalized Riemann hypothesis.
  83375. var lpow = this.m.subn(1).iushrn(1);
  83376. var z = this.m.bitLength();
  83377. z = new BN(2 * z * z).toRed(this);
  83378. while (this.pow(z, lpow).cmp(nOne) !== 0) {
  83379. z.redIAdd(nOne);
  83380. }
  83381. var c = this.pow(z, q);
  83382. var r = this.pow(a, q.addn(1).iushrn(1));
  83383. var t = this.pow(a, q);
  83384. var m = s;
  83385. while (t.cmp(one) !== 0) {
  83386. var tmp = t;
  83387. for (var i = 0; tmp.cmp(one) !== 0; i++) {
  83388. tmp = tmp.redSqr();
  83389. }
  83390. assert(i < m);
  83391. var b = this.pow(c, new BN(1).iushln(m - i - 1));
  83392. r = r.redMul(b);
  83393. c = b.redSqr();
  83394. t = t.redMul(c);
  83395. m = i;
  83396. }
  83397. return r;
  83398. };
  83399. Red.prototype.invm = function invm (a) {
  83400. var inv = a._invmp(this.m);
  83401. if (inv.negative !== 0) {
  83402. inv.negative = 0;
  83403. return this.imod(inv).redNeg();
  83404. } else {
  83405. return this.imod(inv);
  83406. }
  83407. };
  83408. Red.prototype.pow = function pow (a, num) {
  83409. if (num.isZero()) return new BN(1).toRed(this);
  83410. if (num.cmpn(1) === 0) return a.clone();
  83411. var windowSize = 4;
  83412. var wnd = new Array(1 << windowSize);
  83413. wnd[0] = new BN(1).toRed(this);
  83414. wnd[1] = a;
  83415. for (var i = 2; i < wnd.length; i++) {
  83416. wnd[i] = this.mul(wnd[i - 1], a);
  83417. }
  83418. var res = wnd[0];
  83419. var current = 0;
  83420. var currentLen = 0;
  83421. var start = num.bitLength() % 26;
  83422. if (start === 0) {
  83423. start = 26;
  83424. }
  83425. for (i = num.length - 1; i >= 0; i--) {
  83426. var word = num.words[i];
  83427. for (var j = start - 1; j >= 0; j--) {
  83428. var bit = (word >> j) & 1;
  83429. if (res !== wnd[0]) {
  83430. res = this.sqr(res);
  83431. }
  83432. if (bit === 0 && current === 0) {
  83433. currentLen = 0;
  83434. continue;
  83435. }
  83436. current <<= 1;
  83437. current |= bit;
  83438. currentLen++;
  83439. if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
  83440. res = this.mul(res, wnd[current]);
  83441. currentLen = 0;
  83442. current = 0;
  83443. }
  83444. start = 26;
  83445. }
  83446. return res;
  83447. };
  83448. Red.prototype.convertTo = function convertTo (num) {
  83449. var r = num.umod(this.m);
  83450. return r === num ? r.clone() : r;
  83451. };
  83452. Red.prototype.convertFrom = function convertFrom (num) {
  83453. var res = num.clone();
  83454. res.red = null;
  83455. return res;
  83456. };
  83457. //
  83458. // Montgomery method engine
  83459. //
  83460. BN.mont = function mont (num) {
  83461. return new Mont(num);
  83462. };
  83463. function Mont (m) {
  83464. Red.call(this, m);
  83465. this.shift = this.m.bitLength();
  83466. if (this.shift % 26 !== 0) {
  83467. this.shift += 26 - (this.shift % 26);
  83468. }
  83469. this.r = new BN(1).iushln(this.shift);
  83470. this.r2 = this.imod(this.r.sqr());
  83471. this.rinv = this.r._invmp(this.m);
  83472. this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
  83473. this.minv = this.minv.umod(this.r);
  83474. this.minv = this.r.sub(this.minv);
  83475. }
  83476. inherits(Mont, Red);
  83477. Mont.prototype.convertTo = function convertTo (num) {
  83478. return this.imod(num.ushln(this.shift));
  83479. };
  83480. Mont.prototype.convertFrom = function convertFrom (num) {
  83481. var r = this.imod(num.mul(this.rinv));
  83482. r.red = null;
  83483. return r;
  83484. };
  83485. Mont.prototype.imul = function imul (a, b) {
  83486. if (a.isZero() || b.isZero()) {
  83487. a.words[0] = 0;
  83488. a.length = 1;
  83489. return a;
  83490. }
  83491. var t = a.imul(b);
  83492. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  83493. var u = t.isub(c).iushrn(this.shift);
  83494. var res = u;
  83495. if (u.cmp(this.m) >= 0) {
  83496. res = u.isub(this.m);
  83497. } else if (u.cmpn(0) < 0) {
  83498. res = u.iadd(this.m);
  83499. }
  83500. return res._forceRed(this);
  83501. };
  83502. Mont.prototype.mul = function mul (a, b) {
  83503. if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
  83504. var t = a.mul(b);
  83505. var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
  83506. var u = t.isub(c).iushrn(this.shift);
  83507. var res = u;
  83508. if (u.cmp(this.m) >= 0) {
  83509. res = u.isub(this.m);
  83510. } else if (u.cmpn(0) < 0) {
  83511. res = u.iadd(this.m);
  83512. }
  83513. return res._forceRed(this);
  83514. };
  83515. Mont.prototype.invm = function invm (a) {
  83516. // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
  83517. var res = this.imod(a._invmp(this.m).mul(this.r2));
  83518. return res._forceRed(this);
  83519. };
  83520. })( false || module, this);
  83521. /***/ }),
  83522. /***/ 44142:
  83523. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  83524. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  83525. const createHmac = __webpack_require__(58355)
  83526. const ONE1 = Buffer.alloc(1, 1)
  83527. const ZERO1 = Buffer.alloc(1, 0)
  83528. // https://tools.ietf.org/html/rfc6979#section-3.2
  83529. function deterministicGenerateK (hash, x, checkSig, isPrivate, extraEntropy) {
  83530. // Step A, ignored as hash already provided
  83531. // Step B
  83532. // Step C
  83533. let k = Buffer.alloc(32, 0)
  83534. let v = Buffer.alloc(32, 1)
  83535. // Step D
  83536. k = createHmac('sha256', k)
  83537. .update(v)
  83538. .update(ZERO1)
  83539. .update(x)
  83540. .update(hash)
  83541. .update(extraEntropy || '')
  83542. .digest()
  83543. // Step E
  83544. v = createHmac('sha256', k).update(v).digest()
  83545. // Step F
  83546. k = createHmac('sha256', k)
  83547. .update(v)
  83548. .update(ONE1)
  83549. .update(x)
  83550. .update(hash)
  83551. .update(extraEntropy || '')
  83552. .digest()
  83553. // Step G
  83554. v = createHmac('sha256', k).update(v).digest()
  83555. // Step H1/H2a, ignored as tlen === qlen (256 bit)
  83556. // Step H2b
  83557. v = createHmac('sha256', k).update(v).digest()
  83558. let T = v
  83559. // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
  83560. while (!isPrivate(T) || !checkSig(T)) {
  83561. k = createHmac('sha256', k)
  83562. .update(v)
  83563. .update(ZERO1)
  83564. .digest()
  83565. v = createHmac('sha256', k).update(v).digest()
  83566. // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
  83567. // Step H2b again
  83568. v = createHmac('sha256', k).update(v).digest()
  83569. T = v
  83570. }
  83571. return T
  83572. }
  83573. module.exports = deterministicGenerateK
  83574. /***/ }),
  83575. /***/ 63607:
  83576. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  83577. "use strict";
  83578. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  83579. if (k2 === undefined) k2 = k;
  83580. Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
  83581. }) : (function(o, m, k, k2) {
  83582. if (k2 === undefined) k2 = k;
  83583. o[k2] = m[k];
  83584. }));
  83585. var __exportStar = (this && this.__exportStar) || function(m, exports) {
  83586. for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
  83587. };
  83588. Object.defineProperty(exports, "__esModule", ({ value: true }));
  83589. //export * from './xrpIO/ripple-binding'
  83590. __exportStar(__webpack_require__(92153), exports);
  83591. __exportStar(__webpack_require__(51971), exports);
  83592. //export * from 'ripple-lib'
  83593. //export { RippleAPI } from 'ripple-lib'
  83594. __exportStar(__webpack_require__(54396), exports);
  83595. /***/ }),
  83596. /***/ 70542:
  83597. /***/ ((__unused_webpack_module, exports) => {
  83598. "use strict";
  83599. Object.defineProperty(exports, "__esModule", ({ value: true }));
  83600. exports.ERR_NO_VERIFY_OWNER = exports.ERR_BAD_TX_HASH = void 0;
  83601. const ERR_BAD_TX_HASH = (hash) => new Error(`Bad tx hash format: "${hash}"`);
  83602. exports.ERR_BAD_TX_HASH = ERR_BAD_TX_HASH;
  83603. const ERR_NO_VERIFY_OWNER = (hash, actualAccount, desiredAccount) => new Error(`Expected tx "${hash}" to be initiated by ${desiredAccount} but was ${actualAccount}`);
  83604. exports.ERR_NO_VERIFY_OWNER = ERR_NO_VERIFY_OWNER;
  83605. /***/ }),
  83606. /***/ 51971:
  83607. /***/ ((__unused_webpack_module, exports) => {
  83608. "use strict";
  83609. Object.defineProperty(exports, "__esModule", ({ value: true }));
  83610. exports.MIN_XRP_TX_VALUE = exports.MIN_XRP_FEE = exports.AMOUNT_FORMAT = exports.MAX_SUPPLY = exports.AMOUNT_DECIMALS = exports.MSG_FORMAT = exports.SIGNER_FORMAT = exports.SIGNATURE_FORMAT = exports.DATA_FORMAT = exports.PTR_FORMAT = exports.NON_ZERO_TX_HASH = exports.PUBKEY_LEN = exports.MSG_DATA_MAX = exports.MSG_DELIM = void 0;
  83611. exports.MSG_DELIM = ' ';
  83612. exports.MSG_DATA_MAX = 925;
  83613. exports.PUBKEY_LEN = 66;
  83614. exports.NON_ZERO_TX_HASH = new RegExp(`[0-9A-F]{64}`);
  83615. exports.PTR_FORMAT = new RegExp(`^((${exports.NON_ZERO_TX_HASH.source})|0)`);
  83616. exports.DATA_FORMAT = new RegExp(`(.{1,${exports.MSG_DATA_MAX}})`);
  83617. exports.SIGNATURE_FORMAT = new RegExp(`(\\S{140}|\\S{142})$`);
  83618. exports.SIGNER_FORMAT = new RegExp(`(\\S{${exports.PUBKEY_LEN}})`);
  83619. exports.MSG_FORMAT = new RegExp(`${exports.PTR_FORMAT.source}${exports.MSG_DELIM}${exports.DATA_FORMAT.source}`, 'm');
  83620. exports.AMOUNT_DECIMALS = 18;
  83621. exports.MAX_SUPPLY = 20_000_000;
  83622. exports.AMOUNT_FORMAT = new RegExp(`\d+(\.\d{1,${exports.AMOUNT_DECIMALS}})?`);
  83623. exports.MIN_XRP_FEE = "0.00001";
  83624. exports.MIN_XRP_TX_VALUE = "0.000001";
  83625. /***/ }),
  83626. /***/ 92153:
  83627. /***/ ((__unused_webpack_module, exports) => {
  83628. "use strict";
  83629. Object.defineProperty(exports, "__esModule", ({ value: true }));
  83630. exports.defaultOptions = void 0;
  83631. exports.defaultOptions = {
  83632. debug: false,
  83633. connectionTimeout: 100000,
  83634. readFreshApi: true,
  83635. readMaxRetry: -1,
  83636. readRetryTimeout: 1000
  83637. };
  83638. /***/ }),
  83639. /***/ 54396:
  83640. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  83641. "use strict";
  83642. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  83643. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  83644. if (k2 === undefined) k2 = k;
  83645. Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
  83646. }) : (function(o, m, k, k2) {
  83647. if (k2 === undefined) k2 = k;
  83648. o[k2] = m[k];
  83649. }));
  83650. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  83651. Object.defineProperty(o, "default", { enumerable: true, value: v });
  83652. }) : function(o, v) {
  83653. o["default"] = v;
  83654. });
  83655. var __importStar = (this && this.__importStar) || function (mod) {
  83656. if (mod && mod.__esModule) return mod;
  83657. var result = {};
  83658. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  83659. __setModuleDefault(result, mod);
  83660. return result;
  83661. };
  83662. Object.defineProperty(exports, "__esModule", ({ value: true }));
  83663. exports.xrpIO = void 0;
  83664. const types_1 = __webpack_require__(92153);
  83665. const xrpl_1 = __webpack_require__(48726);
  83666. const zlib = __importStar(__webpack_require__(42635));
  83667. const util = __importStar(__webpack_require__(89539));
  83668. const protocol_constants_1 = __webpack_require__(51971);
  83669. const errors_1 = __webpack_require__(70542);
  83670. const compressB64 = async (data) => (await util.promisify(zlib.deflate)(Buffer.from(data, 'utf-8'))).toString('base64');
  83671. const decompressB64 = async (data) => (await util.promisify(zlib.inflate)(Buffer.from(data, 'base64'))).toString('utf-8');
  83672. const hexDecode = (str) => Buffer.from(str, 'hex').toString('utf8');
  83673. const hexEncode = (str) => Buffer.from(str, 'utf8').toString('hex').toUpperCase();
  83674. const chunkString = (str, length) => str.match(new RegExp('.{1,' + length + '}', 'gs'));
  83675. const genRandHex = size => [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');
  83676. const PAYLOAD_SIZE = 925;
  83677. const XRP_PER_DROP = 0.000001;
  83678. const DROP_PER_XRP = 1000000;
  83679. class xrpIO {
  83680. server;
  83681. options;
  83682. api;
  83683. constructor(server, options = types_1.defaultOptions) {
  83684. this.server = server;
  83685. this.options = options;
  83686. this.options.debug = options.debug ? Boolean(options.debug) : types_1.defaultOptions.debug;
  83687. this.options.connectionTimeout = options.connectionTimeout ? Number(options.connectionTimeout) : types_1.defaultOptions.connectionTimeout;
  83688. this.options.readMaxRetry = options.readMaxRetry ? Number(options.readMaxRetry) : types_1.defaultOptions.readMaxRetry;
  83689. this.options.readRetryTimeout = options.readRetryTimeout ? Number(options.readRetryTimeout) : types_1.defaultOptions.readRetryTimeout;
  83690. this.api = new xrpl_1.Client(server, {
  83691. connectionTimeout: this.options.connectionTimeout
  83692. });
  83693. }
  83694. async connect() {
  83695. if (!this.api.isConnected())
  83696. await this.api.connect();
  83697. }
  83698. async disconnect() {
  83699. try {
  83700. await this.api.disconnect();
  83701. }
  83702. catch (e) {
  83703. console.log("DISCONNECT ERROR", e);
  83704. }
  83705. }
  83706. async cloneApi() {
  83707. let _api = new xrpl_1.Client(this.server, {
  83708. connectionTimeout: this.options.connectionTimeout
  83709. });
  83710. while (!_api.isConnected()) {
  83711. try {
  83712. await _api.connect();
  83713. return _api;
  83714. }
  83715. catch (e) {
  83716. this.dbg('CLONEAPI ERR', 'Connection failed', String(e['message']));
  83717. await _api.disconnect();
  83718. _api = new xrpl_1.Client(this.server, {
  83719. connectionTimeout: this.options.connectionTimeout
  83720. });
  83721. }
  83722. }
  83723. }
  83724. async sendPayment(data, to, secret, sequence, amount = "1") {
  83725. const wallet = xrpl_1.Wallet.fromSecret(secret);
  83726. this.dbg("Sending payment", wallet.address, '->', to);
  83727. const _api = await this.cloneApi();
  83728. try {
  83729. const payment = await _api.autofill({
  83730. TransactionType: 'Payment',
  83731. Account: wallet.address,
  83732. Destination: to,
  83733. Sequence: sequence,
  83734. Amount: amount,
  83735. Memos: [{
  83736. Memo: {
  83737. MemoData: hexEncode(data.data || ""),
  83738. MemoFormat: hexEncode(data.format || ""),
  83739. MemoType: hexEncode(data.type || "")
  83740. }
  83741. }]
  83742. });
  83743. const response = await _api.submitAndWait(payment, { wallet });
  83744. await _api.disconnect();
  83745. this.dbg("Tx finalized", response.result.hash, response.result.Sequence);
  83746. return response;
  83747. }
  83748. catch (error) {
  83749. this.dbg("SENDPAYMENT ERROR", error);
  83750. await _api.disconnect();
  83751. throw error;
  83752. }
  83753. }
  83754. async writeRaw(data, to, secret, sequence, amount = "1") {
  83755. this.dbg("Writing data", data);
  83756. const tx = await this.sendPayment(data, to, secret, sequence, amount);
  83757. return tx.result.hash;
  83758. }
  83759. async getTransaction(hash, retry = 0) {
  83760. this.dbg("Getting Tx", hash);
  83761. try {
  83762. return await this.api.request({
  83763. command: 'tx',
  83764. transaction: hash,
  83765. });
  83766. }
  83767. catch (e) {
  83768. this.dbg(e);
  83769. if (this.options.readMaxRetry != -1) {
  83770. if (retry >= this.options.readMaxRetry)
  83771. console.error("Retry limit exceeded for", hash, ". This is an irrecoverable error");
  83772. throw e;
  83773. }
  83774. await new Promise(res => setTimeout(res, this.options.readRetryTimeout));
  83775. return await this.getTransaction(hash, retry + 1);
  83776. }
  83777. }
  83778. async readRaw(hash, verifyOwner) {
  83779. if (!protocol_constants_1.NON_ZERO_TX_HASH.test(hash)) {
  83780. throw (0, errors_1.ERR_BAD_TX_HASH)(hash);
  83781. }
  83782. const tx = await this.getTransaction(hash);
  83783. if (verifyOwner && tx.result.Account != verifyOwner) {
  83784. throw (0, errors_1.ERR_NO_VERIFY_OWNER)(hash, tx.result.Account, verifyOwner);
  83785. }
  83786. const memo = tx.result.Memos[0].Memo;
  83787. const memoParsed = {
  83788. data: hexDecode(memo.MemoData),
  83789. format: hexDecode(memo.MemoFormat),
  83790. type: hexDecode(memo.MemoType)
  83791. };
  83792. this.dbg(hash, "data", memoParsed);
  83793. return memoParsed;
  83794. }
  83795. async treeWrite(data, to, secret, format = 'L') {
  83796. const wallet = xrpl_1.Wallet.fromSecret(secret);
  83797. data = await compressB64(data);
  83798. const chunks = chunkString(data, PAYLOAD_SIZE);
  83799. const latestSequence = await this.getAccountSequence(wallet.address);
  83800. const hashes = await Promise.all(Object.entries(chunks).map(([i, chunk]) => this.writeRaw({ data: chunk, format: format }, to, secret, latestSequence + Number(i))));
  83801. if (hashes.length === 1) {
  83802. return hashes[0];
  83803. }
  83804. return await this.treeWrite(JSON.stringify(hashes), to, secret, 'N');
  83805. }
  83806. async treeRead(hashes, verifyOwner) {
  83807. const bad_hash = hashes.find(hash => !protocol_constants_1.NON_ZERO_TX_HASH.test(hash));
  83808. if (bad_hash)
  83809. throw (0, errors_1.ERR_BAD_TX_HASH)(bad_hash);
  83810. const memos = await Promise.all(hashes.map(hash => this.readRaw(hash, verifyOwner)));
  83811. const payload = await decompressB64(memos.map(memo => memo.data).join(''));
  83812. if (memos.some(memo => memo.format === 'N')) {
  83813. return await this.treeRead(JSON.parse(payload), verifyOwner);
  83814. }
  83815. return payload;
  83816. }
  83817. async getAccountSequence(address) {
  83818. this.dbg("Getting acc info for", address);
  83819. const accountInfo = await this.api.request({
  83820. command: 'account_info',
  83821. account: address,
  83822. strict: true,
  83823. });
  83824. this.dbg("Got account_info", accountInfo);
  83825. return Number(accountInfo.result.account_data.Sequence);
  83826. }
  83827. async estimateFee(data, denomination = 'DROPS', cost = 0) {
  83828. data = await compressB64(data);
  83829. const chunks = chunkString(data, PAYLOAD_SIZE);
  83830. if (chunks.length === 1) {
  83831. return (denomination === "DROPS" ? (cost + 1) : this.dropsToXrp(cost + 1));
  83832. }
  83833. return this.estimateFee(JSON.stringify(chunks.map(_ => genRandHex(64))), denomination, cost + chunks.length);
  83834. }
  83835. xrpToDrops(xrp) {
  83836. return xrp * DROP_PER_XRP;
  83837. }
  83838. dropsToXrp(drops) {
  83839. return drops * XRP_PER_DROP;
  83840. }
  83841. dbg(...args) {
  83842. if (this.options.debug) {
  83843. console.log.apply(console, args);
  83844. }
  83845. }
  83846. }
  83847. exports.xrpIO = xrpIO;
  83848. /***/ }),
  83849. /***/ 4685:
  83850. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  83851. var native = __webpack_require__(30247)
  83852. function getTypeName (fn) {
  83853. return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
  83854. }
  83855. function getValueTypeName (value) {
  83856. return native.Nil(value) ? '' : getTypeName(value.constructor)
  83857. }
  83858. function getValue (value) {
  83859. if (native.Function(value)) return ''
  83860. if (native.String(value)) return JSON.stringify(value)
  83861. if (value && native.Object(value)) return ''
  83862. return value
  83863. }
  83864. function captureStackTrace (e, t) {
  83865. if (Error.captureStackTrace) {
  83866. Error.captureStackTrace(e, t)
  83867. }
  83868. }
  83869. function tfJSON (type) {
  83870. if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
  83871. if (native.Array(type)) return 'Array'
  83872. if (type && native.Object(type)) return 'Object'
  83873. return type !== undefined ? type : ''
  83874. }
  83875. function tfErrorString (type, value, valueTypeName) {
  83876. var valueJson = getValue(value)
  83877. return 'Expected ' + tfJSON(type) + ', got' +
  83878. (valueTypeName !== '' ? ' ' + valueTypeName : '') +
  83879. (valueJson !== '' ? ' ' + valueJson : '')
  83880. }
  83881. function TfTypeError (type, value, valueTypeName) {
  83882. valueTypeName = valueTypeName || getValueTypeName(value)
  83883. this.message = tfErrorString(type, value, valueTypeName)
  83884. captureStackTrace(this, TfTypeError)
  83885. this.__type = type
  83886. this.__value = value
  83887. this.__valueTypeName = valueTypeName
  83888. }
  83889. TfTypeError.prototype = Object.create(Error.prototype)
  83890. TfTypeError.prototype.constructor = TfTypeError
  83891. function tfPropertyErrorString (type, label, name, value, valueTypeName) {
  83892. var description = '" of type '
  83893. if (label === 'key') description = '" with key type '
  83894. return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
  83895. }
  83896. function TfPropertyTypeError (type, property, label, value, valueTypeName) {
  83897. if (type) {
  83898. valueTypeName = valueTypeName || getValueTypeName(value)
  83899. this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
  83900. } else {
  83901. this.message = 'Unexpected property "' + property + '"'
  83902. }
  83903. captureStackTrace(this, TfTypeError)
  83904. this.__label = label
  83905. this.__property = property
  83906. this.__type = type
  83907. this.__value = value
  83908. this.__valueTypeName = valueTypeName
  83909. }
  83910. TfPropertyTypeError.prototype = Object.create(Error.prototype)
  83911. TfPropertyTypeError.prototype.constructor = TfTypeError
  83912. function tfCustomError (expected, actual) {
  83913. return new TfTypeError(expected, {}, actual)
  83914. }
  83915. function tfSubError (e, property, label) {
  83916. // sub child?
  83917. if (e instanceof TfPropertyTypeError) {
  83918. property = property + '.' + e.__property
  83919. e = new TfPropertyTypeError(
  83920. e.__type, property, e.__label, e.__value, e.__valueTypeName
  83921. )
  83922. // child?
  83923. } else if (e instanceof TfTypeError) {
  83924. e = new TfPropertyTypeError(
  83925. e.__type, property, label, e.__value, e.__valueTypeName
  83926. )
  83927. }
  83928. captureStackTrace(e)
  83929. return e
  83930. }
  83931. module.exports = {
  83932. TfTypeError: TfTypeError,
  83933. TfPropertyTypeError: TfPropertyTypeError,
  83934. tfCustomError: tfCustomError,
  83935. tfSubError: tfSubError,
  83936. tfJSON: tfJSON,
  83937. getValueTypeName: getValueTypeName
  83938. }
  83939. /***/ }),
  83940. /***/ 74307:
  83941. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  83942. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  83943. var NATIVE = __webpack_require__(30247)
  83944. var ERRORS = __webpack_require__(4685)
  83945. function _Buffer (value) {
  83946. return Buffer.isBuffer(value)
  83947. }
  83948. function Hex (value) {
  83949. return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
  83950. }
  83951. function _LengthN (type, length) {
  83952. var name = type.toJSON()
  83953. function Length (value) {
  83954. if (!type(value)) return false
  83955. if (value.length === length) return true
  83956. throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
  83957. }
  83958. Length.toJSON = function () { return name }
  83959. return Length
  83960. }
  83961. var _ArrayN = _LengthN.bind(null, NATIVE.Array)
  83962. var _BufferN = _LengthN.bind(null, _Buffer)
  83963. var _HexN = _LengthN.bind(null, Hex)
  83964. var _StringN = _LengthN.bind(null, NATIVE.String)
  83965. function Range (a, b, f) {
  83966. f = f || NATIVE.Number
  83967. function _range (value, strict) {
  83968. return f(value, strict) && (value > a) && (value < b)
  83969. }
  83970. _range.toJSON = function () {
  83971. return `${f.toJSON()} between [${a}, ${b}]`
  83972. }
  83973. return _range
  83974. }
  83975. var INT53_MAX = Math.pow(2, 53) - 1
  83976. function Finite (value) {
  83977. return typeof value === 'number' && isFinite(value)
  83978. }
  83979. function Int8 (value) { return ((value << 24) >> 24) === value }
  83980. function Int16 (value) { return ((value << 16) >> 16) === value }
  83981. function Int32 (value) { return (value | 0) === value }
  83982. function Int53 (value) {
  83983. return typeof value === 'number' &&
  83984. value >= -INT53_MAX &&
  83985. value <= INT53_MAX &&
  83986. Math.floor(value) === value
  83987. }
  83988. function UInt8 (value) { return (value & 0xff) === value }
  83989. function UInt16 (value) { return (value & 0xffff) === value }
  83990. function UInt32 (value) { return (value >>> 0) === value }
  83991. function UInt53 (value) {
  83992. return typeof value === 'number' &&
  83993. value >= 0 &&
  83994. value <= INT53_MAX &&
  83995. Math.floor(value) === value
  83996. }
  83997. var types = {
  83998. ArrayN: _ArrayN,
  83999. Buffer: _Buffer,
  84000. BufferN: _BufferN,
  84001. Finite: Finite,
  84002. Hex: Hex,
  84003. HexN: _HexN,
  84004. Int8: Int8,
  84005. Int16: Int16,
  84006. Int32: Int32,
  84007. Int53: Int53,
  84008. Range: Range,
  84009. StringN: _StringN,
  84010. UInt8: UInt8,
  84011. UInt16: UInt16,
  84012. UInt32: UInt32,
  84013. UInt53: UInt53
  84014. }
  84015. for (var typeName in types) {
  84016. types[typeName].toJSON = function (t) {
  84017. return t
  84018. }.bind(null, typeName)
  84019. }
  84020. module.exports = types
  84021. /***/ }),
  84022. /***/ 2401:
  84023. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  84024. var ERRORS = __webpack_require__(4685)
  84025. var NATIVE = __webpack_require__(30247)
  84026. // short-hand
  84027. var tfJSON = ERRORS.tfJSON
  84028. var TfTypeError = ERRORS.TfTypeError
  84029. var TfPropertyTypeError = ERRORS.TfPropertyTypeError
  84030. var tfSubError = ERRORS.tfSubError
  84031. var getValueTypeName = ERRORS.getValueTypeName
  84032. var TYPES = {
  84033. arrayOf: function arrayOf (type, options) {
  84034. type = compile(type)
  84035. options = options || {}
  84036. function _arrayOf (array, strict) {
  84037. if (!NATIVE.Array(array)) return false
  84038. if (NATIVE.Nil(array)) return false
  84039. if (options.minLength !== undefined && array.length < options.minLength) return false
  84040. if (options.maxLength !== undefined && array.length > options.maxLength) return false
  84041. if (options.length !== undefined && array.length !== options.length) return false
  84042. return array.every(function (value, i) {
  84043. try {
  84044. return typeforce(type, value, strict)
  84045. } catch (e) {
  84046. throw tfSubError(e, i)
  84047. }
  84048. })
  84049. }
  84050. _arrayOf.toJSON = function () {
  84051. var str = '[' + tfJSON(type) + ']'
  84052. if (options.length !== undefined) {
  84053. str += '{' + options.length + '}'
  84054. } else if (options.minLength !== undefined || options.maxLength !== undefined) {
  84055. str += '{' +
  84056. (options.minLength === undefined ? 0 : options.minLength) + ',' +
  84057. (options.maxLength === undefined ? Infinity : options.maxLength) + '}'
  84058. }
  84059. return str
  84060. }
  84061. return _arrayOf
  84062. },
  84063. maybe: function maybe (type) {
  84064. type = compile(type)
  84065. function _maybe (value, strict) {
  84066. return NATIVE.Nil(value) || type(value, strict, maybe)
  84067. }
  84068. _maybe.toJSON = function () { return '?' + tfJSON(type) }
  84069. return _maybe
  84070. },
  84071. map: function map (propertyType, propertyKeyType) {
  84072. propertyType = compile(propertyType)
  84073. if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
  84074. function _map (value, strict) {
  84075. if (!NATIVE.Object(value)) return false
  84076. if (NATIVE.Nil(value)) return false
  84077. for (var propertyName in value) {
  84078. try {
  84079. if (propertyKeyType) {
  84080. typeforce(propertyKeyType, propertyName, strict)
  84081. }
  84082. } catch (e) {
  84083. throw tfSubError(e, propertyName, 'key')
  84084. }
  84085. try {
  84086. var propertyValue = value[propertyName]
  84087. typeforce(propertyType, propertyValue, strict)
  84088. } catch (e) {
  84089. throw tfSubError(e, propertyName)
  84090. }
  84091. }
  84092. return true
  84093. }
  84094. if (propertyKeyType) {
  84095. _map.toJSON = function () {
  84096. return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
  84097. }
  84098. } else {
  84099. _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
  84100. }
  84101. return _map
  84102. },
  84103. object: function object (uncompiled) {
  84104. var type = {}
  84105. for (var typePropertyName in uncompiled) {
  84106. type[typePropertyName] = compile(uncompiled[typePropertyName])
  84107. }
  84108. function _object (value, strict) {
  84109. if (!NATIVE.Object(value)) return false
  84110. if (NATIVE.Nil(value)) return false
  84111. var propertyName
  84112. try {
  84113. for (propertyName in type) {
  84114. var propertyType = type[propertyName]
  84115. var propertyValue = value[propertyName]
  84116. typeforce(propertyType, propertyValue, strict)
  84117. }
  84118. } catch (e) {
  84119. throw tfSubError(e, propertyName)
  84120. }
  84121. if (strict) {
  84122. for (propertyName in value) {
  84123. if (type[propertyName]) continue
  84124. throw new TfPropertyTypeError(undefined, propertyName)
  84125. }
  84126. }
  84127. return true
  84128. }
  84129. _object.toJSON = function () { return tfJSON(type) }
  84130. return _object
  84131. },
  84132. anyOf: function anyOf () {
  84133. var types = [].slice.call(arguments).map(compile)
  84134. function _anyOf (value, strict) {
  84135. return types.some(function (type) {
  84136. try {
  84137. return typeforce(type, value, strict)
  84138. } catch (e) {
  84139. return false
  84140. }
  84141. })
  84142. }
  84143. _anyOf.toJSON = function () { return types.map(tfJSON).join('|') }
  84144. return _anyOf
  84145. },
  84146. allOf: function allOf () {
  84147. var types = [].slice.call(arguments).map(compile)
  84148. function _allOf (value, strict) {
  84149. return types.every(function (type) {
  84150. try {
  84151. return typeforce(type, value, strict)
  84152. } catch (e) {
  84153. return false
  84154. }
  84155. })
  84156. }
  84157. _allOf.toJSON = function () { return types.map(tfJSON).join(' & ') }
  84158. return _allOf
  84159. },
  84160. quacksLike: function quacksLike (type) {
  84161. function _quacksLike (value) {
  84162. return type === getValueTypeName(value)
  84163. }
  84164. _quacksLike.toJSON = function () { return type }
  84165. return _quacksLike
  84166. },
  84167. tuple: function tuple () {
  84168. var types = [].slice.call(arguments).map(compile)
  84169. function _tuple (values, strict) {
  84170. if (NATIVE.Nil(values)) return false
  84171. if (NATIVE.Nil(values.length)) return false
  84172. if (strict && (values.length !== types.length)) return false
  84173. return types.every(function (type, i) {
  84174. try {
  84175. return typeforce(type, values[i], strict)
  84176. } catch (e) {
  84177. throw tfSubError(e, i)
  84178. }
  84179. })
  84180. }
  84181. _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
  84182. return _tuple
  84183. },
  84184. value: function value (expected) {
  84185. function _value (actual) {
  84186. return actual === expected
  84187. }
  84188. _value.toJSON = function () { return expected }
  84189. return _value
  84190. }
  84191. }
  84192. // TODO: deprecate
  84193. TYPES.oneOf = TYPES.anyOf
  84194. function compile (type) {
  84195. if (NATIVE.String(type)) {
  84196. if (type[0] === '?') return TYPES.maybe(type.slice(1))
  84197. return NATIVE[type] || TYPES.quacksLike(type)
  84198. } else if (type && NATIVE.Object(type)) {
  84199. if (NATIVE.Array(type)) {
  84200. if (type.length !== 1) throw new TypeError('Expected compile() parameter of type Array of length 1')
  84201. return TYPES.arrayOf(type[0])
  84202. }
  84203. return TYPES.object(type)
  84204. } else if (NATIVE.Function(type)) {
  84205. return type
  84206. }
  84207. return TYPES.value(type)
  84208. }
  84209. function typeforce (type, value, strict, surrogate) {
  84210. if (NATIVE.Function(type)) {
  84211. if (type(value, strict)) return true
  84212. throw new TfTypeError(surrogate || type, value)
  84213. }
  84214. // JIT
  84215. return typeforce(compile(type), value, strict)
  84216. }
  84217. // assign types to typeforce function
  84218. for (var typeName in NATIVE) {
  84219. typeforce[typeName] = NATIVE[typeName]
  84220. }
  84221. for (typeName in TYPES) {
  84222. typeforce[typeName] = TYPES[typeName]
  84223. }
  84224. var EXTRA = __webpack_require__(74307)
  84225. for (typeName in EXTRA) {
  84226. typeforce[typeName] = EXTRA[typeName]
  84227. }
  84228. typeforce.compile = compile
  84229. typeforce.TfTypeError = TfTypeError
  84230. typeforce.TfPropertyTypeError = TfPropertyTypeError
  84231. module.exports = typeforce
  84232. /***/ }),
  84233. /***/ 30247:
  84234. /***/ ((module) => {
  84235. var types = {
  84236. Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
  84237. Boolean: function (value) { return typeof value === 'boolean' },
  84238. Function: function (value) { return typeof value === 'function' },
  84239. Nil: function (value) { return value === undefined || value === null },
  84240. Number: function (value) { return typeof value === 'number' },
  84241. Object: function (value) { return typeof value === 'object' },
  84242. String: function (value) { return typeof value === 'string' },
  84243. '': function () { return true }
  84244. }
  84245. // TODO: deprecate
  84246. types.Null = types.Nil
  84247. for (var typeName in types) {
  84248. types[typeName].toJSON = function (t) {
  84249. return t
  84250. }.bind(null, typeName)
  84251. }
  84252. module.exports = types
  84253. /***/ }),
  84254. /***/ 52511:
  84255. /***/ (function(module, exports, __webpack_require__) {
  84256. /* module decorator */ module = __webpack_require__.nmd(module);
  84257. var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.3.2 by @mathias */
  84258. ;(function(root) {
  84259. /** Detect free variables */
  84260. var freeExports = true && exports &&
  84261. !exports.nodeType && exports;
  84262. var freeModule = true && module &&
  84263. !module.nodeType && module;
  84264. var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g;
  84265. if (
  84266. freeGlobal.global === freeGlobal ||
  84267. freeGlobal.window === freeGlobal ||
  84268. freeGlobal.self === freeGlobal
  84269. ) {
  84270. root = freeGlobal;
  84271. }
  84272. /**
  84273. * The `punycode` object.
  84274. * @name punycode
  84275. * @type Object
  84276. */
  84277. var punycode,
  84278. /** Highest positive signed 32-bit float value */
  84279. maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
  84280. /** Bootstring parameters */
  84281. base = 36,
  84282. tMin = 1,
  84283. tMax = 26,
  84284. skew = 38,
  84285. damp = 700,
  84286. initialBias = 72,
  84287. initialN = 128, // 0x80
  84288. delimiter = '-', // '\x2D'
  84289. /** Regular expressions */
  84290. regexPunycode = /^xn--/,
  84291. regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
  84292. regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
  84293. /** Error messages */
  84294. errors = {
  84295. 'overflow': 'Overflow: input needs wider integers to process',
  84296. 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
  84297. 'invalid-input': 'Invalid input'
  84298. },
  84299. /** Convenience shortcuts */
  84300. baseMinusTMin = base - tMin,
  84301. floor = Math.floor,
  84302. stringFromCharCode = String.fromCharCode,
  84303. /** Temporary variable */
  84304. key;
  84305. /*--------------------------------------------------------------------------*/
  84306. /**
  84307. * A generic error utility function.
  84308. * @private
  84309. * @param {String} type The error type.
  84310. * @returns {Error} Throws a `RangeError` with the applicable error message.
  84311. */
  84312. function error(type) {
  84313. throw RangeError(errors[type]);
  84314. }
  84315. /**
  84316. * A generic `Array#map` utility function.
  84317. * @private
  84318. * @param {Array} array The array to iterate over.
  84319. * @param {Function} callback The function that gets called for every array
  84320. * item.
  84321. * @returns {Array} A new array of values returned by the callback function.
  84322. */
  84323. function map(array, fn) {
  84324. var length = array.length;
  84325. var result = [];
  84326. while (length--) {
  84327. result[length] = fn(array[length]);
  84328. }
  84329. return result;
  84330. }
  84331. /**
  84332. * A simple `Array#map`-like wrapper to work with domain name strings or email
  84333. * addresses.
  84334. * @private
  84335. * @param {String} domain The domain name or email address.
  84336. * @param {Function} callback The function that gets called for every
  84337. * character.
  84338. * @returns {Array} A new string of characters returned by the callback
  84339. * function.
  84340. */
  84341. function mapDomain(string, fn) {
  84342. var parts = string.split('@');
  84343. var result = '';
  84344. if (parts.length > 1) {
  84345. // In email addresses, only the domain name should be punycoded. Leave
  84346. // the local part (i.e. everything up to `@`) intact.
  84347. result = parts[0] + '@';
  84348. string = parts[1];
  84349. }
  84350. // Avoid `split(regex)` for IE8 compatibility. See #17.
  84351. string = string.replace(regexSeparators, '\x2E');
  84352. var labels = string.split('.');
  84353. var encoded = map(labels, fn).join('.');
  84354. return result + encoded;
  84355. }
  84356. /**
  84357. * Creates an array containing the numeric code points of each Unicode
  84358. * character in the string. While JavaScript uses UCS-2 internally,
  84359. * this function will convert a pair of surrogate halves (each of which
  84360. * UCS-2 exposes as separate characters) into a single code point,
  84361. * matching UTF-16.
  84362. * @see `punycode.ucs2.encode`
  84363. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  84364. * @memberOf punycode.ucs2
  84365. * @name decode
  84366. * @param {String} string The Unicode input string (UCS-2).
  84367. * @returns {Array} The new array of code points.
  84368. */
  84369. function ucs2decode(string) {
  84370. var output = [],
  84371. counter = 0,
  84372. length = string.length,
  84373. value,
  84374. extra;
  84375. while (counter < length) {
  84376. value = string.charCodeAt(counter++);
  84377. if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
  84378. // high surrogate, and there is a next character
  84379. extra = string.charCodeAt(counter++);
  84380. if ((extra & 0xFC00) == 0xDC00) { // low surrogate
  84381. output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
  84382. } else {
  84383. // unmatched surrogate; only append this code unit, in case the next
  84384. // code unit is the high surrogate of a surrogate pair
  84385. output.push(value);
  84386. counter--;
  84387. }
  84388. } else {
  84389. output.push(value);
  84390. }
  84391. }
  84392. return output;
  84393. }
  84394. /**
  84395. * Creates a string based on an array of numeric code points.
  84396. * @see `punycode.ucs2.decode`
  84397. * @memberOf punycode.ucs2
  84398. * @name encode
  84399. * @param {Array} codePoints The array of numeric code points.
  84400. * @returns {String} The new Unicode string (UCS-2).
  84401. */
  84402. function ucs2encode(array) {
  84403. return map(array, function(value) {
  84404. var output = '';
  84405. if (value > 0xFFFF) {
  84406. value -= 0x10000;
  84407. output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
  84408. value = 0xDC00 | value & 0x3FF;
  84409. }
  84410. output += stringFromCharCode(value);
  84411. return output;
  84412. }).join('');
  84413. }
  84414. /**
  84415. * Converts a basic code point into a digit/integer.
  84416. * @see `digitToBasic()`
  84417. * @private
  84418. * @param {Number} codePoint The basic numeric code point value.
  84419. * @returns {Number} The numeric value of a basic code point (for use in
  84420. * representing integers) in the range `0` to `base - 1`, or `base` if
  84421. * the code point does not represent a value.
  84422. */
  84423. function basicToDigit(codePoint) {
  84424. if (codePoint - 48 < 10) {
  84425. return codePoint - 22;
  84426. }
  84427. if (codePoint - 65 < 26) {
  84428. return codePoint - 65;
  84429. }
  84430. if (codePoint - 97 < 26) {
  84431. return codePoint - 97;
  84432. }
  84433. return base;
  84434. }
  84435. /**
  84436. * Converts a digit/integer into a basic code point.
  84437. * @see `basicToDigit()`
  84438. * @private
  84439. * @param {Number} digit The numeric value of a basic code point.
  84440. * @returns {Number} The basic code point whose value (when used for
  84441. * representing integers) is `digit`, which needs to be in the range
  84442. * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
  84443. * used; else, the lowercase form is used. The behavior is undefined
  84444. * if `flag` is non-zero and `digit` has no uppercase form.
  84445. */
  84446. function digitToBasic(digit, flag) {
  84447. // 0..25 map to ASCII a..z or A..Z
  84448. // 26..35 map to ASCII 0..9
  84449. return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
  84450. }
  84451. /**
  84452. * Bias adaptation function as per section 3.4 of RFC 3492.
  84453. * http://tools.ietf.org/html/rfc3492#section-3.4
  84454. * @private
  84455. */
  84456. function adapt(delta, numPoints, firstTime) {
  84457. var k = 0;
  84458. delta = firstTime ? floor(delta / damp) : delta >> 1;
  84459. delta += floor(delta / numPoints);
  84460. for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
  84461. delta = floor(delta / baseMinusTMin);
  84462. }
  84463. return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
  84464. }
  84465. /**
  84466. * Converts a Punycode string of ASCII-only symbols to a string of Unicode
  84467. * symbols.
  84468. * @memberOf punycode
  84469. * @param {String} input The Punycode string of ASCII-only symbols.
  84470. * @returns {String} The resulting string of Unicode symbols.
  84471. */
  84472. function decode(input) {
  84473. // Don't use UCS-2
  84474. var output = [],
  84475. inputLength = input.length,
  84476. out,
  84477. i = 0,
  84478. n = initialN,
  84479. bias = initialBias,
  84480. basic,
  84481. j,
  84482. index,
  84483. oldi,
  84484. w,
  84485. k,
  84486. digit,
  84487. t,
  84488. /** Cached calculation results */
  84489. baseMinusT;
  84490. // Handle the basic code points: let `basic` be the number of input code
  84491. // points before the last delimiter, or `0` if there is none, then copy
  84492. // the first basic code points to the output.
  84493. basic = input.lastIndexOf(delimiter);
  84494. if (basic < 0) {
  84495. basic = 0;
  84496. }
  84497. for (j = 0; j < basic; ++j) {
  84498. // if it's not a basic code point
  84499. if (input.charCodeAt(j) >= 0x80) {
  84500. error('not-basic');
  84501. }
  84502. output.push(input.charCodeAt(j));
  84503. }
  84504. // Main decoding loop: start just after the last delimiter if any basic code
  84505. // points were copied; start at the beginning otherwise.
  84506. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
  84507. // `index` is the index of the next character to be consumed.
  84508. // Decode a generalized variable-length integer into `delta`,
  84509. // which gets added to `i`. The overflow checking is easier
  84510. // if we increase `i` as we go, then subtract off its starting
  84511. // value at the end to obtain `delta`.
  84512. for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
  84513. if (index >= inputLength) {
  84514. error('invalid-input');
  84515. }
  84516. digit = basicToDigit(input.charCodeAt(index++));
  84517. if (digit >= base || digit > floor((maxInt - i) / w)) {
  84518. error('overflow');
  84519. }
  84520. i += digit * w;
  84521. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  84522. if (digit < t) {
  84523. break;
  84524. }
  84525. baseMinusT = base - t;
  84526. if (w > floor(maxInt / baseMinusT)) {
  84527. error('overflow');
  84528. }
  84529. w *= baseMinusT;
  84530. }
  84531. out = output.length + 1;
  84532. bias = adapt(i - oldi, out, oldi == 0);
  84533. // `i` was supposed to wrap around from `out` to `0`,
  84534. // incrementing `n` each time, so we'll fix that now:
  84535. if (floor(i / out) > maxInt - n) {
  84536. error('overflow');
  84537. }
  84538. n += floor(i / out);
  84539. i %= out;
  84540. // Insert `n` at position `i` of the output
  84541. output.splice(i++, 0, n);
  84542. }
  84543. return ucs2encode(output);
  84544. }
  84545. /**
  84546. * Converts a string of Unicode symbols (e.g. a domain name label) to a
  84547. * Punycode string of ASCII-only symbols.
  84548. * @memberOf punycode
  84549. * @param {String} input The string of Unicode symbols.
  84550. * @returns {String} The resulting Punycode string of ASCII-only symbols.
  84551. */
  84552. function encode(input) {
  84553. var n,
  84554. delta,
  84555. handledCPCount,
  84556. basicLength,
  84557. bias,
  84558. j,
  84559. m,
  84560. q,
  84561. k,
  84562. t,
  84563. currentValue,
  84564. output = [],
  84565. /** `inputLength` will hold the number of code points in `input`. */
  84566. inputLength,
  84567. /** Cached calculation results */
  84568. handledCPCountPlusOne,
  84569. baseMinusT,
  84570. qMinusT;
  84571. // Convert the input in UCS-2 to Unicode
  84572. input = ucs2decode(input);
  84573. // Cache the length
  84574. inputLength = input.length;
  84575. // Initialize the state
  84576. n = initialN;
  84577. delta = 0;
  84578. bias = initialBias;
  84579. // Handle the basic code points
  84580. for (j = 0; j < inputLength; ++j) {
  84581. currentValue = input[j];
  84582. if (currentValue < 0x80) {
  84583. output.push(stringFromCharCode(currentValue));
  84584. }
  84585. }
  84586. handledCPCount = basicLength = output.length;
  84587. // `handledCPCount` is the number of code points that have been handled;
  84588. // `basicLength` is the number of basic code points.
  84589. // Finish the basic string - if it is not empty - with a delimiter
  84590. if (basicLength) {
  84591. output.push(delimiter);
  84592. }
  84593. // Main encoding loop:
  84594. while (handledCPCount < inputLength) {
  84595. // All non-basic code points < n have been handled already. Find the next
  84596. // larger one:
  84597. for (m = maxInt, j = 0; j < inputLength; ++j) {
  84598. currentValue = input[j];
  84599. if (currentValue >= n && currentValue < m) {
  84600. m = currentValue;
  84601. }
  84602. }
  84603. // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
  84604. // but guard against overflow
  84605. handledCPCountPlusOne = handledCPCount + 1;
  84606. if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
  84607. error('overflow');
  84608. }
  84609. delta += (m - n) * handledCPCountPlusOne;
  84610. n = m;
  84611. for (j = 0; j < inputLength; ++j) {
  84612. currentValue = input[j];
  84613. if (currentValue < n && ++delta > maxInt) {
  84614. error('overflow');
  84615. }
  84616. if (currentValue == n) {
  84617. // Represent delta as a generalized variable-length integer
  84618. for (q = delta, k = base; /* no condition */; k += base) {
  84619. t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
  84620. if (q < t) {
  84621. break;
  84622. }
  84623. qMinusT = q - t;
  84624. baseMinusT = base - t;
  84625. output.push(
  84626. stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
  84627. );
  84628. q = floor(qMinusT / baseMinusT);
  84629. }
  84630. output.push(stringFromCharCode(digitToBasic(q, 0)));
  84631. bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
  84632. delta = 0;
  84633. ++handledCPCount;
  84634. }
  84635. }
  84636. ++delta;
  84637. ++n;
  84638. }
  84639. return output.join('');
  84640. }
  84641. /**
  84642. * Converts a Punycode string representing a domain name or an email address
  84643. * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
  84644. * it doesn't matter if you call it on a string that has already been
  84645. * converted to Unicode.
  84646. * @memberOf punycode
  84647. * @param {String} input The Punycoded domain name or email address to
  84648. * convert to Unicode.
  84649. * @returns {String} The Unicode representation of the given Punycode
  84650. * string.
  84651. */
  84652. function toUnicode(input) {
  84653. return mapDomain(input, function(string) {
  84654. return regexPunycode.test(string)
  84655. ? decode(string.slice(4).toLowerCase())
  84656. : string;
  84657. });
  84658. }
  84659. /**
  84660. * Converts a Unicode string representing a domain name or an email address to
  84661. * Punycode. Only the non-ASCII parts of the domain name will be converted,
  84662. * i.e. it doesn't matter if you call it with a domain that's already in
  84663. * ASCII.
  84664. * @memberOf punycode
  84665. * @param {String} input The domain name or email address to convert, as a
  84666. * Unicode string.
  84667. * @returns {String} The Punycode representation of the given domain name or
  84668. * email address.
  84669. */
  84670. function toASCII(input) {
  84671. return mapDomain(input, function(string) {
  84672. return regexNonASCII.test(string)
  84673. ? 'xn--' + encode(string)
  84674. : string;
  84675. });
  84676. }
  84677. /*--------------------------------------------------------------------------*/
  84678. /** Define the public API */
  84679. punycode = {
  84680. /**
  84681. * A string representing the current Punycode.js version number.
  84682. * @memberOf punycode
  84683. * @type String
  84684. */
  84685. 'version': '1.3.2',
  84686. /**
  84687. * An object of methods to convert from JavaScript's internal character
  84688. * representation (UCS-2) to Unicode code points, and back.
  84689. * @see <https://mathiasbynens.be/notes/javascript-encoding>
  84690. * @memberOf punycode
  84691. * @type Object
  84692. */
  84693. 'ucs2': {
  84694. 'decode': ucs2decode,
  84695. 'encode': ucs2encode
  84696. },
  84697. 'decode': decode,
  84698. 'encode': encode,
  84699. 'toASCII': toASCII,
  84700. 'toUnicode': toUnicode
  84701. };
  84702. /** Expose `punycode` */
  84703. // Some AMD build optimizers, like r.js, check for specific condition patterns
  84704. // like the following:
  84705. if (
  84706. true
  84707. ) {
  84708. !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
  84709. return punycode;
  84710. }).call(exports, __webpack_require__, exports, module),
  84711. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  84712. } else {}
  84713. }(this));
  84714. /***/ }),
  84715. /***/ 8575:
  84716. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  84717. "use strict";
  84718. // Copyright Joyent, Inc. and other Node contributors.
  84719. //
  84720. // Permission is hereby granted, free of charge, to any person obtaining a
  84721. // copy of this software and associated documentation files (the
  84722. // "Software"), to deal in the Software without restriction, including
  84723. // without limitation the rights to use, copy, modify, merge, publish,
  84724. // distribute, sublicense, and/or sell copies of the Software, and to permit
  84725. // persons to whom the Software is furnished to do so, subject to the
  84726. // following conditions:
  84727. //
  84728. // The above copyright notice and this permission notice shall be included
  84729. // in all copies or substantial portions of the Software.
  84730. //
  84731. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  84732. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  84733. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  84734. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  84735. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  84736. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  84737. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  84738. var punycode = __webpack_require__(52511);
  84739. var util = __webpack_require__(62502);
  84740. exports.parse = urlParse;
  84741. exports.resolve = urlResolve;
  84742. exports.resolveObject = urlResolveObject;
  84743. exports.format = urlFormat;
  84744. exports.Url = Url;
  84745. function Url() {
  84746. this.protocol = null;
  84747. this.slashes = null;
  84748. this.auth = null;
  84749. this.host = null;
  84750. this.port = null;
  84751. this.hostname = null;
  84752. this.hash = null;
  84753. this.search = null;
  84754. this.query = null;
  84755. this.pathname = null;
  84756. this.path = null;
  84757. this.href = null;
  84758. }
  84759. // Reference: RFC 3986, RFC 1808, RFC 2396
  84760. // define these here so at least they only have to be
  84761. // compiled once on the first module load.
  84762. var protocolPattern = /^([a-z0-9.+-]+:)/i,
  84763. portPattern = /:[0-9]*$/,
  84764. // Special case for a simple path URL
  84765. simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
  84766. // RFC 2396: characters reserved for delimiting URLs.
  84767. // We actually just auto-escape these.
  84768. delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
  84769. // RFC 2396: characters not allowed for various reasons.
  84770. unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
  84771. // Allowed by RFCs, but cause of XSS attacks. Always escape these.
  84772. autoEscape = ['\''].concat(unwise),
  84773. // Characters that are never ever allowed in a hostname.
  84774. // Note that any invalid chars are also handled, but these
  84775. // are the ones that are *expected* to be seen, so we fast-path
  84776. // them.
  84777. nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
  84778. hostEndingChars = ['/', '?', '#'],
  84779. hostnameMaxLen = 255,
  84780. hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
  84781. hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
  84782. // protocols that can allow "unsafe" and "unwise" chars.
  84783. unsafeProtocol = {
  84784. 'javascript': true,
  84785. 'javascript:': true
  84786. },
  84787. // protocols that never have a hostname.
  84788. hostlessProtocol = {
  84789. 'javascript': true,
  84790. 'javascript:': true
  84791. },
  84792. // protocols that always contain a // bit.
  84793. slashedProtocol = {
  84794. 'http': true,
  84795. 'https': true,
  84796. 'ftp': true,
  84797. 'gopher': true,
  84798. 'file': true,
  84799. 'http:': true,
  84800. 'https:': true,
  84801. 'ftp:': true,
  84802. 'gopher:': true,
  84803. 'file:': true
  84804. },
  84805. querystring = __webpack_require__(17673);
  84806. function urlParse(url, parseQueryString, slashesDenoteHost) {
  84807. if (url && util.isObject(url) && url instanceof Url) return url;
  84808. var u = new Url;
  84809. u.parse(url, parseQueryString, slashesDenoteHost);
  84810. return u;
  84811. }
  84812. Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
  84813. if (!util.isString(url)) {
  84814. throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
  84815. }
  84816. // Copy chrome, IE, opera backslash-handling behavior.
  84817. // Back slashes before the query string get converted to forward slashes
  84818. // See: https://code.google.com/p/chromium/issues/detail?id=25916
  84819. var queryIndex = url.indexOf('?'),
  84820. splitter =
  84821. (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
  84822. uSplit = url.split(splitter),
  84823. slashRegex = /\\/g;
  84824. uSplit[0] = uSplit[0].replace(slashRegex, '/');
  84825. url = uSplit.join(splitter);
  84826. var rest = url;
  84827. // trim before proceeding.
  84828. // This is to support parse stuff like " http://foo.com \n"
  84829. rest = rest.trim();
  84830. if (!slashesDenoteHost && url.split('#').length === 1) {
  84831. // Try fast path regexp
  84832. var simplePath = simplePathPattern.exec(rest);
  84833. if (simplePath) {
  84834. this.path = rest;
  84835. this.href = rest;
  84836. this.pathname = simplePath[1];
  84837. if (simplePath[2]) {
  84838. this.search = simplePath[2];
  84839. if (parseQueryString) {
  84840. this.query = querystring.parse(this.search.substr(1));
  84841. } else {
  84842. this.query = this.search.substr(1);
  84843. }
  84844. } else if (parseQueryString) {
  84845. this.search = '';
  84846. this.query = {};
  84847. }
  84848. return this;
  84849. }
  84850. }
  84851. var proto = protocolPattern.exec(rest);
  84852. if (proto) {
  84853. proto = proto[0];
  84854. var lowerProto = proto.toLowerCase();
  84855. this.protocol = lowerProto;
  84856. rest = rest.substr(proto.length);
  84857. }
  84858. // figure out if it's got a host
  84859. // user@server is *always* interpreted as a hostname, and url
  84860. // resolution will treat //foo/bar as host=foo,path=bar because that's
  84861. // how the browser resolves relative URLs.
  84862. if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
  84863. var slashes = rest.substr(0, 2) === '//';
  84864. if (slashes && !(proto && hostlessProtocol[proto])) {
  84865. rest = rest.substr(2);
  84866. this.slashes = true;
  84867. }
  84868. }
  84869. if (!hostlessProtocol[proto] &&
  84870. (slashes || (proto && !slashedProtocol[proto]))) {
  84871. // there's a hostname.
  84872. // the first instance of /, ?, ;, or # ends the host.
  84873. //
  84874. // If there is an @ in the hostname, then non-host chars *are* allowed
  84875. // to the left of the last @ sign, unless some host-ending character
  84876. // comes *before* the @-sign.
  84877. // URLs are obnoxious.
  84878. //
  84879. // ex:
  84880. // http://a@b@c/ => user:a@b host:c
  84881. // http://a@b?@c => user:a host:c path:/?@c
  84882. // v0.12 TODO(isaacs): This is not quite how Chrome does things.
  84883. // Review our test case against browsers more comprehensively.
  84884. // find the first instance of any hostEndingChars
  84885. var hostEnd = -1;
  84886. for (var i = 0; i < hostEndingChars.length; i++) {
  84887. var hec = rest.indexOf(hostEndingChars[i]);
  84888. if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
  84889. hostEnd = hec;
  84890. }
  84891. // at this point, either we have an explicit point where the
  84892. // auth portion cannot go past, or the last @ char is the decider.
  84893. var auth, atSign;
  84894. if (hostEnd === -1) {
  84895. // atSign can be anywhere.
  84896. atSign = rest.lastIndexOf('@');
  84897. } else {
  84898. // atSign must be in auth portion.
  84899. // http://a@b/c@d => host:b auth:a path:/c@d
  84900. atSign = rest.lastIndexOf('@', hostEnd);
  84901. }
  84902. // Now we have a portion which is definitely the auth.
  84903. // Pull that off.
  84904. if (atSign !== -1) {
  84905. auth = rest.slice(0, atSign);
  84906. rest = rest.slice(atSign + 1);
  84907. this.auth = decodeURIComponent(auth);
  84908. }
  84909. // the host is the remaining to the left of the first non-host char
  84910. hostEnd = -1;
  84911. for (var i = 0; i < nonHostChars.length; i++) {
  84912. var hec = rest.indexOf(nonHostChars[i]);
  84913. if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
  84914. hostEnd = hec;
  84915. }
  84916. // if we still have not hit it, then the entire thing is a host.
  84917. if (hostEnd === -1)
  84918. hostEnd = rest.length;
  84919. this.host = rest.slice(0, hostEnd);
  84920. rest = rest.slice(hostEnd);
  84921. // pull out port.
  84922. this.parseHost();
  84923. // we've indicated that there is a hostname,
  84924. // so even if it's empty, it has to be present.
  84925. this.hostname = this.hostname || '';
  84926. // if hostname begins with [ and ends with ]
  84927. // assume that it's an IPv6 address.
  84928. var ipv6Hostname = this.hostname[0] === '[' &&
  84929. this.hostname[this.hostname.length - 1] === ']';
  84930. // validate a little.
  84931. if (!ipv6Hostname) {
  84932. var hostparts = this.hostname.split(/\./);
  84933. for (var i = 0, l = hostparts.length; i < l; i++) {
  84934. var part = hostparts[i];
  84935. if (!part) continue;
  84936. if (!part.match(hostnamePartPattern)) {
  84937. var newpart = '';
  84938. for (var j = 0, k = part.length; j < k; j++) {
  84939. if (part.charCodeAt(j) > 127) {
  84940. // we replace non-ASCII char with a temporary placeholder
  84941. // we need this to make sure size of hostname is not
  84942. // broken by replacing non-ASCII by nothing
  84943. newpart += 'x';
  84944. } else {
  84945. newpart += part[j];
  84946. }
  84947. }
  84948. // we test again with ASCII char only
  84949. if (!newpart.match(hostnamePartPattern)) {
  84950. var validParts = hostparts.slice(0, i);
  84951. var notHost = hostparts.slice(i + 1);
  84952. var bit = part.match(hostnamePartStart);
  84953. if (bit) {
  84954. validParts.push(bit[1]);
  84955. notHost.unshift(bit[2]);
  84956. }
  84957. if (notHost.length) {
  84958. rest = '/' + notHost.join('.') + rest;
  84959. }
  84960. this.hostname = validParts.join('.');
  84961. break;
  84962. }
  84963. }
  84964. }
  84965. }
  84966. if (this.hostname.length > hostnameMaxLen) {
  84967. this.hostname = '';
  84968. } else {
  84969. // hostnames are always lower case.
  84970. this.hostname = this.hostname.toLowerCase();
  84971. }
  84972. if (!ipv6Hostname) {
  84973. // IDNA Support: Returns a punycoded representation of "domain".
  84974. // It only converts parts of the domain name that
  84975. // have non-ASCII characters, i.e. it doesn't matter if
  84976. // you call it with a domain that already is ASCII-only.
  84977. this.hostname = punycode.toASCII(this.hostname);
  84978. }
  84979. var p = this.port ? ':' + this.port : '';
  84980. var h = this.hostname || '';
  84981. this.host = h + p;
  84982. this.href += this.host;
  84983. // strip [ and ] from the hostname
  84984. // the host field still retains them, though
  84985. if (ipv6Hostname) {
  84986. this.hostname = this.hostname.substr(1, this.hostname.length - 2);
  84987. if (rest[0] !== '/') {
  84988. rest = '/' + rest;
  84989. }
  84990. }
  84991. }
  84992. // now rest is set to the post-host stuff.
  84993. // chop off any delim chars.
  84994. if (!unsafeProtocol[lowerProto]) {
  84995. // First, make 100% sure that any "autoEscape" chars get
  84996. // escaped, even if encodeURIComponent doesn't think they
  84997. // need to be.
  84998. for (var i = 0, l = autoEscape.length; i < l; i++) {
  84999. var ae = autoEscape[i];
  85000. if (rest.indexOf(ae) === -1)
  85001. continue;
  85002. var esc = encodeURIComponent(ae);
  85003. if (esc === ae) {
  85004. esc = escape(ae);
  85005. }
  85006. rest = rest.split(ae).join(esc);
  85007. }
  85008. }
  85009. // chop off from the tail first.
  85010. var hash = rest.indexOf('#');
  85011. if (hash !== -1) {
  85012. // got a fragment string.
  85013. this.hash = rest.substr(hash);
  85014. rest = rest.slice(0, hash);
  85015. }
  85016. var qm = rest.indexOf('?');
  85017. if (qm !== -1) {
  85018. this.search = rest.substr(qm);
  85019. this.query = rest.substr(qm + 1);
  85020. if (parseQueryString) {
  85021. this.query = querystring.parse(this.query);
  85022. }
  85023. rest = rest.slice(0, qm);
  85024. } else if (parseQueryString) {
  85025. // no query string, but parseQueryString still requested
  85026. this.search = '';
  85027. this.query = {};
  85028. }
  85029. if (rest) this.pathname = rest;
  85030. if (slashedProtocol[lowerProto] &&
  85031. this.hostname && !this.pathname) {
  85032. this.pathname = '/';
  85033. }
  85034. //to support http.request
  85035. if (this.pathname || this.search) {
  85036. var p = this.pathname || '';
  85037. var s = this.search || '';
  85038. this.path = p + s;
  85039. }
  85040. // finally, reconstruct the href based on what has been validated.
  85041. this.href = this.format();
  85042. return this;
  85043. };
  85044. // format a parsed object into a url string
  85045. function urlFormat(obj) {
  85046. // ensure it's an object, and not a string url.
  85047. // If it's an obj, this is a no-op.
  85048. // this way, you can call url_format() on strings
  85049. // to clean up potentially wonky urls.
  85050. if (util.isString(obj)) obj = urlParse(obj);
  85051. if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
  85052. return obj.format();
  85053. }
  85054. Url.prototype.format = function() {
  85055. var auth = this.auth || '';
  85056. if (auth) {
  85057. auth = encodeURIComponent(auth);
  85058. auth = auth.replace(/%3A/i, ':');
  85059. auth += '@';
  85060. }
  85061. var protocol = this.protocol || '',
  85062. pathname = this.pathname || '',
  85063. hash = this.hash || '',
  85064. host = false,
  85065. query = '';
  85066. if (this.host) {
  85067. host = auth + this.host;
  85068. } else if (this.hostname) {
  85069. host = auth + (this.hostname.indexOf(':') === -1 ?
  85070. this.hostname :
  85071. '[' + this.hostname + ']');
  85072. if (this.port) {
  85073. host += ':' + this.port;
  85074. }
  85075. }
  85076. if (this.query &&
  85077. util.isObject(this.query) &&
  85078. Object.keys(this.query).length) {
  85079. query = querystring.stringify(this.query);
  85080. }
  85081. var search = this.search || (query && ('?' + query)) || '';
  85082. if (protocol && protocol.substr(-1) !== ':') protocol += ':';
  85083. // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.
  85084. // unless they had them to begin with.
  85085. if (this.slashes ||
  85086. (!protocol || slashedProtocol[protocol]) && host !== false) {
  85087. host = '//' + (host || '');
  85088. if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
  85089. } else if (!host) {
  85090. host = '';
  85091. }
  85092. if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
  85093. if (search && search.charAt(0) !== '?') search = '?' + search;
  85094. pathname = pathname.replace(/[?#]/g, function(match) {
  85095. return encodeURIComponent(match);
  85096. });
  85097. search = search.replace('#', '%23');
  85098. return protocol + host + pathname + search + hash;
  85099. };
  85100. function urlResolve(source, relative) {
  85101. return urlParse(source, false, true).resolve(relative);
  85102. }
  85103. Url.prototype.resolve = function(relative) {
  85104. return this.resolveObject(urlParse(relative, false, true)).format();
  85105. };
  85106. function urlResolveObject(source, relative) {
  85107. if (!source) return relative;
  85108. return urlParse(source, false, true).resolveObject(relative);
  85109. }
  85110. Url.prototype.resolveObject = function(relative) {
  85111. if (util.isString(relative)) {
  85112. var rel = new Url();
  85113. rel.parse(relative, false, true);
  85114. relative = rel;
  85115. }
  85116. var result = new Url();
  85117. var tkeys = Object.keys(this);
  85118. for (var tk = 0; tk < tkeys.length; tk++) {
  85119. var tkey = tkeys[tk];
  85120. result[tkey] = this[tkey];
  85121. }
  85122. // hash is always overridden, no matter what.
  85123. // even href="" will remove it.
  85124. result.hash = relative.hash;
  85125. // if the relative url is empty, then there's nothing left to do here.
  85126. if (relative.href === '') {
  85127. result.href = result.format();
  85128. return result;
  85129. }
  85130. // hrefs like //foo/bar always cut to the protocol.
  85131. if (relative.slashes && !relative.protocol) {
  85132. // take everything except the protocol from relative
  85133. var rkeys = Object.keys(relative);
  85134. for (var rk = 0; rk < rkeys.length; rk++) {
  85135. var rkey = rkeys[rk];
  85136. if (rkey !== 'protocol')
  85137. result[rkey] = relative[rkey];
  85138. }
  85139. //urlParse appends trailing / to urls like http://www.example.com
  85140. if (slashedProtocol[result.protocol] &&
  85141. result.hostname && !result.pathname) {
  85142. result.path = result.pathname = '/';
  85143. }
  85144. result.href = result.format();
  85145. return result;
  85146. }
  85147. if (relative.protocol && relative.protocol !== result.protocol) {
  85148. // if it's a known url protocol, then changing
  85149. // the protocol does weird things
  85150. // first, if it's not file:, then we MUST have a host,
  85151. // and if there was a path
  85152. // to begin with, then we MUST have a path.
  85153. // if it is file:, then the host is dropped,
  85154. // because that's known to be hostless.
  85155. // anything else is assumed to be absolute.
  85156. if (!slashedProtocol[relative.protocol]) {
  85157. var keys = Object.keys(relative);
  85158. for (var v = 0; v < keys.length; v++) {
  85159. var k = keys[v];
  85160. result[k] = relative[k];
  85161. }
  85162. result.href = result.format();
  85163. return result;
  85164. }
  85165. result.protocol = relative.protocol;
  85166. if (!relative.host && !hostlessProtocol[relative.protocol]) {
  85167. var relPath = (relative.pathname || '').split('/');
  85168. while (relPath.length && !(relative.host = relPath.shift()));
  85169. if (!relative.host) relative.host = '';
  85170. if (!relative.hostname) relative.hostname = '';
  85171. if (relPath[0] !== '') relPath.unshift('');
  85172. if (relPath.length < 2) relPath.unshift('');
  85173. result.pathname = relPath.join('/');
  85174. } else {
  85175. result.pathname = relative.pathname;
  85176. }
  85177. result.search = relative.search;
  85178. result.query = relative.query;
  85179. result.host = relative.host || '';
  85180. result.auth = relative.auth;
  85181. result.hostname = relative.hostname || relative.host;
  85182. result.port = relative.port;
  85183. // to support http.request
  85184. if (result.pathname || result.search) {
  85185. var p = result.pathname || '';
  85186. var s = result.search || '';
  85187. result.path = p + s;
  85188. }
  85189. result.slashes = result.slashes || relative.slashes;
  85190. result.href = result.format();
  85191. return result;
  85192. }
  85193. var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
  85194. isRelAbs = (
  85195. relative.host ||
  85196. relative.pathname && relative.pathname.charAt(0) === '/'
  85197. ),
  85198. mustEndAbs = (isRelAbs || isSourceAbs ||
  85199. (result.host && relative.pathname)),
  85200. removeAllDots = mustEndAbs,
  85201. srcPath = result.pathname && result.pathname.split('/') || [],
  85202. relPath = relative.pathname && relative.pathname.split('/') || [],
  85203. psychotic = result.protocol && !slashedProtocol[result.protocol];
  85204. // if the url is a non-slashed url, then relative
  85205. // links like ../.. should be able
  85206. // to crawl up to the hostname, as well. This is strange.
  85207. // result.protocol has already been set by now.
  85208. // Later on, put the first path part into the host field.
  85209. if (psychotic) {
  85210. result.hostname = '';
  85211. result.port = null;
  85212. if (result.host) {
  85213. if (srcPath[0] === '') srcPath[0] = result.host;
  85214. else srcPath.unshift(result.host);
  85215. }
  85216. result.host = '';
  85217. if (relative.protocol) {
  85218. relative.hostname = null;
  85219. relative.port = null;
  85220. if (relative.host) {
  85221. if (relPath[0] === '') relPath[0] = relative.host;
  85222. else relPath.unshift(relative.host);
  85223. }
  85224. relative.host = null;
  85225. }
  85226. mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
  85227. }
  85228. if (isRelAbs) {
  85229. // it's absolute.
  85230. result.host = (relative.host || relative.host === '') ?
  85231. relative.host : result.host;
  85232. result.hostname = (relative.hostname || relative.hostname === '') ?
  85233. relative.hostname : result.hostname;
  85234. result.search = relative.search;
  85235. result.query = relative.query;
  85236. srcPath = relPath;
  85237. // fall through to the dot-handling below.
  85238. } else if (relPath.length) {
  85239. // it's relative
  85240. // throw away the existing file, and take the new path instead.
  85241. if (!srcPath) srcPath = [];
  85242. srcPath.pop();
  85243. srcPath = srcPath.concat(relPath);
  85244. result.search = relative.search;
  85245. result.query = relative.query;
  85246. } else if (!util.isNullOrUndefined(relative.search)) {
  85247. // just pull out the search.
  85248. // like href='?foo'.
  85249. // Put this after the other two cases because it simplifies the booleans
  85250. if (psychotic) {
  85251. result.hostname = result.host = srcPath.shift();
  85252. //occationaly the auth can get stuck only in host
  85253. //this especially happens in cases like
  85254. //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
  85255. var authInHost = result.host && result.host.indexOf('@') > 0 ?
  85256. result.host.split('@') : false;
  85257. if (authInHost) {
  85258. result.auth = authInHost.shift();
  85259. result.host = result.hostname = authInHost.shift();
  85260. }
  85261. }
  85262. result.search = relative.search;
  85263. result.query = relative.query;
  85264. //to support http.request
  85265. if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
  85266. result.path = (result.pathname ? result.pathname : '') +
  85267. (result.search ? result.search : '');
  85268. }
  85269. result.href = result.format();
  85270. return result;
  85271. }
  85272. if (!srcPath.length) {
  85273. // no path at all. easy.
  85274. // we've already handled the other stuff above.
  85275. result.pathname = null;
  85276. //to support http.request
  85277. if (result.search) {
  85278. result.path = '/' + result.search;
  85279. } else {
  85280. result.path = null;
  85281. }
  85282. result.href = result.format();
  85283. return result;
  85284. }
  85285. // if a url ENDs in . or .., then it must get a trailing slash.
  85286. // however, if it ends in anything else non-slashy,
  85287. // then it must NOT get a trailing slash.
  85288. var last = srcPath.slice(-1)[0];
  85289. var hasTrailingSlash = (
  85290. (result.host || relative.host || srcPath.length > 1) &&
  85291. (last === '.' || last === '..') || last === '');
  85292. // strip single dots, resolve double dots to parent dir
  85293. // if the path tries to go above the root, `up` ends up > 0
  85294. var up = 0;
  85295. for (var i = srcPath.length; i >= 0; i--) {
  85296. last = srcPath[i];
  85297. if (last === '.') {
  85298. srcPath.splice(i, 1);
  85299. } else if (last === '..') {
  85300. srcPath.splice(i, 1);
  85301. up++;
  85302. } else if (up) {
  85303. srcPath.splice(i, 1);
  85304. up--;
  85305. }
  85306. }
  85307. // if the path is allowed to go above the root, restore leading ..s
  85308. if (!mustEndAbs && !removeAllDots) {
  85309. for (; up--; up) {
  85310. srcPath.unshift('..');
  85311. }
  85312. }
  85313. if (mustEndAbs && srcPath[0] !== '' &&
  85314. (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
  85315. srcPath.unshift('');
  85316. }
  85317. if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
  85318. srcPath.push('');
  85319. }
  85320. var isAbsolute = srcPath[0] === '' ||
  85321. (srcPath[0] && srcPath[0].charAt(0) === '/');
  85322. // put the host back
  85323. if (psychotic) {
  85324. result.hostname = result.host = isAbsolute ? '' :
  85325. srcPath.length ? srcPath.shift() : '';
  85326. //occationaly the auth can get stuck only in host
  85327. //this especially happens in cases like
  85328. //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
  85329. var authInHost = result.host && result.host.indexOf('@') > 0 ?
  85330. result.host.split('@') : false;
  85331. if (authInHost) {
  85332. result.auth = authInHost.shift();
  85333. result.host = result.hostname = authInHost.shift();
  85334. }
  85335. }
  85336. mustEndAbs = mustEndAbs || (result.host && srcPath.length);
  85337. if (mustEndAbs && !isAbsolute) {
  85338. srcPath.unshift('');
  85339. }
  85340. if (!srcPath.length) {
  85341. result.pathname = null;
  85342. result.path = null;
  85343. } else {
  85344. result.pathname = srcPath.join('/');
  85345. }
  85346. //to support request.http
  85347. if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
  85348. result.path = (result.pathname ? result.pathname : '') +
  85349. (result.search ? result.search : '');
  85350. }
  85351. result.auth = relative.auth || result.auth;
  85352. result.slashes = result.slashes || relative.slashes;
  85353. result.href = result.format();
  85354. return result;
  85355. };
  85356. Url.prototype.parseHost = function() {
  85357. var host = this.host;
  85358. var port = portPattern.exec(host);
  85359. if (port) {
  85360. port = port[0];
  85361. if (port !== ':') {
  85362. this.port = port.substr(1);
  85363. }
  85364. host = host.substr(0, host.length - port.length);
  85365. }
  85366. if (host) this.hostname = host;
  85367. };
  85368. /***/ }),
  85369. /***/ 62502:
  85370. /***/ ((module) => {
  85371. "use strict";
  85372. module.exports = {
  85373. isString: function(arg) {
  85374. return typeof(arg) === 'string';
  85375. },
  85376. isObject: function(arg) {
  85377. return typeof(arg) === 'object' && arg !== null;
  85378. },
  85379. isNull: function(arg) {
  85380. return arg === null;
  85381. },
  85382. isNullOrUndefined: function(arg) {
  85383. return arg == null;
  85384. }
  85385. };
  85386. /***/ }),
  85387. /***/ 94927:
  85388. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  85389. /**
  85390. * Module exports.
  85391. */
  85392. module.exports = deprecate;
  85393. /**
  85394. * Mark that a method should not be used.
  85395. * Returns a modified function which warns once by default.
  85396. *
  85397. * If `localStorage.noDeprecation = true` is set, then it is a no-op.
  85398. *
  85399. * If `localStorage.throwDeprecation = true` is set, then deprecated functions
  85400. * will throw an Error when invoked.
  85401. *
  85402. * If `localStorage.traceDeprecation = true` is set, then deprecated functions
  85403. * will invoke `console.trace()` instead of `console.error()`.
  85404. *
  85405. * @param {Function} fn - the function to deprecate
  85406. * @param {String} msg - the string to print to the console when `fn` is invoked
  85407. * @returns {Function} a new "deprecated" version of `fn`
  85408. * @api public
  85409. */
  85410. function deprecate (fn, msg) {
  85411. if (config('noDeprecation')) {
  85412. return fn;
  85413. }
  85414. var warned = false;
  85415. function deprecated() {
  85416. if (!warned) {
  85417. if (config('throwDeprecation')) {
  85418. throw new Error(msg);
  85419. } else if (config('traceDeprecation')) {
  85420. console.trace(msg);
  85421. } else {
  85422. console.warn(msg);
  85423. }
  85424. warned = true;
  85425. }
  85426. return fn.apply(this, arguments);
  85427. }
  85428. return deprecated;
  85429. }
  85430. /**
  85431. * Checks `localStorage` for boolean values for the given `name`.
  85432. *
  85433. * @param {String} name
  85434. * @returns {Boolean}
  85435. * @api private
  85436. */
  85437. function config (name) {
  85438. // accessing global.localStorage can trigger a DOMException in sandboxed iframes
  85439. try {
  85440. if (!__webpack_require__.g.localStorage) return false;
  85441. } catch (_) {
  85442. return false;
  85443. }
  85444. var val = __webpack_require__.g.localStorage[name];
  85445. if (null == val) return false;
  85446. return String(val).toLowerCase() === 'true';
  85447. }
  85448. /***/ }),
  85449. /***/ 20384:
  85450. /***/ ((module) => {
  85451. module.exports = function isBuffer(arg) {
  85452. return arg && typeof arg === 'object'
  85453. && typeof arg.copy === 'function'
  85454. && typeof arg.fill === 'function'
  85455. && typeof arg.readUInt8 === 'function';
  85456. }
  85457. /***/ }),
  85458. /***/ 55955:
  85459. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  85460. "use strict";
  85461. // Currently in sync with Node.js lib/internal/util/types.js
  85462. // https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9
  85463. var isArgumentsObject = __webpack_require__(82584);
  85464. var isGeneratorFunction = __webpack_require__(48662);
  85465. var whichTypedArray = __webpack_require__(86430);
  85466. var isTypedArray = __webpack_require__(85692);
  85467. function uncurryThis(f) {
  85468. return f.call.bind(f);
  85469. }
  85470. var BigIntSupported = typeof BigInt !== 'undefined';
  85471. var SymbolSupported = typeof Symbol !== 'undefined';
  85472. var ObjectToString = uncurryThis(Object.prototype.toString);
  85473. var numberValue = uncurryThis(Number.prototype.valueOf);
  85474. var stringValue = uncurryThis(String.prototype.valueOf);
  85475. var booleanValue = uncurryThis(Boolean.prototype.valueOf);
  85476. if (BigIntSupported) {
  85477. var bigIntValue = uncurryThis(BigInt.prototype.valueOf);
  85478. }
  85479. if (SymbolSupported) {
  85480. var symbolValue = uncurryThis(Symbol.prototype.valueOf);
  85481. }
  85482. function checkBoxedPrimitive(value, prototypeValueOf) {
  85483. if (typeof value !== 'object') {
  85484. return false;
  85485. }
  85486. try {
  85487. prototypeValueOf(value);
  85488. return true;
  85489. } catch(e) {
  85490. return false;
  85491. }
  85492. }
  85493. exports.isArgumentsObject = isArgumentsObject;
  85494. exports.isGeneratorFunction = isGeneratorFunction;
  85495. exports.isTypedArray = isTypedArray;
  85496. // Taken from here and modified for better browser support
  85497. // https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js
  85498. function isPromise(input) {
  85499. return (
  85500. (
  85501. typeof Promise !== 'undefined' &&
  85502. input instanceof Promise
  85503. ) ||
  85504. (
  85505. input !== null &&
  85506. typeof input === 'object' &&
  85507. typeof input.then === 'function' &&
  85508. typeof input.catch === 'function'
  85509. )
  85510. );
  85511. }
  85512. exports.isPromise = isPromise;
  85513. function isArrayBufferView(value) {
  85514. if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {
  85515. return ArrayBuffer.isView(value);
  85516. }
  85517. return (
  85518. isTypedArray(value) ||
  85519. isDataView(value)
  85520. );
  85521. }
  85522. exports.isArrayBufferView = isArrayBufferView;
  85523. function isUint8Array(value) {
  85524. return whichTypedArray(value) === 'Uint8Array';
  85525. }
  85526. exports.isUint8Array = isUint8Array;
  85527. function isUint8ClampedArray(value) {
  85528. return whichTypedArray(value) === 'Uint8ClampedArray';
  85529. }
  85530. exports.isUint8ClampedArray = isUint8ClampedArray;
  85531. function isUint16Array(value) {
  85532. return whichTypedArray(value) === 'Uint16Array';
  85533. }
  85534. exports.isUint16Array = isUint16Array;
  85535. function isUint32Array(value) {
  85536. return whichTypedArray(value) === 'Uint32Array';
  85537. }
  85538. exports.isUint32Array = isUint32Array;
  85539. function isInt8Array(value) {
  85540. return whichTypedArray(value) === 'Int8Array';
  85541. }
  85542. exports.isInt8Array = isInt8Array;
  85543. function isInt16Array(value) {
  85544. return whichTypedArray(value) === 'Int16Array';
  85545. }
  85546. exports.isInt16Array = isInt16Array;
  85547. function isInt32Array(value) {
  85548. return whichTypedArray(value) === 'Int32Array';
  85549. }
  85550. exports.isInt32Array = isInt32Array;
  85551. function isFloat32Array(value) {
  85552. return whichTypedArray(value) === 'Float32Array';
  85553. }
  85554. exports.isFloat32Array = isFloat32Array;
  85555. function isFloat64Array(value) {
  85556. return whichTypedArray(value) === 'Float64Array';
  85557. }
  85558. exports.isFloat64Array = isFloat64Array;
  85559. function isBigInt64Array(value) {
  85560. return whichTypedArray(value) === 'BigInt64Array';
  85561. }
  85562. exports.isBigInt64Array = isBigInt64Array;
  85563. function isBigUint64Array(value) {
  85564. return whichTypedArray(value) === 'BigUint64Array';
  85565. }
  85566. exports.isBigUint64Array = isBigUint64Array;
  85567. function isMapToString(value) {
  85568. return ObjectToString(value) === '[object Map]';
  85569. }
  85570. isMapToString.working = (
  85571. typeof Map !== 'undefined' &&
  85572. isMapToString(new Map())
  85573. );
  85574. function isMap(value) {
  85575. if (typeof Map === 'undefined') {
  85576. return false;
  85577. }
  85578. return isMapToString.working
  85579. ? isMapToString(value)
  85580. : value instanceof Map;
  85581. }
  85582. exports.isMap = isMap;
  85583. function isSetToString(value) {
  85584. return ObjectToString(value) === '[object Set]';
  85585. }
  85586. isSetToString.working = (
  85587. typeof Set !== 'undefined' &&
  85588. isSetToString(new Set())
  85589. );
  85590. function isSet(value) {
  85591. if (typeof Set === 'undefined') {
  85592. return false;
  85593. }
  85594. return isSetToString.working
  85595. ? isSetToString(value)
  85596. : value instanceof Set;
  85597. }
  85598. exports.isSet = isSet;
  85599. function isWeakMapToString(value) {
  85600. return ObjectToString(value) === '[object WeakMap]';
  85601. }
  85602. isWeakMapToString.working = (
  85603. typeof WeakMap !== 'undefined' &&
  85604. isWeakMapToString(new WeakMap())
  85605. );
  85606. function isWeakMap(value) {
  85607. if (typeof WeakMap === 'undefined') {
  85608. return false;
  85609. }
  85610. return isWeakMapToString.working
  85611. ? isWeakMapToString(value)
  85612. : value instanceof WeakMap;
  85613. }
  85614. exports.isWeakMap = isWeakMap;
  85615. function isWeakSetToString(value) {
  85616. return ObjectToString(value) === '[object WeakSet]';
  85617. }
  85618. isWeakSetToString.working = (
  85619. typeof WeakSet !== 'undefined' &&
  85620. isWeakSetToString(new WeakSet())
  85621. );
  85622. function isWeakSet(value) {
  85623. return isWeakSetToString(value);
  85624. }
  85625. exports.isWeakSet = isWeakSet;
  85626. function isArrayBufferToString(value) {
  85627. return ObjectToString(value) === '[object ArrayBuffer]';
  85628. }
  85629. isArrayBufferToString.working = (
  85630. typeof ArrayBuffer !== 'undefined' &&
  85631. isArrayBufferToString(new ArrayBuffer())
  85632. );
  85633. function isArrayBuffer(value) {
  85634. if (typeof ArrayBuffer === 'undefined') {
  85635. return false;
  85636. }
  85637. return isArrayBufferToString.working
  85638. ? isArrayBufferToString(value)
  85639. : value instanceof ArrayBuffer;
  85640. }
  85641. exports.isArrayBuffer = isArrayBuffer;
  85642. function isDataViewToString(value) {
  85643. return ObjectToString(value) === '[object DataView]';
  85644. }
  85645. isDataViewToString.working = (
  85646. typeof ArrayBuffer !== 'undefined' &&
  85647. typeof DataView !== 'undefined' &&
  85648. isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))
  85649. );
  85650. function isDataView(value) {
  85651. if (typeof DataView === 'undefined') {
  85652. return false;
  85653. }
  85654. return isDataViewToString.working
  85655. ? isDataViewToString(value)
  85656. : value instanceof DataView;
  85657. }
  85658. exports.isDataView = isDataView;
  85659. // Store a copy of SharedArrayBuffer in case it's deleted elsewhere
  85660. var SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;
  85661. function isSharedArrayBufferToString(value) {
  85662. return ObjectToString(value) === '[object SharedArrayBuffer]';
  85663. }
  85664. function isSharedArrayBuffer(value) {
  85665. if (typeof SharedArrayBufferCopy === 'undefined') {
  85666. return false;
  85667. }
  85668. if (typeof isSharedArrayBufferToString.working === 'undefined') {
  85669. isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());
  85670. }
  85671. return isSharedArrayBufferToString.working
  85672. ? isSharedArrayBufferToString(value)
  85673. : value instanceof SharedArrayBufferCopy;
  85674. }
  85675. exports.isSharedArrayBuffer = isSharedArrayBuffer;
  85676. function isAsyncFunction(value) {
  85677. return ObjectToString(value) === '[object AsyncFunction]';
  85678. }
  85679. exports.isAsyncFunction = isAsyncFunction;
  85680. function isMapIterator(value) {
  85681. return ObjectToString(value) === '[object Map Iterator]';
  85682. }
  85683. exports.isMapIterator = isMapIterator;
  85684. function isSetIterator(value) {
  85685. return ObjectToString(value) === '[object Set Iterator]';
  85686. }
  85687. exports.isSetIterator = isSetIterator;
  85688. function isGeneratorObject(value) {
  85689. return ObjectToString(value) === '[object Generator]';
  85690. }
  85691. exports.isGeneratorObject = isGeneratorObject;
  85692. function isWebAssemblyCompiledModule(value) {
  85693. return ObjectToString(value) === '[object WebAssembly.Module]';
  85694. }
  85695. exports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;
  85696. function isNumberObject(value) {
  85697. return checkBoxedPrimitive(value, numberValue);
  85698. }
  85699. exports.isNumberObject = isNumberObject;
  85700. function isStringObject(value) {
  85701. return checkBoxedPrimitive(value, stringValue);
  85702. }
  85703. exports.isStringObject = isStringObject;
  85704. function isBooleanObject(value) {
  85705. return checkBoxedPrimitive(value, booleanValue);
  85706. }
  85707. exports.isBooleanObject = isBooleanObject;
  85708. function isBigIntObject(value) {
  85709. return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);
  85710. }
  85711. exports.isBigIntObject = isBigIntObject;
  85712. function isSymbolObject(value) {
  85713. return SymbolSupported && checkBoxedPrimitive(value, symbolValue);
  85714. }
  85715. exports.isSymbolObject = isSymbolObject;
  85716. function isBoxedPrimitive(value) {
  85717. return (
  85718. isNumberObject(value) ||
  85719. isStringObject(value) ||
  85720. isBooleanObject(value) ||
  85721. isBigIntObject(value) ||
  85722. isSymbolObject(value)
  85723. );
  85724. }
  85725. exports.isBoxedPrimitive = isBoxedPrimitive;
  85726. function isAnyArrayBuffer(value) {
  85727. return typeof Uint8Array !== 'undefined' && (
  85728. isArrayBuffer(value) ||
  85729. isSharedArrayBuffer(value)
  85730. );
  85731. }
  85732. exports.isAnyArrayBuffer = isAnyArrayBuffer;
  85733. ['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {
  85734. Object.defineProperty(exports, method, {
  85735. enumerable: false,
  85736. value: function() {
  85737. throw new Error(method + ' is not supported in userland');
  85738. }
  85739. });
  85740. });
  85741. /***/ }),
  85742. /***/ 89539:
  85743. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  85744. /* provided dependency */ var process = __webpack_require__(34155);
  85745. // Copyright Joyent, Inc. and other Node contributors.
  85746. //
  85747. // Permission is hereby granted, free of charge, to any person obtaining a
  85748. // copy of this software and associated documentation files (the
  85749. // "Software"), to deal in the Software without restriction, including
  85750. // without limitation the rights to use, copy, modify, merge, publish,
  85751. // distribute, sublicense, and/or sell copies of the Software, and to permit
  85752. // persons to whom the Software is furnished to do so, subject to the
  85753. // following conditions:
  85754. //
  85755. // The above copyright notice and this permission notice shall be included
  85756. // in all copies or substantial portions of the Software.
  85757. //
  85758. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  85759. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  85760. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  85761. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  85762. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  85763. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  85764. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  85765. var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||
  85766. function getOwnPropertyDescriptors(obj) {
  85767. var keys = Object.keys(obj);
  85768. var descriptors = {};
  85769. for (var i = 0; i < keys.length; i++) {
  85770. descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);
  85771. }
  85772. return descriptors;
  85773. };
  85774. var formatRegExp = /%[sdj%]/g;
  85775. exports.format = function(f) {
  85776. if (!isString(f)) {
  85777. var objects = [];
  85778. for (var i = 0; i < arguments.length; i++) {
  85779. objects.push(inspect(arguments[i]));
  85780. }
  85781. return objects.join(' ');
  85782. }
  85783. var i = 1;
  85784. var args = arguments;
  85785. var len = args.length;
  85786. var str = String(f).replace(formatRegExp, function(x) {
  85787. if (x === '%%') return '%';
  85788. if (i >= len) return x;
  85789. switch (x) {
  85790. case '%s': return String(args[i++]);
  85791. case '%d': return Number(args[i++]);
  85792. case '%j':
  85793. try {
  85794. return JSON.stringify(args[i++]);
  85795. } catch (_) {
  85796. return '[Circular]';
  85797. }
  85798. default:
  85799. return x;
  85800. }
  85801. });
  85802. for (var x = args[i]; i < len; x = args[++i]) {
  85803. if (isNull(x) || !isObject(x)) {
  85804. str += ' ' + x;
  85805. } else {
  85806. str += ' ' + inspect(x);
  85807. }
  85808. }
  85809. return str;
  85810. };
  85811. // Mark that a method should not be used.
  85812. // Returns a modified function which warns once by default.
  85813. // If --no-deprecation is set, then it is a no-op.
  85814. exports.deprecate = function(fn, msg) {
  85815. if (typeof process !== 'undefined' && process.noDeprecation === true) {
  85816. return fn;
  85817. }
  85818. // Allow for deprecating things in the process of starting up.
  85819. if (typeof process === 'undefined') {
  85820. return function() {
  85821. return exports.deprecate(fn, msg).apply(this, arguments);
  85822. };
  85823. }
  85824. var warned = false;
  85825. function deprecated() {
  85826. if (!warned) {
  85827. if (process.throwDeprecation) {
  85828. throw new Error(msg);
  85829. } else if (process.traceDeprecation) {
  85830. console.trace(msg);
  85831. } else {
  85832. console.error(msg);
  85833. }
  85834. warned = true;
  85835. }
  85836. return fn.apply(this, arguments);
  85837. }
  85838. return deprecated;
  85839. };
  85840. var debugs = {};
  85841. var debugEnvRegex = /^$/;
  85842. if (process.env.NODE_DEBUG) {
  85843. var debugEnv = process.env.NODE_DEBUG;
  85844. debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, '\\$&')
  85845. .replace(/\*/g, '.*')
  85846. .replace(/,/g, '$|^')
  85847. .toUpperCase();
  85848. debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');
  85849. }
  85850. exports.debuglog = function(set) {
  85851. set = set.toUpperCase();
  85852. if (!debugs[set]) {
  85853. if (debugEnvRegex.test(set)) {
  85854. var pid = process.pid;
  85855. debugs[set] = function() {
  85856. var msg = exports.format.apply(exports, arguments);
  85857. console.error('%s %d: %s', set, pid, msg);
  85858. };
  85859. } else {
  85860. debugs[set] = function() {};
  85861. }
  85862. }
  85863. return debugs[set];
  85864. };
  85865. /**
  85866. * Echos the value of a value. Trys to print the value out
  85867. * in the best way possible given the different types.
  85868. *
  85869. * @param {Object} obj The object to print out.
  85870. * @param {Object} opts Optional options object that alters the output.
  85871. */
  85872. /* legacy: obj, showHidden, depth, colors*/
  85873. function inspect(obj, opts) {
  85874. // default options
  85875. var ctx = {
  85876. seen: [],
  85877. stylize: stylizeNoColor
  85878. };
  85879. // legacy...
  85880. if (arguments.length >= 3) ctx.depth = arguments[2];
  85881. if (arguments.length >= 4) ctx.colors = arguments[3];
  85882. if (isBoolean(opts)) {
  85883. // legacy...
  85884. ctx.showHidden = opts;
  85885. } else if (opts) {
  85886. // got an "options" object
  85887. exports._extend(ctx, opts);
  85888. }
  85889. // set default options
  85890. if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
  85891. if (isUndefined(ctx.depth)) ctx.depth = 2;
  85892. if (isUndefined(ctx.colors)) ctx.colors = false;
  85893. if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
  85894. if (ctx.colors) ctx.stylize = stylizeWithColor;
  85895. return formatValue(ctx, obj, ctx.depth);
  85896. }
  85897. exports.inspect = inspect;
  85898. // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
  85899. inspect.colors = {
  85900. 'bold' : [1, 22],
  85901. 'italic' : [3, 23],
  85902. 'underline' : [4, 24],
  85903. 'inverse' : [7, 27],
  85904. 'white' : [37, 39],
  85905. 'grey' : [90, 39],
  85906. 'black' : [30, 39],
  85907. 'blue' : [34, 39],
  85908. 'cyan' : [36, 39],
  85909. 'green' : [32, 39],
  85910. 'magenta' : [35, 39],
  85911. 'red' : [31, 39],
  85912. 'yellow' : [33, 39]
  85913. };
  85914. // Don't use 'blue' not visible on cmd.exe
  85915. inspect.styles = {
  85916. 'special': 'cyan',
  85917. 'number': 'yellow',
  85918. 'boolean': 'yellow',
  85919. 'undefined': 'grey',
  85920. 'null': 'bold',
  85921. 'string': 'green',
  85922. 'date': 'magenta',
  85923. // "name": intentionally not styling
  85924. 'regexp': 'red'
  85925. };
  85926. function stylizeWithColor(str, styleType) {
  85927. var style = inspect.styles[styleType];
  85928. if (style) {
  85929. return '\u001b[' + inspect.colors[style][0] + 'm' + str +
  85930. '\u001b[' + inspect.colors[style][1] + 'm';
  85931. } else {
  85932. return str;
  85933. }
  85934. }
  85935. function stylizeNoColor(str, styleType) {
  85936. return str;
  85937. }
  85938. function arrayToHash(array) {
  85939. var hash = {};
  85940. array.forEach(function(val, idx) {
  85941. hash[val] = true;
  85942. });
  85943. return hash;
  85944. }
  85945. function formatValue(ctx, value, recurseTimes) {
  85946. // Provide a hook for user-specified inspect functions.
  85947. // Check that value is an object with an inspect function on it
  85948. if (ctx.customInspect &&
  85949. value &&
  85950. isFunction(value.inspect) &&
  85951. // Filter out the util module, it's inspect function is special
  85952. value.inspect !== exports.inspect &&
  85953. // Also filter out any prototype objects using the circular check.
  85954. !(value.constructor && value.constructor.prototype === value)) {
  85955. var ret = value.inspect(recurseTimes, ctx);
  85956. if (!isString(ret)) {
  85957. ret = formatValue(ctx, ret, recurseTimes);
  85958. }
  85959. return ret;
  85960. }
  85961. // Primitive types cannot have properties
  85962. var primitive = formatPrimitive(ctx, value);
  85963. if (primitive) {
  85964. return primitive;
  85965. }
  85966. // Look up the keys of the object.
  85967. var keys = Object.keys(value);
  85968. var visibleKeys = arrayToHash(keys);
  85969. if (ctx.showHidden) {
  85970. keys = Object.getOwnPropertyNames(value);
  85971. }
  85972. // IE doesn't make error fields non-enumerable
  85973. // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
  85974. if (isError(value)
  85975. && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
  85976. return formatError(value);
  85977. }
  85978. // Some type of object without properties can be shortcutted.
  85979. if (keys.length === 0) {
  85980. if (isFunction(value)) {
  85981. var name = value.name ? ': ' + value.name : '';
  85982. return ctx.stylize('[Function' + name + ']', 'special');
  85983. }
  85984. if (isRegExp(value)) {
  85985. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  85986. }
  85987. if (isDate(value)) {
  85988. return ctx.stylize(Date.prototype.toString.call(value), 'date');
  85989. }
  85990. if (isError(value)) {
  85991. return formatError(value);
  85992. }
  85993. }
  85994. var base = '', array = false, braces = ['{', '}'];
  85995. // Make Array say that they are Array
  85996. if (isArray(value)) {
  85997. array = true;
  85998. braces = ['[', ']'];
  85999. }
  86000. // Make functions say that they are functions
  86001. if (isFunction(value)) {
  86002. var n = value.name ? ': ' + value.name : '';
  86003. base = ' [Function' + n + ']';
  86004. }
  86005. // Make RegExps say that they are RegExps
  86006. if (isRegExp(value)) {
  86007. base = ' ' + RegExp.prototype.toString.call(value);
  86008. }
  86009. // Make dates with properties first say the date
  86010. if (isDate(value)) {
  86011. base = ' ' + Date.prototype.toUTCString.call(value);
  86012. }
  86013. // Make error with message first say the error
  86014. if (isError(value)) {
  86015. base = ' ' + formatError(value);
  86016. }
  86017. if (keys.length === 0 && (!array || value.length == 0)) {
  86018. return braces[0] + base + braces[1];
  86019. }
  86020. if (recurseTimes < 0) {
  86021. if (isRegExp(value)) {
  86022. return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
  86023. } else {
  86024. return ctx.stylize('[Object]', 'special');
  86025. }
  86026. }
  86027. ctx.seen.push(value);
  86028. var output;
  86029. if (array) {
  86030. output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  86031. } else {
  86032. output = keys.map(function(key) {
  86033. return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
  86034. });
  86035. }
  86036. ctx.seen.pop();
  86037. return reduceToSingleString(output, base, braces);
  86038. }
  86039. function formatPrimitive(ctx, value) {
  86040. if (isUndefined(value))
  86041. return ctx.stylize('undefined', 'undefined');
  86042. if (isString(value)) {
  86043. var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
  86044. .replace(/'/g, "\\'")
  86045. .replace(/\\"/g, '"') + '\'';
  86046. return ctx.stylize(simple, 'string');
  86047. }
  86048. if (isNumber(value))
  86049. return ctx.stylize('' + value, 'number');
  86050. if (isBoolean(value))
  86051. return ctx.stylize('' + value, 'boolean');
  86052. // For some reason typeof null is "object", so special case here.
  86053. if (isNull(value))
  86054. return ctx.stylize('null', 'null');
  86055. }
  86056. function formatError(value) {
  86057. return '[' + Error.prototype.toString.call(value) + ']';
  86058. }
  86059. function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  86060. var output = [];
  86061. for (var i = 0, l = value.length; i < l; ++i) {
  86062. if (hasOwnProperty(value, String(i))) {
  86063. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  86064. String(i), true));
  86065. } else {
  86066. output.push('');
  86067. }
  86068. }
  86069. keys.forEach(function(key) {
  86070. if (!key.match(/^\d+$/)) {
  86071. output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
  86072. key, true));
  86073. }
  86074. });
  86075. return output;
  86076. }
  86077. function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  86078. var name, str, desc;
  86079. desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
  86080. if (desc.get) {
  86081. if (desc.set) {
  86082. str = ctx.stylize('[Getter/Setter]', 'special');
  86083. } else {
  86084. str = ctx.stylize('[Getter]', 'special');
  86085. }
  86086. } else {
  86087. if (desc.set) {
  86088. str = ctx.stylize('[Setter]', 'special');
  86089. }
  86090. }
  86091. if (!hasOwnProperty(visibleKeys, key)) {
  86092. name = '[' + key + ']';
  86093. }
  86094. if (!str) {
  86095. if (ctx.seen.indexOf(desc.value) < 0) {
  86096. if (isNull(recurseTimes)) {
  86097. str = formatValue(ctx, desc.value, null);
  86098. } else {
  86099. str = formatValue(ctx, desc.value, recurseTimes - 1);
  86100. }
  86101. if (str.indexOf('\n') > -1) {
  86102. if (array) {
  86103. str = str.split('\n').map(function(line) {
  86104. return ' ' + line;
  86105. }).join('\n').substr(2);
  86106. } else {
  86107. str = '\n' + str.split('\n').map(function(line) {
  86108. return ' ' + line;
  86109. }).join('\n');
  86110. }
  86111. }
  86112. } else {
  86113. str = ctx.stylize('[Circular]', 'special');
  86114. }
  86115. }
  86116. if (isUndefined(name)) {
  86117. if (array && key.match(/^\d+$/)) {
  86118. return str;
  86119. }
  86120. name = JSON.stringify('' + key);
  86121. if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
  86122. name = name.substr(1, name.length - 2);
  86123. name = ctx.stylize(name, 'name');
  86124. } else {
  86125. name = name.replace(/'/g, "\\'")
  86126. .replace(/\\"/g, '"')
  86127. .replace(/(^"|"$)/g, "'");
  86128. name = ctx.stylize(name, 'string');
  86129. }
  86130. }
  86131. return name + ': ' + str;
  86132. }
  86133. function reduceToSingleString(output, base, braces) {
  86134. var numLinesEst = 0;
  86135. var length = output.reduce(function(prev, cur) {
  86136. numLinesEst++;
  86137. if (cur.indexOf('\n') >= 0) numLinesEst++;
  86138. return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
  86139. }, 0);
  86140. if (length > 60) {
  86141. return braces[0] +
  86142. (base === '' ? '' : base + '\n ') +
  86143. ' ' +
  86144. output.join(',\n ') +
  86145. ' ' +
  86146. braces[1];
  86147. }
  86148. return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
  86149. }
  86150. // NOTE: These type checking functions intentionally don't use `instanceof`
  86151. // because it is fragile and can be easily faked with `Object.create()`.
  86152. exports.types = __webpack_require__(55955);
  86153. function isArray(ar) {
  86154. return Array.isArray(ar);
  86155. }
  86156. exports.isArray = isArray;
  86157. function isBoolean(arg) {
  86158. return typeof arg === 'boolean';
  86159. }
  86160. exports.isBoolean = isBoolean;
  86161. function isNull(arg) {
  86162. return arg === null;
  86163. }
  86164. exports.isNull = isNull;
  86165. function isNullOrUndefined(arg) {
  86166. return arg == null;
  86167. }
  86168. exports.isNullOrUndefined = isNullOrUndefined;
  86169. function isNumber(arg) {
  86170. return typeof arg === 'number';
  86171. }
  86172. exports.isNumber = isNumber;
  86173. function isString(arg) {
  86174. return typeof arg === 'string';
  86175. }
  86176. exports.isString = isString;
  86177. function isSymbol(arg) {
  86178. return typeof arg === 'symbol';
  86179. }
  86180. exports.isSymbol = isSymbol;
  86181. function isUndefined(arg) {
  86182. return arg === void 0;
  86183. }
  86184. exports.isUndefined = isUndefined;
  86185. function isRegExp(re) {
  86186. return isObject(re) && objectToString(re) === '[object RegExp]';
  86187. }
  86188. exports.isRegExp = isRegExp;
  86189. exports.types.isRegExp = isRegExp;
  86190. function isObject(arg) {
  86191. return typeof arg === 'object' && arg !== null;
  86192. }
  86193. exports.isObject = isObject;
  86194. function isDate(d) {
  86195. return isObject(d) && objectToString(d) === '[object Date]';
  86196. }
  86197. exports.isDate = isDate;
  86198. exports.types.isDate = isDate;
  86199. function isError(e) {
  86200. return isObject(e) &&
  86201. (objectToString(e) === '[object Error]' || e instanceof Error);
  86202. }
  86203. exports.isError = isError;
  86204. exports.types.isNativeError = isError;
  86205. function isFunction(arg) {
  86206. return typeof arg === 'function';
  86207. }
  86208. exports.isFunction = isFunction;
  86209. function isPrimitive(arg) {
  86210. return arg === null ||
  86211. typeof arg === 'boolean' ||
  86212. typeof arg === 'number' ||
  86213. typeof arg === 'string' ||
  86214. typeof arg === 'symbol' || // ES6 symbol
  86215. typeof arg === 'undefined';
  86216. }
  86217. exports.isPrimitive = isPrimitive;
  86218. exports.isBuffer = __webpack_require__(20384);
  86219. function objectToString(o) {
  86220. return Object.prototype.toString.call(o);
  86221. }
  86222. function pad(n) {
  86223. return n < 10 ? '0' + n.toString(10) : n.toString(10);
  86224. }
  86225. var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
  86226. 'Oct', 'Nov', 'Dec'];
  86227. // 26 Feb 16:19:34
  86228. function timestamp() {
  86229. var d = new Date();
  86230. var time = [pad(d.getHours()),
  86231. pad(d.getMinutes()),
  86232. pad(d.getSeconds())].join(':');
  86233. return [d.getDate(), months[d.getMonth()], time].join(' ');
  86234. }
  86235. // log is just a thin wrapper to console.log that prepends a timestamp
  86236. exports.log = function() {
  86237. console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
  86238. };
  86239. /**
  86240. * Inherit the prototype methods from one constructor into another.
  86241. *
  86242. * The Function.prototype.inherits from lang.js rewritten as a standalone
  86243. * function (not on Function.prototype). NOTE: If this file is to be loaded
  86244. * during bootstrapping this function needs to be rewritten using some native
  86245. * functions as prototype setup using normal JavaScript does not work as
  86246. * expected during bootstrapping (see mirror.js in r114903).
  86247. *
  86248. * @param {function} ctor Constructor function which needs to inherit the
  86249. * prototype.
  86250. * @param {function} superCtor Constructor function to inherit prototype from.
  86251. */
  86252. exports.inherits = __webpack_require__(35717);
  86253. exports._extend = function(origin, add) {
  86254. // Don't do anything if add isn't an object
  86255. if (!add || !isObject(add)) return origin;
  86256. var keys = Object.keys(add);
  86257. var i = keys.length;
  86258. while (i--) {
  86259. origin[keys[i]] = add[keys[i]];
  86260. }
  86261. return origin;
  86262. };
  86263. function hasOwnProperty(obj, prop) {
  86264. return Object.prototype.hasOwnProperty.call(obj, prop);
  86265. }
  86266. var kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;
  86267. exports.promisify = function promisify(original) {
  86268. if (typeof original !== 'function')
  86269. throw new TypeError('The "original" argument must be of type Function');
  86270. if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {
  86271. var fn = original[kCustomPromisifiedSymbol];
  86272. if (typeof fn !== 'function') {
  86273. throw new TypeError('The "util.promisify.custom" argument must be of type Function');
  86274. }
  86275. Object.defineProperty(fn, kCustomPromisifiedSymbol, {
  86276. value: fn, enumerable: false, writable: false, configurable: true
  86277. });
  86278. return fn;
  86279. }
  86280. function fn() {
  86281. var promiseResolve, promiseReject;
  86282. var promise = new Promise(function (resolve, reject) {
  86283. promiseResolve = resolve;
  86284. promiseReject = reject;
  86285. });
  86286. var args = [];
  86287. for (var i = 0; i < arguments.length; i++) {
  86288. args.push(arguments[i]);
  86289. }
  86290. args.push(function (err, value) {
  86291. if (err) {
  86292. promiseReject(err);
  86293. } else {
  86294. promiseResolve(value);
  86295. }
  86296. });
  86297. try {
  86298. original.apply(this, args);
  86299. } catch (err) {
  86300. promiseReject(err);
  86301. }
  86302. return promise;
  86303. }
  86304. Object.setPrototypeOf(fn, Object.getPrototypeOf(original));
  86305. if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {
  86306. value: fn, enumerable: false, writable: false, configurable: true
  86307. });
  86308. return Object.defineProperties(
  86309. fn,
  86310. getOwnPropertyDescriptors(original)
  86311. );
  86312. }
  86313. exports.promisify.custom = kCustomPromisifiedSymbol
  86314. function callbackifyOnRejected(reason, cb) {
  86315. // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).
  86316. // Because `null` is a special error value in callbacks which means "no error
  86317. // occurred", we error-wrap so the callback consumer can distinguish between
  86318. // "the promise rejected with null" or "the promise fulfilled with undefined".
  86319. if (!reason) {
  86320. var newReason = new Error('Promise was rejected with a falsy value');
  86321. newReason.reason = reason;
  86322. reason = newReason;
  86323. }
  86324. return cb(reason);
  86325. }
  86326. function callbackify(original) {
  86327. if (typeof original !== 'function') {
  86328. throw new TypeError('The "original" argument must be of type Function');
  86329. }
  86330. // We DO NOT return the promise as it gives the user a false sense that
  86331. // the promise is actually somehow related to the callback's execution
  86332. // and that the callback throwing will reject the promise.
  86333. function callbackified() {
  86334. var args = [];
  86335. for (var i = 0; i < arguments.length; i++) {
  86336. args.push(arguments[i]);
  86337. }
  86338. var maybeCb = args.pop();
  86339. if (typeof maybeCb !== 'function') {
  86340. throw new TypeError('The last argument must be of type Function');
  86341. }
  86342. var self = this;
  86343. var cb = function() {
  86344. return maybeCb.apply(self, arguments);
  86345. };
  86346. // In true node style we process the callback on `nextTick` with all the
  86347. // implications (stack, `uncaughtException`, `async_hooks`)
  86348. original.apply(this, args)
  86349. .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },
  86350. function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });
  86351. }
  86352. Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));
  86353. Object.defineProperties(callbackified,
  86354. getOwnPropertyDescriptors(original));
  86355. return callbackified;
  86356. }
  86357. exports.callbackify = callbackify;
  86358. /***/ }),
  86359. /***/ 86430:
  86360. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  86361. "use strict";
  86362. var forEach = __webpack_require__(49804);
  86363. var availableTypedArrays = __webpack_require__(63083);
  86364. var callBound = __webpack_require__(21924);
  86365. var $toString = callBound('Object.prototype.toString');
  86366. var hasToStringTag = __webpack_require__(96410)();
  86367. var g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;
  86368. var typedArrays = availableTypedArrays();
  86369. var $slice = callBound('String.prototype.slice');
  86370. var toStrTags = {};
  86371. var gOPD = __webpack_require__(20882);
  86372. var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
  86373. if (hasToStringTag && gOPD && getPrototypeOf) {
  86374. forEach(typedArrays, function (typedArray) {
  86375. if (typeof g[typedArray] === 'function') {
  86376. var arr = new g[typedArray]();
  86377. if (Symbol.toStringTag in arr) {
  86378. var proto = getPrototypeOf(arr);
  86379. var descriptor = gOPD(proto, Symbol.toStringTag);
  86380. if (!descriptor) {
  86381. var superProto = getPrototypeOf(proto);
  86382. descriptor = gOPD(superProto, Symbol.toStringTag);
  86383. }
  86384. toStrTags[typedArray] = descriptor.get;
  86385. }
  86386. }
  86387. });
  86388. }
  86389. var tryTypedArrays = function tryAllTypedArrays(value) {
  86390. var foundName = false;
  86391. forEach(toStrTags, function (getter, typedArray) {
  86392. if (!foundName) {
  86393. try {
  86394. var name = getter.call(value);
  86395. if (name === typedArray) {
  86396. foundName = name;
  86397. }
  86398. } catch (e) {}
  86399. }
  86400. });
  86401. return foundName;
  86402. };
  86403. var isTypedArray = __webpack_require__(85692);
  86404. module.exports = function whichTypedArray(value) {
  86405. if (!isTypedArray(value)) { return false; }
  86406. if (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }
  86407. return tryTypedArrays(value);
  86408. };
  86409. /***/ }),
  86410. /***/ 37174:
  86411. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  86412. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  86413. var bs58check = __webpack_require__(58334)
  86414. function decodeRaw (buffer, version) {
  86415. // check version only if defined
  86416. if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
  86417. // uncompressed
  86418. if (buffer.length === 33) {
  86419. return {
  86420. version: buffer[0],
  86421. privateKey: buffer.slice(1, 33),
  86422. compressed: false
  86423. }
  86424. }
  86425. // invalid length
  86426. if (buffer.length !== 34) throw new Error('Invalid WIF length')
  86427. // invalid compression flag
  86428. if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
  86429. return {
  86430. version: buffer[0],
  86431. privateKey: buffer.slice(1, 33),
  86432. compressed: true
  86433. }
  86434. }
  86435. function encodeRaw (version, privateKey, compressed) {
  86436. var result = new Buffer(compressed ? 34 : 33)
  86437. result.writeUInt8(version, 0)
  86438. privateKey.copy(result, 1)
  86439. if (compressed) {
  86440. result[33] = 0x01
  86441. }
  86442. return result
  86443. }
  86444. function decode (string, version) {
  86445. return decodeRaw(bs58check.decode(string), version)
  86446. }
  86447. function encode (version, privateKey, compressed) {
  86448. if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
  86449. return bs58check.encode(
  86450. encodeRaw(
  86451. version.version,
  86452. version.privateKey,
  86453. version.compressed
  86454. )
  86455. )
  86456. }
  86457. module.exports = {
  86458. decode: decode,
  86459. decodeRaw: decodeRaw,
  86460. encode: encode,
  86461. encodeRaw: encodeRaw
  86462. }
  86463. /***/ }),
  86464. /***/ 31528:
  86465. /***/ ((__unused_webpack_module, exports) => {
  86466. "use strict";
  86467. Object.defineProperty(exports, "__esModule", ({ value: true }));
  86468. var ECDSA;
  86469. (function (ECDSA) {
  86470. ECDSA["ed25519"] = "ed25519";
  86471. ECDSA["secp256k1"] = "ecdsa-secp256k1";
  86472. })(ECDSA || (ECDSA = {}));
  86473. exports["default"] = ECDSA;
  86474. //# sourceMappingURL=ECDSA.js.map
  86475. /***/ }),
  86476. /***/ 32555:
  86477. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  86478. "use strict";
  86479. Object.defineProperty(exports, "__esModule", ({ value: true }));
  86480. exports.getDefaultFaucetPath = exports.getFaucetHost = exports.FaucetNetworkPaths = exports.FaucetNetwork = void 0;
  86481. const errors_1 = __webpack_require__(25615);
  86482. var FaucetNetwork;
  86483. (function (FaucetNetwork) {
  86484. FaucetNetwork["Testnet"] = "faucet.altnet.rippletest.net";
  86485. FaucetNetwork["Devnet"] = "faucet.devnet.rippletest.net";
  86486. FaucetNetwork["AMMDevnet"] = "ammfaucet.devnet.rippletest.net";
  86487. FaucetNetwork["HooksV2Testnet"] = "hooks-testnet-v2.xrpl-labs.com";
  86488. })(FaucetNetwork = exports.FaucetNetwork || (exports.FaucetNetwork = {}));
  86489. exports.FaucetNetworkPaths = {
  86490. [FaucetNetwork.Testnet]: '/accounts',
  86491. [FaucetNetwork.Devnet]: '/accounts',
  86492. [FaucetNetwork.AMMDevnet]: '/accounts',
  86493. [FaucetNetwork.HooksV2Testnet]: '/accounts',
  86494. };
  86495. function getFaucetHost(client) {
  86496. const connectionUrl = client.url;
  86497. if (connectionUrl.includes('hooks-testnet-v2')) {
  86498. return FaucetNetwork.HooksV2Testnet;
  86499. }
  86500. if (connectionUrl.includes('altnet') || connectionUrl.includes('testnet')) {
  86501. return FaucetNetwork.Testnet;
  86502. }
  86503. if (connectionUrl.includes('amm')) {
  86504. return FaucetNetwork.AMMDevnet;
  86505. }
  86506. if (connectionUrl.includes('devnet')) {
  86507. return FaucetNetwork.Devnet;
  86508. }
  86509. throw new errors_1.XRPLFaucetError('Faucet URL is not defined or inferrable.');
  86510. }
  86511. exports.getFaucetHost = getFaucetHost;
  86512. function getDefaultFaucetPath(hostname) {
  86513. if (hostname === undefined) {
  86514. return '/accounts';
  86515. }
  86516. return exports.FaucetNetworkPaths[hostname] || '/accounts';
  86517. }
  86518. exports.getDefaultFaucetPath = getDefaultFaucetPath;
  86519. //# sourceMappingURL=defaultFaucets.js.map
  86520. /***/ }),
  86521. /***/ 94667:
  86522. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  86523. "use strict";
  86524. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  86525. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  86526. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  86527. return new (P || (P = Promise))(function (resolve, reject) {
  86528. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  86529. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  86530. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  86531. step((generator = generator.apply(thisArg, _arguments || [])).next());
  86532. });
  86533. };
  86534. var __importDefault = (this && this.__importDefault) || function (mod) {
  86535. return (mod && mod.__esModule) ? mod : { "default": mod };
  86536. };
  86537. Object.defineProperty(exports, "__esModule", ({ value: true }));
  86538. const https_1 = __webpack_require__(79267);
  86539. const ripple_address_codec_1 = __webpack_require__(88914);
  86540. const errors_1 = __webpack_require__(25615);
  86541. const defaultFaucets_1 = __webpack_require__(32555);
  86542. const _1 = __importDefault(__webpack_require__(69959));
  86543. const INTERVAL_SECONDS = 1;
  86544. const MAX_ATTEMPTS = 20;
  86545. function fundWallet(wallet, options) {
  86546. return __awaiter(this, void 0, void 0, function* () {
  86547. if (!this.isConnected()) {
  86548. throw new errors_1.RippledError('Client not connected, cannot call faucet');
  86549. }
  86550. const walletToFund = wallet && (0, ripple_address_codec_1.isValidClassicAddress)(wallet.classicAddress)
  86551. ? wallet
  86552. : _1.default.generate();
  86553. const postBody = Buffer.from(new TextEncoder().encode(JSON.stringify({
  86554. destination: walletToFund.classicAddress,
  86555. xrpAmount: options === null || options === void 0 ? void 0 : options.amount,
  86556. })));
  86557. let startingBalance = 0;
  86558. try {
  86559. startingBalance = Number(yield this.getXrpBalance(walletToFund.classicAddress));
  86560. }
  86561. catch (_a) {
  86562. }
  86563. const httpOptions = getHTTPOptions(this, postBody, {
  86564. hostname: options === null || options === void 0 ? void 0 : options.faucetHost,
  86565. pathname: options === null || options === void 0 ? void 0 : options.faucetPath,
  86566. });
  86567. return returnPromise(httpOptions, this, startingBalance, walletToFund, postBody);
  86568. });
  86569. }
  86570. function returnPromise(options, client, startingBalance, walletToFund, postBody) {
  86571. return __awaiter(this, void 0, void 0, function* () {
  86572. return new Promise((resolve, reject) => {
  86573. const request = (0, https_1.request)(options, (response) => {
  86574. const chunks = [];
  86575. response.on('data', (data) => chunks.push(data));
  86576. response.on('end', () => __awaiter(this, void 0, void 0, function* () {
  86577. return onEnd(response, chunks, client, startingBalance, walletToFund, resolve, reject);
  86578. }));
  86579. });
  86580. request.write(postBody);
  86581. request.on('error', (error) => {
  86582. reject(error);
  86583. });
  86584. request.end();
  86585. });
  86586. });
  86587. }
  86588. function getHTTPOptions(client, postBody, options) {
  86589. var _a, _b;
  86590. const finalHostname = (_a = options === null || options === void 0 ? void 0 : options.hostname) !== null && _a !== void 0 ? _a : (0, defaultFaucets_1.getFaucetHost)(client);
  86591. const finalPathname = (_b = options === null || options === void 0 ? void 0 : options.pathname) !== null && _b !== void 0 ? _b : (0, defaultFaucets_1.getDefaultFaucetPath)(finalHostname);
  86592. return {
  86593. hostname: finalHostname,
  86594. port: 443,
  86595. path: finalPathname,
  86596. method: 'POST',
  86597. headers: {
  86598. 'Content-Type': 'application/json',
  86599. 'Content-Length': postBody.length,
  86600. },
  86601. };
  86602. }
  86603. function onEnd(response, chunks, client, startingBalance, walletToFund, resolve, reject) {
  86604. var _a;
  86605. return __awaiter(this, void 0, void 0, function* () {
  86606. const body = Buffer.concat(chunks).toString();
  86607. if ((_a = response.headers['content-type']) === null || _a === void 0 ? void 0 : _a.startsWith('application/json')) {
  86608. const faucetWallet = JSON.parse(body);
  86609. const classicAddress = faucetWallet.account.classicAddress;
  86610. yield processSuccessfulResponse(client, classicAddress, walletToFund, startingBalance, resolve, reject);
  86611. }
  86612. else {
  86613. reject(new errors_1.XRPLFaucetError(`Content type is not \`application/json\`: ${JSON.stringify({
  86614. statusCode: response.statusCode,
  86615. contentType: response.headers['content-type'],
  86616. body,
  86617. })}`));
  86618. }
  86619. });
  86620. }
  86621. function processSuccessfulResponse(client, classicAddress, walletToFund, startingBalance, resolve, reject) {
  86622. return __awaiter(this, void 0, void 0, function* () {
  86623. if (!classicAddress) {
  86624. reject(new errors_1.XRPLFaucetError(`The faucet account is undefined`));
  86625. return;
  86626. }
  86627. try {
  86628. const updatedBalance = yield getUpdatedBalance(client, classicAddress, startingBalance);
  86629. if (updatedBalance > startingBalance) {
  86630. resolve({
  86631. wallet: walletToFund,
  86632. balance: yield getUpdatedBalance(client, walletToFund.classicAddress, startingBalance),
  86633. });
  86634. }
  86635. else {
  86636. reject(new errors_1.XRPLFaucetError(`Unable to fund address with faucet after waiting ${INTERVAL_SECONDS * MAX_ATTEMPTS} seconds`));
  86637. }
  86638. }
  86639. catch (err) {
  86640. if (err instanceof Error) {
  86641. reject(new errors_1.XRPLFaucetError(err.message));
  86642. }
  86643. reject(err);
  86644. }
  86645. });
  86646. }
  86647. function getUpdatedBalance(client, address, originalBalance) {
  86648. return __awaiter(this, void 0, void 0, function* () {
  86649. return new Promise((resolve, reject) => {
  86650. let attempts = MAX_ATTEMPTS;
  86651. const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
  86652. if (attempts < 0) {
  86653. clearInterval(interval);
  86654. resolve(originalBalance);
  86655. }
  86656. else {
  86657. attempts -= 1;
  86658. }
  86659. try {
  86660. let newBalance;
  86661. try {
  86662. newBalance = Number(yield client.getXrpBalance(address));
  86663. }
  86664. catch (_a) {
  86665. }
  86666. if (newBalance > originalBalance) {
  86667. clearInterval(interval);
  86668. resolve(newBalance);
  86669. }
  86670. }
  86671. catch (err) {
  86672. clearInterval(interval);
  86673. if (err instanceof Error) {
  86674. reject(new errors_1.XRPLFaucetError(`Unable to check if the address ${address} balance has increased. Error: ${err.message}`));
  86675. }
  86676. reject(err);
  86677. }
  86678. }), INTERVAL_SECONDS * 1000);
  86679. });
  86680. });
  86681. }
  86682. exports["default"] = fundWallet;
  86683. //# sourceMappingURL=fundWallet.js.map
  86684. /***/ }),
  86685. /***/ 69959:
  86686. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  86687. "use strict";
  86688. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  86689. var __importDefault = (this && this.__importDefault) || function (mod) {
  86690. return (mod && mod.__esModule) ? mod : { "default": mod };
  86691. };
  86692. Object.defineProperty(exports, "__esModule", ({ value: true }));
  86693. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  86694. const bip32_1 = __webpack_require__(37786);
  86695. const bip39_1 = __webpack_require__(2153);
  86696. const isEqual_1 = __importDefault(__webpack_require__(18446));
  86697. const ripple_address_codec_1 = __webpack_require__(88914);
  86698. const ripple_binary_codec_1 = __webpack_require__(42353);
  86699. const ripple_keypairs_1 = __webpack_require__(29140);
  86700. const ECDSA_1 = __importDefault(__webpack_require__(31528));
  86701. const errors_1 = __webpack_require__(25615);
  86702. const common_1 = __webpack_require__(49633);
  86703. const utils_1 = __webpack_require__(38484);
  86704. const utils_2 = __webpack_require__(93170);
  86705. const hashLedger_1 = __webpack_require__(42704);
  86706. const rfc1751_1 = __webpack_require__(48940);
  86707. const DEFAULT_ALGORITHM = ECDSA_1.default.ed25519;
  86708. const DEFAULT_DERIVATION_PATH = "m/44'/144'/0'/0/0";
  86709. function hexFromBuffer(buffer) {
  86710. return buffer.toString('hex').toUpperCase();
  86711. }
  86712. class Wallet {
  86713. constructor(publicKey, privateKey, opts = {}) {
  86714. this.publicKey = publicKey;
  86715. this.privateKey = privateKey;
  86716. this.classicAddress = opts.masterAddress
  86717. ? (0, utils_2.ensureClassicAddress)(opts.masterAddress)
  86718. : (0, ripple_keypairs_1.deriveAddress)(publicKey);
  86719. this.seed = opts.seed;
  86720. }
  86721. get address() {
  86722. return this.classicAddress;
  86723. }
  86724. static generate(algorithm = DEFAULT_ALGORITHM) {
  86725. const seed = (0, ripple_keypairs_1.generateSeed)({ algorithm });
  86726. return Wallet.fromSeed(seed);
  86727. }
  86728. static fromSeed(seed, opts = {}) {
  86729. return Wallet.deriveWallet(seed, {
  86730. algorithm: opts.algorithm,
  86731. masterAddress: opts.masterAddress,
  86732. });
  86733. }
  86734. static fromEntropy(entropy, opts = {}) {
  86735. var _a;
  86736. const algorithm = (_a = opts.algorithm) !== null && _a !== void 0 ? _a : DEFAULT_ALGORITHM;
  86737. const options = {
  86738. entropy: Uint8Array.from(entropy),
  86739. algorithm,
  86740. };
  86741. const seed = (0, ripple_keypairs_1.generateSeed)(options);
  86742. return Wallet.deriveWallet(seed, {
  86743. algorithm,
  86744. masterAddress: opts.masterAddress,
  86745. });
  86746. }
  86747. static fromMnemonic(mnemonic, opts = {}) {
  86748. var _a;
  86749. if (opts.mnemonicEncoding === 'rfc1751') {
  86750. return Wallet.fromRFC1751Mnemonic(mnemonic, {
  86751. masterAddress: opts.masterAddress,
  86752. algorithm: opts.algorithm,
  86753. });
  86754. }
  86755. if (!(0, bip39_1.validateMnemonic)(mnemonic)) {
  86756. throw new errors_1.ValidationError('Unable to parse the given mnemonic using bip39 encoding');
  86757. }
  86758. const seed = (0, bip39_1.mnemonicToSeedSync)(mnemonic);
  86759. const masterNode = (0, bip32_1.fromSeed)(seed);
  86760. const node = masterNode.derivePath((_a = opts.derivationPath) !== null && _a !== void 0 ? _a : DEFAULT_DERIVATION_PATH);
  86761. if (node.privateKey === undefined) {
  86762. throw new errors_1.ValidationError('Unable to derive privateKey from mnemonic input');
  86763. }
  86764. const publicKey = hexFromBuffer(node.publicKey);
  86765. const privateKey = hexFromBuffer(node.privateKey);
  86766. return new Wallet(publicKey, `00${privateKey}`, {
  86767. masterAddress: opts.masterAddress,
  86768. });
  86769. }
  86770. static fromRFC1751Mnemonic(mnemonic, opts) {
  86771. const seed = (0, rfc1751_1.rfc1751MnemonicToKey)(mnemonic);
  86772. let encodeAlgorithm;
  86773. if (opts.algorithm === ECDSA_1.default.ed25519) {
  86774. encodeAlgorithm = 'ed25519';
  86775. }
  86776. else {
  86777. encodeAlgorithm = 'secp256k1';
  86778. }
  86779. const encodedSeed = (0, ripple_address_codec_1.encodeSeed)(seed, encodeAlgorithm);
  86780. return Wallet.fromSeed(encodedSeed, {
  86781. masterAddress: opts.masterAddress,
  86782. algorithm: opts.algorithm,
  86783. });
  86784. }
  86785. static deriveWallet(seed, opts = {}) {
  86786. var _a;
  86787. const { publicKey, privateKey } = (0, ripple_keypairs_1.deriveKeypair)(seed, {
  86788. algorithm: (_a = opts.algorithm) !== null && _a !== void 0 ? _a : DEFAULT_ALGORITHM,
  86789. });
  86790. return new Wallet(publicKey, privateKey, {
  86791. seed,
  86792. masterAddress: opts.masterAddress,
  86793. });
  86794. }
  86795. sign(transaction, multisign) {
  86796. let multisignAddress = false;
  86797. if (typeof multisign === 'string' && multisign.startsWith('X')) {
  86798. multisignAddress = multisign;
  86799. }
  86800. else if (multisign) {
  86801. multisignAddress = this.classicAddress;
  86802. }
  86803. const tx = Object.assign({}, transaction);
  86804. if (tx.TxnSignature || tx.Signers) {
  86805. throw new errors_1.ValidationError('txJSON must not contain "TxnSignature" or "Signers" properties');
  86806. }
  86807. removeTrailingZeros(tx);
  86808. const txToSignAndEncode = Object.assign({}, tx);
  86809. txToSignAndEncode.SigningPubKey = multisignAddress ? '' : this.publicKey;
  86810. if (multisignAddress) {
  86811. const signer = {
  86812. Account: multisignAddress,
  86813. SigningPubKey: this.publicKey,
  86814. TxnSignature: computeSignature(txToSignAndEncode, this.privateKey, multisignAddress),
  86815. };
  86816. txToSignAndEncode.Signers = [{ Signer: signer }];
  86817. }
  86818. else {
  86819. txToSignAndEncode.TxnSignature = computeSignature(txToSignAndEncode, this.privateKey);
  86820. }
  86821. const serialized = (0, ripple_binary_codec_1.encode)(txToSignAndEncode);
  86822. this.checkTxSerialization(serialized, tx);
  86823. return {
  86824. tx_blob: serialized,
  86825. hash: (0, hashLedger_1.hashSignedTx)(serialized),
  86826. };
  86827. }
  86828. verifyTransaction(signedTransaction) {
  86829. const tx = typeof signedTransaction === 'string'
  86830. ? (0, ripple_binary_codec_1.decode)(signedTransaction)
  86831. : signedTransaction;
  86832. const messageHex = (0, ripple_binary_codec_1.encodeForSigning)(tx);
  86833. const signature = tx.TxnSignature;
  86834. return (0, ripple_keypairs_1.verify)(messageHex, signature, this.publicKey);
  86835. }
  86836. getXAddress(tag = false, isTestnet = false) {
  86837. return (0, ripple_address_codec_1.classicAddressToXAddress)(this.classicAddress, tag, isTestnet);
  86838. }
  86839. checkTxSerialization(serialized, tx) {
  86840. var _a;
  86841. const decoded = (0, ripple_binary_codec_1.decode)(serialized);
  86842. const txCopy = Object.assign({}, tx);
  86843. if (!decoded.TxnSignature && !decoded.Signers) {
  86844. throw new errors_1.ValidationError('Serialized transaction must have a TxnSignature or Signers property');
  86845. }
  86846. delete decoded.TxnSignature;
  86847. delete decoded.Signers;
  86848. if (!tx.SigningPubKey) {
  86849. delete decoded.SigningPubKey;
  86850. }
  86851. (_a = txCopy.Memos) === null || _a === void 0 ? void 0 : _a.map((memo) => {
  86852. const memoCopy = Object.assign({}, memo);
  86853. if (memo.Memo.MemoData) {
  86854. if (!(0, utils_1.isHex)(memo.Memo.MemoData)) {
  86855. throw new errors_1.ValidationError('MemoData field must be a hex value');
  86856. }
  86857. memoCopy.Memo.MemoData = memo.Memo.MemoData.toUpperCase();
  86858. }
  86859. if (memo.Memo.MemoType) {
  86860. if (!(0, utils_1.isHex)(memo.Memo.MemoType)) {
  86861. throw new errors_1.ValidationError('MemoType field must be a hex value');
  86862. }
  86863. memoCopy.Memo.MemoType = memo.Memo.MemoType.toUpperCase();
  86864. }
  86865. if (memo.Memo.MemoFormat) {
  86866. if (!(0, utils_1.isHex)(memo.Memo.MemoFormat)) {
  86867. throw new errors_1.ValidationError('MemoFormat field must be a hex value');
  86868. }
  86869. memoCopy.Memo.MemoFormat = memo.Memo.MemoFormat.toUpperCase();
  86870. }
  86871. return memo;
  86872. });
  86873. if (txCopy.TransactionType === 'NFTokenMint' && txCopy.URI) {
  86874. if (!(0, utils_1.isHex)(txCopy.URI)) {
  86875. throw new errors_1.ValidationError('URI must be a hex value');
  86876. }
  86877. txCopy.URI = txCopy.URI.toUpperCase();
  86878. }
  86879. Object.keys(txCopy).forEach((key) => {
  86880. const standard_currency_code_len = 3;
  86881. if (txCopy[key] && (0, common_1.isIssuedCurrency)(txCopy[key])) {
  86882. const decodedAmount = decoded[key];
  86883. const decodedCurrency = decodedAmount.currency;
  86884. const txCurrency = txCopy[key].currency;
  86885. if (txCurrency.length === standard_currency_code_len &&
  86886. txCurrency.toUpperCase() === 'XRP') {
  86887. throw new errors_1.XrplError(`Trying to sign an issued currency with a similar standard code to XRP (received '${txCurrency}'). XRP is not an issued currency.`);
  86888. }
  86889. const amount = txCopy[key];
  86890. if (amount.currency.length !== decodedCurrency.length) {
  86891. if (decodedCurrency.length === standard_currency_code_len) {
  86892. decodedAmount.currency = isoToHex(decodedCurrency);
  86893. }
  86894. else {
  86895. txCopy[key].currency = isoToHex(txCopy[key].currency);
  86896. }
  86897. }
  86898. }
  86899. });
  86900. if (!(0, isEqual_1.default)(decoded, txCopy)) {
  86901. const data = {
  86902. decoded,
  86903. tx,
  86904. };
  86905. const error = new errors_1.ValidationError('Serialized transaction does not match original txJSON. See error.data', data);
  86906. throw error;
  86907. }
  86908. }
  86909. }
  86910. Wallet.fromSecret = Wallet.fromSeed;
  86911. function computeSignature(tx, privateKey, signAs) {
  86912. if (signAs) {
  86913. const classicAddress = (0, ripple_address_codec_1.isValidXAddress)(signAs)
  86914. ? (0, ripple_address_codec_1.xAddressToClassicAddress)(signAs).classicAddress
  86915. : signAs;
  86916. return (0, ripple_keypairs_1.sign)((0, ripple_binary_codec_1.encodeForMultisigning)(tx, classicAddress), privateKey);
  86917. }
  86918. return (0, ripple_keypairs_1.sign)((0, ripple_binary_codec_1.encodeForSigning)(tx), privateKey);
  86919. }
  86920. function removeTrailingZeros(tx) {
  86921. if (tx.TransactionType === 'Payment' &&
  86922. typeof tx.Amount !== 'string' &&
  86923. tx.Amount.value.includes('.') &&
  86924. tx.Amount.value.endsWith('0')) {
  86925. tx.Amount = Object.assign({}, tx.Amount);
  86926. tx.Amount.value = new bignumber_js_1.default(tx.Amount.value).toString();
  86927. }
  86928. }
  86929. function isoToHex(iso) {
  86930. const bytes = Buffer.alloc(20);
  86931. if (iso !== 'XRP') {
  86932. const isoBytes = iso.split('').map((chr) => chr.charCodeAt(0));
  86933. bytes.set(isoBytes, 12);
  86934. }
  86935. return bytes.toString('hex').toUpperCase();
  86936. }
  86937. exports["default"] = Wallet;
  86938. //# sourceMappingURL=index.js.map
  86939. /***/ }),
  86940. /***/ 48940:
  86941. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  86942. "use strict";
  86943. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  86944. var __importDefault = (this && this.__importDefault) || function (mod) {
  86945. return (mod && mod.__esModule) ? mod : { "default": mod };
  86946. };
  86947. Object.defineProperty(exports, "__esModule", ({ value: true }));
  86948. exports.keyToRFC1751Mnemonic = exports.rfc1751MnemonicToKey = void 0;
  86949. const rfc1751Words_json_1 = __importDefault(__webpack_require__(64171));
  86950. const rfc1751WordList = rfc1751Words_json_1.default;
  86951. const BINARY = ['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111',
  86952. '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111'];
  86953. function keyToBinary(key) {
  86954. let res = '';
  86955. for (const num of key) {
  86956. res += BINARY[num >> 4] + BINARY[num & 0x0f];
  86957. }
  86958. return res;
  86959. }
  86960. function extract(key, start, length) {
  86961. const subKey = key.substring(start, start + length);
  86962. let acc = 0;
  86963. for (let index = 0; index < subKey.length; index++) {
  86964. acc = acc * 2 + subKey.charCodeAt(index) - 48;
  86965. }
  86966. return acc;
  86967. }
  86968. function keyToRFC1751Mnemonic(hex_key) {
  86969. const buf = Buffer.from(hex_key.replace(/\s+/gu, ''), 'hex');
  86970. let key = bufferToArray(swap128(buf));
  86971. const padding = [];
  86972. for (let index = 0; index < (8 - (key.length % 8)) % 8; index++) {
  86973. padding.push(0);
  86974. }
  86975. key = padding.concat(key);
  86976. const english = [];
  86977. for (let index = 0; index < key.length; index += 8) {
  86978. const subKey = key.slice(index, index + 8);
  86979. let skbin = keyToBinary(subKey);
  86980. let parity = 0;
  86981. for (let j = 0; j < 64; j += 2) {
  86982. parity += extract(skbin, j, 2);
  86983. }
  86984. subKey.push((parity << 6) & 0xff);
  86985. skbin = keyToBinary(subKey);
  86986. for (let j = 0; j < 64; j += 11) {
  86987. english.push(rfc1751WordList[extract(skbin, j, 11)]);
  86988. }
  86989. }
  86990. return english.join(' ');
  86991. }
  86992. exports.keyToRFC1751Mnemonic = keyToRFC1751Mnemonic;
  86993. function rfc1751MnemonicToKey(english) {
  86994. const words = english.split(' ');
  86995. let key = [];
  86996. for (let index = 0; index < words.length; index += 6) {
  86997. const { subKey, word } = getSubKey(words, index);
  86998. const skbin = keyToBinary(subKey);
  86999. let parity = 0;
  87000. for (let j = 0; j < 64; j += 2) {
  87001. parity += extract(skbin, j, 2);
  87002. }
  87003. const cs0 = extract(skbin, 64, 2);
  87004. const cs1 = parity & 3;
  87005. if (cs0 !== cs1) {
  87006. throw new Error(`Parity error at ${word}`);
  87007. }
  87008. key = key.concat(subKey.slice(0, 8));
  87009. }
  87010. const bufferKey = swap128(Buffer.from(key));
  87011. return bufferKey;
  87012. }
  87013. exports.rfc1751MnemonicToKey = rfc1751MnemonicToKey;
  87014. function getSubKey(words, index) {
  87015. const sublist = words.slice(index, index + 6);
  87016. let bits = 0;
  87017. const ch = [0, 0, 0, 0, 0, 0, 0, 0, 0];
  87018. let word = '';
  87019. for (word of sublist) {
  87020. const idx = rfc1751WordList.indexOf(word.toUpperCase());
  87021. if (idx === -1) {
  87022. throw new TypeError(`Expected an RFC1751 word, but received '${word}'. ` +
  87023. `For the full list of words in the RFC1751 encoding see https://datatracker.ietf.org/doc/html/rfc1751`);
  87024. }
  87025. const shift = (8 - ((bits + 11) % 8)) % 8;
  87026. const y = idx << shift;
  87027. const cl = y >> 16;
  87028. const cc = (y >> 8) & 0xff;
  87029. const cr = y & 0xff;
  87030. const t = Math.floor(bits / 8);
  87031. if (shift > 5) {
  87032. ch[t] |= cl;
  87033. ch[t + 1] |= cc;
  87034. ch[t + 2] |= cr;
  87035. }
  87036. else if (shift > -3) {
  87037. ch[t] |= cc;
  87038. ch[t + 1] |= cr;
  87039. }
  87040. else {
  87041. ch[t] |= cr;
  87042. }
  87043. bits += 11;
  87044. }
  87045. const subKey = ch.slice();
  87046. return { subKey, word };
  87047. }
  87048. function bufferToArray(buf) {
  87049. return Array.prototype.slice.call(buf);
  87050. }
  87051. function swap128(buf) {
  87052. const reversedBytes = buf.swap64();
  87053. return Buffer.concat([reversedBytes.slice(8, 16), reversedBytes.slice(0, 8)], 16);
  87054. }
  87055. //# sourceMappingURL=rfc1751.js.map
  87056. /***/ }),
  87057. /***/ 34498:
  87058. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  87059. "use strict";
  87060. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  87061. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87062. exports.multisign = exports.verifySignature = exports.authorizeChannel = void 0;
  87063. const bignumber_js_1 = __webpack_require__(44431);
  87064. const lodash_1 = __webpack_require__(96486);
  87065. const ripple_address_codec_1 = __webpack_require__(88914);
  87066. const ripple_binary_codec_1 = __webpack_require__(42353);
  87067. const ripple_keypairs_1 = __webpack_require__(29140);
  87068. const errors_1 = __webpack_require__(25615);
  87069. const transactions_1 = __webpack_require__(28714);
  87070. function multisign(transactions) {
  87071. if (transactions.length === 0) {
  87072. throw new errors_1.ValidationError('There were 0 transactions to multisign');
  87073. }
  87074. transactions.forEach((txOrBlob) => {
  87075. const tx = getDecodedTransaction(txOrBlob);
  87076. (0, transactions_1.validate)(tx);
  87077. if (tx.Signers == null || tx.Signers.length === 0) {
  87078. throw new errors_1.ValidationError("For multisigning all transactions must include a Signers field containing an array of signatures. You may have forgotten to pass the 'forMultisign' parameter when signing.");
  87079. }
  87080. if (tx.SigningPubKey !== '') {
  87081. throw new errors_1.ValidationError('SigningPubKey must be an empty string for all transactions when multisigning.');
  87082. }
  87083. });
  87084. const decodedTransactions = transactions.map((txOrBlob) => {
  87085. return getDecodedTransaction(txOrBlob);
  87086. });
  87087. validateTransactionEquivalence(decodedTransactions);
  87088. return (0, ripple_binary_codec_1.encode)(getTransactionWithAllSigners(decodedTransactions));
  87089. }
  87090. exports.multisign = multisign;
  87091. function authorizeChannel(wallet, channelId, amount) {
  87092. const signingData = (0, ripple_binary_codec_1.encodeForSigningClaim)({
  87093. channel: channelId,
  87094. amount,
  87095. });
  87096. return (0, ripple_keypairs_1.sign)(signingData, wallet.privateKey);
  87097. }
  87098. exports.authorizeChannel = authorizeChannel;
  87099. function verifySignature(tx) {
  87100. const decodedTx = getDecodedTransaction(tx);
  87101. return (0, ripple_keypairs_1.verify)((0, ripple_binary_codec_1.encodeForSigning)(decodedTx), decodedTx.TxnSignature, decodedTx.SigningPubKey);
  87102. }
  87103. exports.verifySignature = verifySignature;
  87104. function validateTransactionEquivalence(transactions) {
  87105. const exampleTransaction = JSON.stringify(Object.assign(Object.assign({}, transactions[0]), { Signers: null }));
  87106. if (transactions
  87107. .slice(1)
  87108. .some((tx) => JSON.stringify(Object.assign(Object.assign({}, tx), { Signers: null })) !== exampleTransaction)) {
  87109. throw new errors_1.ValidationError('txJSON is not the same for all signedTransactions');
  87110. }
  87111. }
  87112. function getTransactionWithAllSigners(transactions) {
  87113. const sortedSigners = (0, lodash_1.flatMap)(transactions, (tx) => { var _a; return (_a = tx.Signers) !== null && _a !== void 0 ? _a : []; }).sort(compareSigners);
  87114. return Object.assign(Object.assign({}, transactions[0]), { Signers: sortedSigners });
  87115. }
  87116. function compareSigners(left, right) {
  87117. return addressToBigNumber(left.Signer.Account).comparedTo(addressToBigNumber(right.Signer.Account));
  87118. }
  87119. function addressToBigNumber(address) {
  87120. const hex = Buffer.from((0, ripple_address_codec_1.decodeAccountID)(address)).toString('hex');
  87121. const numberOfBitsInHex = 16;
  87122. return new bignumber_js_1.BigNumber(hex, numberOfBitsInHex);
  87123. }
  87124. function getDecodedTransaction(txOrBlob) {
  87125. if (typeof txOrBlob === 'object') {
  87126. return (0, ripple_binary_codec_1.decode)((0, ripple_binary_codec_1.encode)(txOrBlob));
  87127. }
  87128. return (0, ripple_binary_codec_1.decode)(txOrBlob);
  87129. }
  87130. //# sourceMappingURL=signer.js.map
  87131. /***/ }),
  87132. /***/ 77850:
  87133. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  87134. "use strict";
  87135. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  87136. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  87137. return new (P || (P = Promise))(function (resolve, reject) {
  87138. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  87139. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  87140. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  87141. step((generator = generator.apply(thisArg, _arguments || [])).next());
  87142. });
  87143. };
  87144. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87145. const _1 = __webpack_require__(65643);
  87146. class BroadcastClient extends _1.Client {
  87147. constructor(servers, options = {}) {
  87148. super(servers[0], options);
  87149. const clients = servers.map((server) => new _1.Client(server, options));
  87150. this.clients = clients;
  87151. this.getMethodNames().forEach((name) => {
  87152. this[name] = (...args) => __awaiter(this, void 0, void 0, function* () { return Promise.race(clients.map((client) => __awaiter(this, void 0, void 0, function* () { return client[name](...args); }))); });
  87153. });
  87154. this.connect = () => __awaiter(this, void 0, void 0, function* () {
  87155. yield Promise.all(clients.map((client) => __awaiter(this, void 0, void 0, function* () { return client.connect(); })));
  87156. });
  87157. this.disconnect = () => __awaiter(this, void 0, void 0, function* () {
  87158. yield Promise.all(clients.map((client) => __awaiter(this, void 0, void 0, function* () { return client.disconnect(); })));
  87159. });
  87160. this.isConnected = () => clients.map((client) => client.isConnected()).every(Boolean);
  87161. clients.forEach((client) => {
  87162. client.on('error', (errorCode, errorMessage, data) => this.emit('error', errorCode, errorMessage, data));
  87163. });
  87164. }
  87165. getMethodNames() {
  87166. const methodNames = [];
  87167. const firstClient = this.clients[0];
  87168. const methods = Object.getOwnPropertyNames(firstClient);
  87169. methods.push(...Object.getOwnPropertyNames(Object.getPrototypeOf(firstClient)));
  87170. for (const name of methods) {
  87171. if (typeof firstClient[name] === 'function' &&
  87172. name !== 'constructor' &&
  87173. name !== 'on') {
  87174. methodNames.push(name);
  87175. }
  87176. }
  87177. return methodNames;
  87178. }
  87179. }
  87180. exports["default"] = BroadcastClient;
  87181. //# sourceMappingURL=BroadcastClient.js.map
  87182. /***/ }),
  87183. /***/ 62031:
  87184. /***/ (function(__unused_webpack_module, exports) {
  87185. "use strict";
  87186. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  87187. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  87188. return new (P || (P = Promise))(function (resolve, reject) {
  87189. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  87190. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  87191. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  87192. step((generator = generator.apply(thisArg, _arguments || [])).next());
  87193. });
  87194. };
  87195. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87196. class ConnectionManager {
  87197. constructor() {
  87198. this.promisesAwaitingConnection = [];
  87199. }
  87200. resolveAllAwaiting() {
  87201. this.promisesAwaitingConnection.map(({ resolve }) => resolve());
  87202. this.promisesAwaitingConnection = [];
  87203. }
  87204. rejectAllAwaiting(error) {
  87205. this.promisesAwaitingConnection.map(({ reject }) => reject(error));
  87206. this.promisesAwaitingConnection = [];
  87207. }
  87208. awaitConnection() {
  87209. return __awaiter(this, void 0, void 0, function* () {
  87210. return new Promise((resolve, reject) => {
  87211. this.promisesAwaitingConnection.push({ resolve, reject });
  87212. });
  87213. });
  87214. }
  87215. }
  87216. exports["default"] = ConnectionManager;
  87217. //# sourceMappingURL=ConnectionManager.js.map
  87218. /***/ }),
  87219. /***/ 77775:
  87220. /***/ ((__unused_webpack_module, exports) => {
  87221. "use strict";
  87222. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87223. const DEFAULT_MIN = 100;
  87224. const DEFAULT_MAX = 1000;
  87225. class ExponentialBackoff {
  87226. constructor(opts = {}) {
  87227. var _a, _b;
  87228. this.factor = 2;
  87229. this.numAttempts = 0;
  87230. this.ms = (_a = opts.min) !== null && _a !== void 0 ? _a : DEFAULT_MIN;
  87231. this.max = (_b = opts.max) !== null && _b !== void 0 ? _b : DEFAULT_MAX;
  87232. }
  87233. get attempts() {
  87234. return this.numAttempts;
  87235. }
  87236. duration() {
  87237. const ms = this.ms * Math.pow(this.factor, this.numAttempts);
  87238. this.numAttempts += 1;
  87239. return Math.floor(Math.min(ms, this.max));
  87240. }
  87241. reset() {
  87242. this.numAttempts = 0;
  87243. }
  87244. }
  87245. exports["default"] = ExponentialBackoff;
  87246. //# sourceMappingURL=ExponentialBackoff.js.map
  87247. /***/ }),
  87248. /***/ 37433:
  87249. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  87250. "use strict";
  87251. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87252. const errors_1 = __webpack_require__(25615);
  87253. class RequestManager {
  87254. constructor() {
  87255. this.nextId = 0;
  87256. this.promisesAwaitingResponse = new Map();
  87257. }
  87258. resolve(id, response) {
  87259. const promise = this.promisesAwaitingResponse.get(id);
  87260. if (promise == null) {
  87261. throw new errors_1.XrplError(`No existing promise with id ${id}`, {
  87262. type: 'resolve',
  87263. response,
  87264. });
  87265. }
  87266. clearTimeout(promise.timer);
  87267. promise.resolve(response);
  87268. this.deletePromise(id);
  87269. }
  87270. reject(id, error) {
  87271. const promise = this.promisesAwaitingResponse.get(id);
  87272. if (promise == null) {
  87273. throw new errors_1.XrplError(`No existing promise with id ${id}`, {
  87274. type: 'reject',
  87275. error,
  87276. });
  87277. }
  87278. clearTimeout(promise.timer);
  87279. promise.reject(error);
  87280. this.deletePromise(id);
  87281. }
  87282. rejectAll(error) {
  87283. this.promisesAwaitingResponse.forEach((_promise, id, _map) => {
  87284. this.reject(id, error);
  87285. this.deletePromise(id);
  87286. });
  87287. }
  87288. createRequest(request, timeout) {
  87289. let newId;
  87290. if (request.id == null) {
  87291. newId = this.nextId;
  87292. this.nextId += 1;
  87293. }
  87294. else {
  87295. newId = request.id;
  87296. }
  87297. const newRequest = JSON.stringify(Object.assign(Object.assign({}, request), { id: newId }));
  87298. const timer = setTimeout(() => {
  87299. this.reject(newId, new errors_1.TimeoutError(`Timeout for request: ${JSON.stringify(request)} with id ${newId}`, request));
  87300. }, timeout);
  87301. if (timer.unref) {
  87302. ;
  87303. timer.unref();
  87304. }
  87305. if (this.promisesAwaitingResponse.has(newId)) {
  87306. clearTimeout(timer);
  87307. throw new errors_1.XrplError(`Response with id '${newId}' is already pending`, request);
  87308. }
  87309. const newPromise = new Promise((resolve, reject) => {
  87310. this.promisesAwaitingResponse.set(newId, { resolve, reject, timer });
  87311. });
  87312. return [newId, newRequest, newPromise];
  87313. }
  87314. handleResponse(response) {
  87315. var _a, _b;
  87316. if (response.id == null ||
  87317. !(typeof response.id === 'string' || typeof response.id === 'number')) {
  87318. throw new errors_1.ResponseFormatError('valid id not found in response', response);
  87319. }
  87320. if (!this.promisesAwaitingResponse.has(response.id)) {
  87321. return;
  87322. }
  87323. if (response.status == null) {
  87324. const error = new errors_1.ResponseFormatError('Response has no status');
  87325. this.reject(response.id, error);
  87326. }
  87327. if (response.status === 'error') {
  87328. const errorResponse = response;
  87329. const error = new errors_1.RippledError((_a = errorResponse.error_message) !== null && _a !== void 0 ? _a : errorResponse.error, errorResponse);
  87330. this.reject(response.id, error);
  87331. return;
  87332. }
  87333. if (response.status !== 'success') {
  87334. const error = new errors_1.ResponseFormatError(`unrecognized response.status: ${(_b = response.status) !== null && _b !== void 0 ? _b : ''}`, response);
  87335. this.reject(response.id, error);
  87336. return;
  87337. }
  87338. delete response.status;
  87339. this.resolve(response.id, response);
  87340. }
  87341. deletePromise(id) {
  87342. this.promisesAwaitingResponse.delete(id);
  87343. }
  87344. }
  87345. exports["default"] = RequestManager;
  87346. //# sourceMappingURL=RequestManager.js.map
  87347. /***/ }),
  87348. /***/ 47812:
  87349. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  87350. "use strict";
  87351. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87352. const events_1 = __webpack_require__(17187);
  87353. class WSWrapper extends events_1.EventEmitter {
  87354. constructor(url, _protocols, _websocketOptions) {
  87355. super();
  87356. this.setMaxListeners(Infinity);
  87357. this.ws = new WebSocket(url);
  87358. this.ws.onclose = (closeEvent) => {
  87359. let reason;
  87360. if (closeEvent.reason) {
  87361. const enc = new TextEncoder();
  87362. reason = enc.encode(closeEvent.reason);
  87363. }
  87364. this.emit('close', closeEvent.code, reason);
  87365. };
  87366. this.ws.onopen = () => {
  87367. this.emit('open');
  87368. };
  87369. this.ws.onerror = (error) => {
  87370. this.emit('error', error);
  87371. };
  87372. this.ws.onmessage = (message) => {
  87373. this.emit('message', message.data);
  87374. };
  87375. }
  87376. get readyState() {
  87377. return this.ws.readyState;
  87378. }
  87379. close(code, reason) {
  87380. if (this.readyState === 1) {
  87381. this.ws.close(code, reason);
  87382. }
  87383. }
  87384. send(message) {
  87385. this.ws.send(message);
  87386. }
  87387. }
  87388. exports["default"] = WSWrapper;
  87389. WSWrapper.CONNECTING = 0;
  87390. WSWrapper.OPEN = 1;
  87391. WSWrapper.CLOSING = 2;
  87392. WSWrapper.CLOSED = 3;
  87393. //# sourceMappingURL=WSWrapper.js.map
  87394. /***/ }),
  87395. /***/ 36162:
  87396. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  87397. "use strict";
  87398. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  87399. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  87400. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  87401. return new (P || (P = Promise))(function (resolve, reject) {
  87402. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  87403. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  87404. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  87405. step((generator = generator.apply(thisArg, _arguments || [])).next());
  87406. });
  87407. };
  87408. var __importDefault = (this && this.__importDefault) || function (mod) {
  87409. return (mod && mod.__esModule) ? mod : { "default": mod };
  87410. };
  87411. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87412. exports.Connection = exports.INTENTIONAL_DISCONNECT_CODE = void 0;
  87413. const events_1 = __webpack_require__(17187);
  87414. const omitBy_1 = __importDefault(__webpack_require__(14176));
  87415. const ws_1 = __importDefault(__webpack_require__(47812));
  87416. const errors_1 = __webpack_require__(25615);
  87417. const ConnectionManager_1 = __importDefault(__webpack_require__(62031));
  87418. const ExponentialBackoff_1 = __importDefault(__webpack_require__(77775));
  87419. const RequestManager_1 = __importDefault(__webpack_require__(37433));
  87420. const SECONDS_PER_MINUTE = 60;
  87421. const TIMEOUT = 20;
  87422. const CONNECTION_TIMEOUT = 5;
  87423. exports.INTENTIONAL_DISCONNECT_CODE = 4000;
  87424. function getAgent(url, config) {
  87425. if (config.proxy == null) {
  87426. return undefined;
  87427. }
  87428. const parsedURL = new URL(url);
  87429. const parsedProxyURL = new URL(config.proxy);
  87430. const proxyOptions = (0, omitBy_1.default)({
  87431. secureEndpoint: parsedURL.protocol === 'wss:',
  87432. secureProxy: parsedProxyURL.protocol === 'https:',
  87433. auth: config.proxyAuthorization,
  87434. ca: config.trustedCertificates,
  87435. key: config.key,
  87436. passphrase: config.passphrase,
  87437. cert: config.certificate,
  87438. href: parsedProxyURL.href,
  87439. origin: parsedProxyURL.origin,
  87440. protocol: parsedProxyURL.protocol,
  87441. username: parsedProxyURL.username,
  87442. password: parsedProxyURL.password,
  87443. host: parsedProxyURL.host,
  87444. hostname: parsedProxyURL.hostname,
  87445. port: parsedProxyURL.port,
  87446. pathname: parsedProxyURL.pathname,
  87447. search: parsedProxyURL.search,
  87448. hash: parsedProxyURL.hash,
  87449. }, (value) => value == null);
  87450. let HttpsProxyAgent;
  87451. try {
  87452. HttpsProxyAgent = __webpack_require__(26155);
  87453. }
  87454. catch (_error) {
  87455. throw new Error('"proxy" option is not supported in the browser');
  87456. }
  87457. return new HttpsProxyAgent(proxyOptions);
  87458. }
  87459. function createWebSocket(url, config) {
  87460. const options = {};
  87461. options.agent = getAgent(url, config);
  87462. if (config.headers) {
  87463. options.headers = config.headers;
  87464. }
  87465. if (config.authorization != null) {
  87466. const base64 = Buffer.from(config.authorization).toString('base64');
  87467. options.headers = Object.assign(Object.assign({}, options.headers), { Authorization: `Basic ${base64}` });
  87468. }
  87469. const optionsOverrides = (0, omitBy_1.default)({
  87470. ca: config.trustedCertificates,
  87471. key: config.key,
  87472. passphrase: config.passphrase,
  87473. cert: config.certificate,
  87474. }, (value) => value == null);
  87475. const websocketOptions = Object.assign(Object.assign({}, options), optionsOverrides);
  87476. const websocket = new ws_1.default(url, websocketOptions);
  87477. if (typeof websocket.setMaxListeners === 'function') {
  87478. websocket.setMaxListeners(Infinity);
  87479. }
  87480. return websocket;
  87481. }
  87482. function websocketSendAsync(ws, message) {
  87483. return __awaiter(this, void 0, void 0, function* () {
  87484. return new Promise((resolve, reject) => {
  87485. ws.send(message, (error) => {
  87486. if (error) {
  87487. reject(new errors_1.DisconnectedError(error.message, error));
  87488. }
  87489. else {
  87490. resolve();
  87491. }
  87492. });
  87493. });
  87494. });
  87495. }
  87496. class Connection extends events_1.EventEmitter {
  87497. constructor(url, options = {}) {
  87498. super();
  87499. this.ws = null;
  87500. this.reconnectTimeoutID = null;
  87501. this.heartbeatIntervalID = null;
  87502. this.retryConnectionBackoff = new ExponentialBackoff_1.default({
  87503. min: 100,
  87504. max: SECONDS_PER_MINUTE * 1000,
  87505. });
  87506. this.requestManager = new RequestManager_1.default();
  87507. this.connectionManager = new ConnectionManager_1.default();
  87508. this.trace = () => { };
  87509. this.setMaxListeners(Infinity);
  87510. this.url = url;
  87511. this.config = Object.assign({ timeout: TIMEOUT * 1000, connectionTimeout: CONNECTION_TIMEOUT * 1000 }, options);
  87512. if (typeof options.trace === 'function') {
  87513. this.trace = options.trace;
  87514. }
  87515. else if (options.trace) {
  87516. this.trace = console.log;
  87517. }
  87518. }
  87519. get state() {
  87520. return this.ws ? this.ws.readyState : ws_1.default.CLOSED;
  87521. }
  87522. get shouldBeConnected() {
  87523. return this.ws !== null;
  87524. }
  87525. isConnected() {
  87526. return this.state === ws_1.default.OPEN;
  87527. }
  87528. connect() {
  87529. return __awaiter(this, void 0, void 0, function* () {
  87530. if (this.isConnected()) {
  87531. return Promise.resolve();
  87532. }
  87533. if (this.state === ws_1.default.CONNECTING) {
  87534. return this.connectionManager.awaitConnection();
  87535. }
  87536. if (!this.url) {
  87537. return Promise.reject(new errors_1.ConnectionError('Cannot connect because no server was specified'));
  87538. }
  87539. if (this.ws != null) {
  87540. return Promise.reject(new errors_1.XrplError('Websocket connection never cleaned up.', {
  87541. state: this.state,
  87542. }));
  87543. }
  87544. const connectionTimeoutID = setTimeout(() => {
  87545. this.onConnectionFailed(new errors_1.ConnectionError(`Error: connect() timed out after ${this.config.connectionTimeout} ms. If your internet connection is working, the ` +
  87546. `rippled server may be blocked or inaccessible. You can also try setting the 'connectionTimeout' option in the Client constructor.`));
  87547. }, this.config.connectionTimeout);
  87548. this.ws = createWebSocket(this.url, this.config);
  87549. if (this.ws == null) {
  87550. throw new errors_1.XrplError('Connect: created null websocket');
  87551. }
  87552. this.ws.on('error', (error) => this.onConnectionFailed(error));
  87553. this.ws.on('error', () => clearTimeout(connectionTimeoutID));
  87554. this.ws.on('close', (reason) => this.onConnectionFailed(reason));
  87555. this.ws.on('close', () => clearTimeout(connectionTimeoutID));
  87556. this.ws.once('open', () => {
  87557. void this.onceOpen(connectionTimeoutID);
  87558. });
  87559. return this.connectionManager.awaitConnection();
  87560. });
  87561. }
  87562. disconnect() {
  87563. return __awaiter(this, void 0, void 0, function* () {
  87564. this.clearHeartbeatInterval();
  87565. if (this.reconnectTimeoutID !== null) {
  87566. clearTimeout(this.reconnectTimeoutID);
  87567. this.reconnectTimeoutID = null;
  87568. }
  87569. if (this.state === ws_1.default.CLOSED) {
  87570. return Promise.resolve(undefined);
  87571. }
  87572. if (this.ws == null) {
  87573. return Promise.resolve(undefined);
  87574. }
  87575. return new Promise((resolve) => {
  87576. if (this.ws == null) {
  87577. resolve(undefined);
  87578. }
  87579. if (this.ws != null) {
  87580. this.ws.once('close', (code) => resolve(code));
  87581. }
  87582. if (this.ws != null && this.state !== ws_1.default.CLOSING) {
  87583. this.ws.close(exports.INTENTIONAL_DISCONNECT_CODE);
  87584. }
  87585. });
  87586. });
  87587. }
  87588. reconnect() {
  87589. return __awaiter(this, void 0, void 0, function* () {
  87590. this.emit('reconnect');
  87591. yield this.disconnect();
  87592. yield this.connect();
  87593. });
  87594. }
  87595. request(request, timeout) {
  87596. return __awaiter(this, void 0, void 0, function* () {
  87597. if (!this.shouldBeConnected || this.ws == null) {
  87598. throw new errors_1.NotConnectedError(JSON.stringify(request), request);
  87599. }
  87600. const [id, message, responsePromise] = this.requestManager.createRequest(request, timeout !== null && timeout !== void 0 ? timeout : this.config.timeout);
  87601. this.trace('send', message);
  87602. websocketSendAsync(this.ws, message).catch((error) => {
  87603. this.requestManager.reject(id, error);
  87604. });
  87605. return responsePromise;
  87606. });
  87607. }
  87608. getUrl() {
  87609. var _a;
  87610. return (_a = this.url) !== null && _a !== void 0 ? _a : '';
  87611. }
  87612. onMessage(message) {
  87613. this.trace('receive', message);
  87614. let data;
  87615. try {
  87616. data = JSON.parse(message);
  87617. }
  87618. catch (error) {
  87619. if (error instanceof Error) {
  87620. this.emit('error', 'badMessage', error.message, message);
  87621. }
  87622. return;
  87623. }
  87624. if (data.type == null && data.error) {
  87625. this.emit('error', data.error, data.error_message, data);
  87626. return;
  87627. }
  87628. if (data.type) {
  87629. this.emit(data.type, data);
  87630. }
  87631. if (data.type === 'response') {
  87632. try {
  87633. this.requestManager.handleResponse(data);
  87634. }
  87635. catch (error) {
  87636. if (error instanceof Error) {
  87637. this.emit('error', 'badMessage', error.message, message);
  87638. }
  87639. else {
  87640. this.emit('error', 'badMessage', error, error);
  87641. }
  87642. }
  87643. }
  87644. }
  87645. onceOpen(connectionTimeoutID) {
  87646. return __awaiter(this, void 0, void 0, function* () {
  87647. if (this.ws == null) {
  87648. throw new errors_1.XrplError('onceOpen: ws is null');
  87649. }
  87650. this.ws.removeAllListeners();
  87651. clearTimeout(connectionTimeoutID);
  87652. this.ws.on('message', (message) => this.onMessage(message));
  87653. this.ws.on('error', (error) => this.emit('error', 'websocket', error.message, error));
  87654. this.ws.once('close', (code, reason) => {
  87655. if (this.ws == null) {
  87656. throw new errors_1.XrplError('onceClose: ws is null');
  87657. }
  87658. this.clearHeartbeatInterval();
  87659. this.requestManager.rejectAll(new errors_1.DisconnectedError(`websocket was closed, ${new TextDecoder('utf-8').decode(reason)}`));
  87660. this.ws.removeAllListeners();
  87661. this.ws = null;
  87662. if (code === undefined) {
  87663. const internalErrorCode = 1011;
  87664. this.emit('disconnected', internalErrorCode);
  87665. }
  87666. else {
  87667. this.emit('disconnected', code);
  87668. }
  87669. if (code !== exports.INTENTIONAL_DISCONNECT_CODE && code !== undefined) {
  87670. this.intentionalDisconnect();
  87671. }
  87672. });
  87673. try {
  87674. this.retryConnectionBackoff.reset();
  87675. this.startHeartbeatInterval();
  87676. this.connectionManager.resolveAllAwaiting();
  87677. this.emit('connected');
  87678. }
  87679. catch (error) {
  87680. if (error instanceof Error) {
  87681. this.connectionManager.rejectAllAwaiting(error);
  87682. yield this.disconnect().catch(() => { });
  87683. }
  87684. }
  87685. });
  87686. }
  87687. intentionalDisconnect() {
  87688. const retryTimeout = this.retryConnectionBackoff.duration();
  87689. this.trace('reconnect', `Retrying connection in ${retryTimeout}ms.`);
  87690. this.emit('reconnecting', this.retryConnectionBackoff.attempts);
  87691. this.reconnectTimeoutID = setTimeout(() => {
  87692. this.reconnect().catch((error) => {
  87693. this.emit('error', 'reconnect', error.message, error);
  87694. });
  87695. }, retryTimeout);
  87696. }
  87697. clearHeartbeatInterval() {
  87698. if (this.heartbeatIntervalID) {
  87699. clearInterval(this.heartbeatIntervalID);
  87700. }
  87701. }
  87702. startHeartbeatInterval() {
  87703. this.clearHeartbeatInterval();
  87704. this.heartbeatIntervalID = setInterval(() => {
  87705. void this.heartbeat();
  87706. }, this.config.timeout);
  87707. }
  87708. heartbeat() {
  87709. return __awaiter(this, void 0, void 0, function* () {
  87710. this.request({ command: 'ping' }).catch(() => __awaiter(this, void 0, void 0, function* () {
  87711. return this.reconnect().catch((error) => {
  87712. this.emit('error', 'reconnect', error.message, error);
  87713. });
  87714. }));
  87715. });
  87716. }
  87717. onConnectionFailed(errorOrCode) {
  87718. if (this.ws) {
  87719. this.ws.removeAllListeners();
  87720. this.ws.on('error', () => {
  87721. });
  87722. this.ws.close();
  87723. this.ws = null;
  87724. }
  87725. if (typeof errorOrCode === 'number') {
  87726. this.connectionManager.rejectAllAwaiting(new errors_1.NotConnectedError(`Connection failed with code ${errorOrCode}.`, {
  87727. code: errorOrCode,
  87728. }));
  87729. }
  87730. else if (errorOrCode === null || errorOrCode === void 0 ? void 0 : errorOrCode.message) {
  87731. this.connectionManager.rejectAllAwaiting(new errors_1.NotConnectedError(errorOrCode.message, errorOrCode));
  87732. }
  87733. else {
  87734. this.connectionManager.rejectAllAwaiting(new errors_1.NotConnectedError('Connection failed.'));
  87735. }
  87736. }
  87737. }
  87738. exports.Connection = Connection;
  87739. //# sourceMappingURL=connection.js.map
  87740. /***/ }),
  87741. /***/ 65643:
  87742. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  87743. "use strict";
  87744. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  87745. if (k2 === undefined) k2 = k;
  87746. var desc = Object.getOwnPropertyDescriptor(m, k);
  87747. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  87748. desc = { enumerable: true, get: function() { return m[k]; } };
  87749. }
  87750. Object.defineProperty(o, k2, desc);
  87751. }) : (function(o, m, k, k2) {
  87752. if (k2 === undefined) k2 = k;
  87753. o[k2] = m[k];
  87754. }));
  87755. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  87756. Object.defineProperty(o, "default", { enumerable: true, value: v });
  87757. }) : function(o, v) {
  87758. o["default"] = v;
  87759. });
  87760. var __importStar = (this && this.__importStar) || function (mod) {
  87761. if (mod && mod.__esModule) return mod;
  87762. var result = {};
  87763. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  87764. __setModuleDefault(result, mod);
  87765. return result;
  87766. };
  87767. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  87768. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  87769. return new (P || (P = Promise))(function (resolve, reject) {
  87770. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  87771. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  87772. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  87773. step((generator = generator.apply(thisArg, _arguments || [])).next());
  87774. });
  87775. };
  87776. var __importDefault = (this && this.__importDefault) || function (mod) {
  87777. return (mod && mod.__esModule) ? mod : { "default": mod };
  87778. };
  87779. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87780. exports.Client = void 0;
  87781. const assert = __importStar(__webpack_require__(69282));
  87782. const events_1 = __webpack_require__(17187);
  87783. const errors_1 = __webpack_require__(25615);
  87784. const sugar_1 = __webpack_require__(61021);
  87785. const fundWallet_1 = __importDefault(__webpack_require__(94667));
  87786. const connection_1 = __webpack_require__(36162);
  87787. const partialPayment_1 = __webpack_require__(29653);
  87788. function getCollectKeyFromCommand(command) {
  87789. switch (command) {
  87790. case 'account_channels':
  87791. return 'channels';
  87792. case 'account_lines':
  87793. return 'lines';
  87794. case 'account_objects':
  87795. return 'account_objects';
  87796. case 'account_tx':
  87797. return 'transactions';
  87798. case 'account_offers':
  87799. case 'book_offers':
  87800. return 'offers';
  87801. case 'ledger_data':
  87802. return 'state';
  87803. default:
  87804. return null;
  87805. }
  87806. }
  87807. function clamp(value, min, max) {
  87808. assert.ok(min <= max, 'Illegal clamp bounds');
  87809. return Math.min(Math.max(value, min), max);
  87810. }
  87811. const DEFAULT_FEE_CUSHION = 1.2;
  87812. const DEFAULT_MAX_FEE_XRP = '2';
  87813. const MIN_LIMIT = 10;
  87814. const MAX_LIMIT = 400;
  87815. const NORMAL_DISCONNECT_CODE = 1000;
  87816. class Client extends events_1.EventEmitter {
  87817. constructor(server, options = {}) {
  87818. var _a, _b;
  87819. super();
  87820. this.autofill = sugar_1.autofill;
  87821. this.submit = sugar_1.submit;
  87822. this.submitAndWait = sugar_1.submitAndWait;
  87823. this.prepareTransaction = sugar_1.autofill;
  87824. this.getXrpBalance = sugar_1.getXrpBalance;
  87825. this.getBalances = sugar_1.getBalances;
  87826. this.getOrderbook = sugar_1.getOrderbook;
  87827. this.getLedgerIndex = sugar_1.getLedgerIndex;
  87828. this.fundWallet = fundWallet_1.default;
  87829. if (typeof server !== 'string' || !/wss?(?:\+unix)?:\/\//u.exec(server)) {
  87830. throw new errors_1.ValidationError('server URI must start with `wss://`, `ws://`, `wss+unix://`, or `ws+unix://`.');
  87831. }
  87832. this.feeCushion = (_a = options.feeCushion) !== null && _a !== void 0 ? _a : DEFAULT_FEE_CUSHION;
  87833. this.maxFeeXRP = (_b = options.maxFeeXRP) !== null && _b !== void 0 ? _b : DEFAULT_MAX_FEE_XRP;
  87834. this.connection = new connection_1.Connection(server, options);
  87835. this.connection.on('error', (errorCode, errorMessage, data) => {
  87836. this.emit('error', errorCode, errorMessage, data);
  87837. });
  87838. this.connection.on('connected', () => {
  87839. this.emit('connected');
  87840. });
  87841. this.connection.on('disconnected', (code) => {
  87842. let finalCode = code;
  87843. if (finalCode === connection_1.INTENTIONAL_DISCONNECT_CODE) {
  87844. finalCode = NORMAL_DISCONNECT_CODE;
  87845. }
  87846. this.emit('disconnected', finalCode);
  87847. });
  87848. this.connection.on('ledgerClosed', (ledger) => {
  87849. this.emit('ledgerClosed', ledger);
  87850. });
  87851. this.connection.on('transaction', (tx) => {
  87852. (0, partialPayment_1.handleStreamPartialPayment)(tx, this.connection.trace);
  87853. this.emit('transaction', tx);
  87854. });
  87855. this.connection.on('validationReceived', (validation) => {
  87856. this.emit('validationReceived', validation);
  87857. });
  87858. this.connection.on('manifestReceived', (manifest) => {
  87859. this.emit('manifestReceived', manifest);
  87860. });
  87861. this.connection.on('peerStatusChange', (status) => {
  87862. this.emit('peerStatusChange', status);
  87863. });
  87864. this.connection.on('consensusPhase', (consensus) => {
  87865. this.emit('consensusPhase', consensus);
  87866. });
  87867. this.connection.on('path_find', (path) => {
  87868. this.emit('path_find', path);
  87869. });
  87870. }
  87871. get url() {
  87872. return this.connection.getUrl();
  87873. }
  87874. request(req) {
  87875. return __awaiter(this, void 0, void 0, function* () {
  87876. const response = (yield this.connection.request(Object.assign(Object.assign({}, req), { account: req.account
  87877. ?
  87878. (0, sugar_1.ensureClassicAddress)(req.account)
  87879. : undefined })));
  87880. (0, partialPayment_1.handlePartialPayment)(req.command, response);
  87881. return response;
  87882. });
  87883. }
  87884. requestNextPage(req, resp) {
  87885. return __awaiter(this, void 0, void 0, function* () {
  87886. if (!resp.result.marker) {
  87887. return Promise.reject(new errors_1.NotFoundError('response does not have a next page'));
  87888. }
  87889. const nextPageRequest = Object.assign(Object.assign({}, req), { marker: resp.result.marker });
  87890. return this.request(nextPageRequest);
  87891. });
  87892. }
  87893. on(eventName, listener) {
  87894. return super.on(eventName, listener);
  87895. }
  87896. requestAll(request, collect) {
  87897. return __awaiter(this, void 0, void 0, function* () {
  87898. const collectKey = collect !== null && collect !== void 0 ? collect : getCollectKeyFromCommand(request.command);
  87899. if (!collectKey) {
  87900. throw new errors_1.ValidationError(`no collect key for command ${request.command}`);
  87901. }
  87902. const countTo = request.limit == null ? Infinity : request.limit;
  87903. let count = 0;
  87904. let marker = request.marker;
  87905. let lastBatchLength;
  87906. const results = [];
  87907. do {
  87908. const countRemaining = clamp(countTo - count, MIN_LIMIT, MAX_LIMIT);
  87909. const repeatProps = Object.assign(Object.assign({}, request), { limit: countRemaining, marker });
  87910. const singleResponse = yield this.connection.request(repeatProps);
  87911. const singleResult = singleResponse.result;
  87912. if (!(collectKey in singleResult)) {
  87913. throw new errors_1.XrplError(`${collectKey} not in result`);
  87914. }
  87915. const collectedData = singleResult[collectKey];
  87916. marker = singleResult.marker;
  87917. results.push(singleResponse);
  87918. if (Array.isArray(collectedData)) {
  87919. count += collectedData.length;
  87920. lastBatchLength = collectedData.length;
  87921. }
  87922. else {
  87923. lastBatchLength = 0;
  87924. }
  87925. } while (Boolean(marker) && count < countTo && lastBatchLength !== 0);
  87926. return results;
  87927. });
  87928. }
  87929. connect() {
  87930. return __awaiter(this, void 0, void 0, function* () {
  87931. return this.connection.connect();
  87932. });
  87933. }
  87934. disconnect() {
  87935. return __awaiter(this, void 0, void 0, function* () {
  87936. yield this.connection.disconnect();
  87937. });
  87938. }
  87939. isConnected() {
  87940. return this.connection.isConnected();
  87941. }
  87942. }
  87943. exports.Client = Client;
  87944. //# sourceMappingURL=index.js.map
  87945. /***/ }),
  87946. /***/ 29653:
  87947. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  87948. "use strict";
  87949. var __importDefault = (this && this.__importDefault) || function (mod) {
  87950. return (mod && mod.__esModule) ? mod : { "default": mod };
  87951. };
  87952. Object.defineProperty(exports, "__esModule", ({ value: true }));
  87953. exports.handleStreamPartialPayment = exports.handlePartialPayment = void 0;
  87954. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  87955. const ripple_binary_codec_1 = __webpack_require__(42353);
  87956. const transactions_1 = __webpack_require__(28714);
  87957. const utils_1 = __webpack_require__(38484);
  87958. const WARN_PARTIAL_PAYMENT_CODE = 2001;
  87959. function amountsEqual(amt1, amt2) {
  87960. if (typeof amt1 === 'string' && typeof amt2 === 'string') {
  87961. return amt1 === amt2;
  87962. }
  87963. if (typeof amt1 === 'string' || typeof amt2 === 'string') {
  87964. return false;
  87965. }
  87966. const aValue = new bignumber_js_1.default(amt1.value);
  87967. const bValue = new bignumber_js_1.default(amt2.value);
  87968. return (amt1.currency === amt2.currency &&
  87969. amt1.issuer === amt2.issuer &&
  87970. aValue.isEqualTo(bValue));
  87971. }
  87972. function isPartialPayment(tx, metadata) {
  87973. var _a;
  87974. if (tx == null || metadata == null || tx.TransactionType !== 'Payment') {
  87975. return false;
  87976. }
  87977. let meta = metadata;
  87978. if (typeof meta === 'string') {
  87979. if (meta === 'unavailable') {
  87980. return false;
  87981. }
  87982. meta = (0, ripple_binary_codec_1.decode)(meta);
  87983. }
  87984. const tfPartial = typeof tx.Flags === 'number'
  87985. ? (0, utils_1.isFlagEnabled)(tx.Flags, transactions_1.PaymentFlags.tfPartialPayment)
  87986. : (_a = tx.Flags) === null || _a === void 0 ? void 0 : _a.tfPartialPayment;
  87987. if (!tfPartial) {
  87988. return false;
  87989. }
  87990. const delivered = meta.delivered_amount;
  87991. const amount = tx.Amount;
  87992. if (delivered === undefined) {
  87993. return false;
  87994. }
  87995. return !amountsEqual(delivered, amount);
  87996. }
  87997. function txHasPartialPayment(response) {
  87998. return isPartialPayment(response.result, response.result.meta);
  87999. }
  88000. function txEntryHasPartialPayment(response) {
  88001. return isPartialPayment(response.result.tx_json, response.result.metadata);
  88002. }
  88003. function accountTxHasPartialPayment(response) {
  88004. const { transactions } = response.result;
  88005. const foo = transactions.some((tx) => isPartialPayment(tx.tx, tx.meta));
  88006. return foo;
  88007. }
  88008. function hasPartialPayment(command, response) {
  88009. switch (command) {
  88010. case 'tx':
  88011. return txHasPartialPayment(response);
  88012. case 'transaction_entry':
  88013. return txEntryHasPartialPayment(response);
  88014. case 'account_tx':
  88015. return accountTxHasPartialPayment(response);
  88016. default:
  88017. return false;
  88018. }
  88019. }
  88020. function handlePartialPayment(command, response) {
  88021. var _a;
  88022. if (hasPartialPayment(command, response)) {
  88023. const warnings = (_a = response.warnings) !== null && _a !== void 0 ? _a : [];
  88024. const warning = {
  88025. id: WARN_PARTIAL_PAYMENT_CODE,
  88026. message: 'This response contains a Partial Payment',
  88027. };
  88028. warnings.push(warning);
  88029. response.warnings = warnings;
  88030. }
  88031. }
  88032. exports.handlePartialPayment = handlePartialPayment;
  88033. function handleStreamPartialPayment(stream, log) {
  88034. var _a;
  88035. if (isPartialPayment(stream.transaction, stream.meta)) {
  88036. const warnings = (_a = stream.warnings) !== null && _a !== void 0 ? _a : [];
  88037. const warning = {
  88038. id: WARN_PARTIAL_PAYMENT_CODE,
  88039. message: 'This response contains a Partial Payment',
  88040. };
  88041. warnings.push(warning);
  88042. stream.warnings = warnings;
  88043. log('Partial payment received', JSON.stringify(stream));
  88044. }
  88045. }
  88046. exports.handleStreamPartialPayment = handleStreamPartialPayment;
  88047. //# sourceMappingURL=partialPayment.js.map
  88048. /***/ }),
  88049. /***/ 25615:
  88050. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88051. "use strict";
  88052. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88053. exports.XRPLFaucetError = exports.NotFoundError = exports.ValidationError = exports.ResponseFormatError = exports.TimeoutError = exports.RippledNotInitializedError = exports.DisconnectedError = exports.NotConnectedError = exports.RippledError = exports.ConnectionError = exports.UnexpectedError = exports.XrplError = void 0;
  88054. const util_1 = __webpack_require__(89539);
  88055. class XrplError extends Error {
  88056. constructor(message = '', data) {
  88057. super(message);
  88058. this.name = this.constructor.name;
  88059. this.message = message;
  88060. this.data = data;
  88061. if (Error.captureStackTrace != null) {
  88062. Error.captureStackTrace(this, this.constructor);
  88063. }
  88064. }
  88065. toString() {
  88066. let result = `[${this.name}(${this.message}`;
  88067. if (this.data) {
  88068. result += `, ${(0, util_1.inspect)(this.data)}`;
  88069. }
  88070. result += ')]';
  88071. return result;
  88072. }
  88073. inspect() {
  88074. return this.toString();
  88075. }
  88076. }
  88077. exports.XrplError = XrplError;
  88078. class RippledError extends XrplError {
  88079. }
  88080. exports.RippledError = RippledError;
  88081. class UnexpectedError extends XrplError {
  88082. }
  88083. exports.UnexpectedError = UnexpectedError;
  88084. class ConnectionError extends XrplError {
  88085. }
  88086. exports.ConnectionError = ConnectionError;
  88087. class NotConnectedError extends ConnectionError {
  88088. }
  88089. exports.NotConnectedError = NotConnectedError;
  88090. class DisconnectedError extends ConnectionError {
  88091. }
  88092. exports.DisconnectedError = DisconnectedError;
  88093. class RippledNotInitializedError extends ConnectionError {
  88094. }
  88095. exports.RippledNotInitializedError = RippledNotInitializedError;
  88096. class TimeoutError extends ConnectionError {
  88097. }
  88098. exports.TimeoutError = TimeoutError;
  88099. class ResponseFormatError extends ConnectionError {
  88100. }
  88101. exports.ResponseFormatError = ResponseFormatError;
  88102. class ValidationError extends XrplError {
  88103. }
  88104. exports.ValidationError = ValidationError;
  88105. class XRPLFaucetError extends XrplError {
  88106. }
  88107. exports.XRPLFaucetError = XRPLFaucetError;
  88108. class NotFoundError extends XrplError {
  88109. constructor(message = 'Not found') {
  88110. super(message);
  88111. }
  88112. }
  88113. exports.NotFoundError = NotFoundError;
  88114. //# sourceMappingURL=errors.js.map
  88115. /***/ }),
  88116. /***/ 48726:
  88117. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  88118. "use strict";
  88119. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  88120. if (k2 === undefined) k2 = k;
  88121. var desc = Object.getOwnPropertyDescriptor(m, k);
  88122. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  88123. desc = { enumerable: true, get: function() { return m[k]; } };
  88124. }
  88125. Object.defineProperty(o, k2, desc);
  88126. }) : (function(o, m, k, k2) {
  88127. if (k2 === undefined) k2 = k;
  88128. o[k2] = m[k];
  88129. }));
  88130. var __exportStar = (this && this.__exportStar) || function(m, exports) {
  88131. for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
  88132. };
  88133. var __importDefault = (this && this.__importDefault) || function (mod) {
  88134. return (mod && mod.__esModule) ? mod : { "default": mod };
  88135. };
  88136. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88137. exports.rfc1751MnemonicToKey = exports.keyToRFC1751Mnemonic = exports.Wallet = exports.Client = exports.BroadcastClient = void 0;
  88138. var BroadcastClient_1 = __webpack_require__(77850);
  88139. Object.defineProperty(exports, "BroadcastClient", ({ enumerable: true, get: function () { return __importDefault(BroadcastClient_1).default; } }));
  88140. var client_1 = __webpack_require__(65643);
  88141. Object.defineProperty(exports, "Client", ({ enumerable: true, get: function () { return client_1.Client; } }));
  88142. __exportStar(__webpack_require__(86676), exports);
  88143. __exportStar(__webpack_require__(6607), exports);
  88144. __exportStar(__webpack_require__(25615), exports);
  88145. var Wallet_1 = __webpack_require__(69959);
  88146. Object.defineProperty(exports, "Wallet", ({ enumerable: true, get: function () { return __importDefault(Wallet_1).default; } }));
  88147. var rfc1751_1 = __webpack_require__(48940);
  88148. Object.defineProperty(exports, "keyToRFC1751Mnemonic", ({ enumerable: true, get: function () { return rfc1751_1.keyToRFC1751Mnemonic; } }));
  88149. Object.defineProperty(exports, "rfc1751MnemonicToKey", ({ enumerable: true, get: function () { return rfc1751_1.rfc1751MnemonicToKey; } }));
  88150. __exportStar(__webpack_require__(34498), exports);
  88151. //# sourceMappingURL=index.js.map
  88152. /***/ }),
  88153. /***/ 86676:
  88154. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  88155. "use strict";
  88156. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  88157. if (k2 === undefined) k2 = k;
  88158. var desc = Object.getOwnPropertyDescriptor(m, k);
  88159. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  88160. desc = { enumerable: true, get: function() { return m[k]; } };
  88161. }
  88162. Object.defineProperty(o, k2, desc);
  88163. }) : (function(o, m, k, k2) {
  88164. if (k2 === undefined) k2 = k;
  88165. o[k2] = m[k];
  88166. }));
  88167. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  88168. Object.defineProperty(o, "default", { enumerable: true, value: v });
  88169. }) : function(o, v) {
  88170. o["default"] = v;
  88171. });
  88172. var __importStar = (this && this.__importStar) || function (mod) {
  88173. if (mod && mod.__esModule) return mod;
  88174. var result = {};
  88175. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  88176. __setModuleDefault(result, mod);
  88177. return result;
  88178. };
  88179. var __exportStar = (this && this.__exportStar) || function(m, exports) {
  88180. for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
  88181. };
  88182. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88183. exports.parseAccountRootFlags = exports.setTransactionFlagsToNumber = exports.LedgerEntry = void 0;
  88184. exports.LedgerEntry = __importStar(__webpack_require__(71704));
  88185. var flags_1 = __webpack_require__(34279);
  88186. Object.defineProperty(exports, "setTransactionFlagsToNumber", ({ enumerable: true, get: function () { return flags_1.setTransactionFlagsToNumber; } }));
  88187. Object.defineProperty(exports, "parseAccountRootFlags", ({ enumerable: true, get: function () { return flags_1.parseAccountRootFlags; } }));
  88188. __exportStar(__webpack_require__(24309), exports);
  88189. __exportStar(__webpack_require__(28714), exports);
  88190. //# sourceMappingURL=index.js.map
  88191. /***/ }),
  88192. /***/ 98245:
  88193. /***/ ((__unused_webpack_module, exports) => {
  88194. "use strict";
  88195. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88196. exports.AccountRootFlags = void 0;
  88197. var AccountRootFlags;
  88198. (function (AccountRootFlags) {
  88199. AccountRootFlags[AccountRootFlags["lsfPasswordSpent"] = 65536] = "lsfPasswordSpent";
  88200. AccountRootFlags[AccountRootFlags["lsfRequireDestTag"] = 131072] = "lsfRequireDestTag";
  88201. AccountRootFlags[AccountRootFlags["lsfRequireAuth"] = 262144] = "lsfRequireAuth";
  88202. AccountRootFlags[AccountRootFlags["lsfDisallowXRP"] = 524288] = "lsfDisallowXRP";
  88203. AccountRootFlags[AccountRootFlags["lsfDisableMaster"] = 1048576] = "lsfDisableMaster";
  88204. AccountRootFlags[AccountRootFlags["lsfNoFreeze"] = 2097152] = "lsfNoFreeze";
  88205. AccountRootFlags[AccountRootFlags["lsfGlobalFreeze"] = 4194304] = "lsfGlobalFreeze";
  88206. AccountRootFlags[AccountRootFlags["lsfDefaultRipple"] = 8388608] = "lsfDefaultRipple";
  88207. AccountRootFlags[AccountRootFlags["lsfDepositAuth"] = 16777216] = "lsfDepositAuth";
  88208. AccountRootFlags[AccountRootFlags["lsfDisallowIncomingNFTokenOffer"] = 67108864] = "lsfDisallowIncomingNFTokenOffer";
  88209. AccountRootFlags[AccountRootFlags["lsfDisallowIncomingCheck"] = 134217728] = "lsfDisallowIncomingCheck";
  88210. AccountRootFlags[AccountRootFlags["lsfDisallowIncomingPayChan"] = 268435456] = "lsfDisallowIncomingPayChan";
  88211. AccountRootFlags[AccountRootFlags["lsfDisallowIncomingTrustline"] = 536870912] = "lsfDisallowIncomingTrustline";
  88212. })(AccountRootFlags = exports.AccountRootFlags || (exports.AccountRootFlags = {}));
  88213. //# sourceMappingURL=AccountRoot.js.map
  88214. /***/ }),
  88215. /***/ 59910:
  88216. /***/ ((__unused_webpack_module, exports) => {
  88217. "use strict";
  88218. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88219. exports.OfferFlags = void 0;
  88220. var OfferFlags;
  88221. (function (OfferFlags) {
  88222. OfferFlags[OfferFlags["lsfPassive"] = 65536] = "lsfPassive";
  88223. OfferFlags[OfferFlags["lsfSell"] = 131072] = "lsfSell";
  88224. })(OfferFlags = exports.OfferFlags || (exports.OfferFlags = {}));
  88225. //# sourceMappingURL=Offer.js.map
  88226. /***/ }),
  88227. /***/ 93705:
  88228. /***/ ((__unused_webpack_module, exports) => {
  88229. "use strict";
  88230. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88231. exports.RippleStateFlags = void 0;
  88232. var RippleStateFlags;
  88233. (function (RippleStateFlags) {
  88234. RippleStateFlags[RippleStateFlags["lsfLowReserve"] = 65536] = "lsfLowReserve";
  88235. RippleStateFlags[RippleStateFlags["lsfHighReserve"] = 131072] = "lsfHighReserve";
  88236. RippleStateFlags[RippleStateFlags["lsfLowAuth"] = 262144] = "lsfLowAuth";
  88237. RippleStateFlags[RippleStateFlags["lsfHighAuth"] = 524288] = "lsfHighAuth";
  88238. RippleStateFlags[RippleStateFlags["lsfLowNoRipple"] = 1048576] = "lsfLowNoRipple";
  88239. RippleStateFlags[RippleStateFlags["lsfHighNoRipple"] = 2097152] = "lsfHighNoRipple";
  88240. RippleStateFlags[RippleStateFlags["lsfLowFreeze"] = 4194304] = "lsfLowFreeze";
  88241. RippleStateFlags[RippleStateFlags["lsfHighFreeze"] = 8388608] = "lsfHighFreeze";
  88242. })(RippleStateFlags = exports.RippleStateFlags || (exports.RippleStateFlags = {}));
  88243. //# sourceMappingURL=RippleState.js.map
  88244. /***/ }),
  88245. /***/ 47329:
  88246. /***/ ((__unused_webpack_module, exports) => {
  88247. "use strict";
  88248. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88249. exports.SignerListFlags = void 0;
  88250. var SignerListFlags;
  88251. (function (SignerListFlags) {
  88252. SignerListFlags[SignerListFlags["lsfOneOwnerCount"] = 65536] = "lsfOneOwnerCount";
  88253. })(SignerListFlags = exports.SignerListFlags || (exports.SignerListFlags = {}));
  88254. //# sourceMappingURL=SignerList.js.map
  88255. /***/ }),
  88256. /***/ 71704:
  88257. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88258. "use strict";
  88259. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88260. exports.SignerListFlags = exports.RippleStateFlags = exports.OfferFlags = exports.AccountRootFlags = void 0;
  88261. const AccountRoot_1 = __webpack_require__(98245);
  88262. Object.defineProperty(exports, "AccountRootFlags", ({ enumerable: true, get: function () { return AccountRoot_1.AccountRootFlags; } }));
  88263. const Offer_1 = __webpack_require__(59910);
  88264. Object.defineProperty(exports, "OfferFlags", ({ enumerable: true, get: function () { return Offer_1.OfferFlags; } }));
  88265. const RippleState_1 = __webpack_require__(93705);
  88266. Object.defineProperty(exports, "RippleStateFlags", ({ enumerable: true, get: function () { return RippleState_1.RippleStateFlags; } }));
  88267. const SignerList_1 = __webpack_require__(47329);
  88268. Object.defineProperty(exports, "SignerListFlags", ({ enumerable: true, get: function () { return SignerList_1.SignerListFlags; } }));
  88269. //# sourceMappingURL=index.js.map
  88270. /***/ }),
  88271. /***/ 24309:
  88272. /***/ ((__unused_webpack_module, exports) => {
  88273. "use strict";
  88274. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88275. //# sourceMappingURL=index.js.map
  88276. /***/ }),
  88277. /***/ 95832:
  88278. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88279. "use strict";
  88280. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88281. exports.validateNFTokenAcceptOffer = void 0;
  88282. const errors_1 = __webpack_require__(25615);
  88283. const common_1 = __webpack_require__(49633);
  88284. function validateNFTokenBrokerFee(tx) {
  88285. const value = (0, common_1.parseAmountValue)(tx.NFTokenBrokerFee);
  88286. if (Number.isNaN(value)) {
  88287. throw new errors_1.ValidationError('NFTokenAcceptOffer: invalid NFTokenBrokerFee');
  88288. }
  88289. if (value <= 0) {
  88290. throw new errors_1.ValidationError('NFTokenAcceptOffer: NFTokenBrokerFee must be greater than 0; omit if there is no fee');
  88291. }
  88292. if (tx.NFTokenSellOffer == null || tx.NFTokenBuyOffer == null) {
  88293. throw new errors_1.ValidationError('NFTokenAcceptOffer: both NFTokenSellOffer and NFTokenBuyOffer must be set if using brokered mode');
  88294. }
  88295. }
  88296. function validateNFTokenAcceptOffer(tx) {
  88297. (0, common_1.validateBaseTransaction)(tx);
  88298. if (tx.NFTokenBrokerFee != null) {
  88299. validateNFTokenBrokerFee(tx);
  88300. }
  88301. if (tx.NFTokenSellOffer == null && tx.NFTokenBuyOffer == null) {
  88302. throw new errors_1.ValidationError('NFTokenAcceptOffer: must set either NFTokenSellOffer or NFTokenBuyOffer');
  88303. }
  88304. }
  88305. exports.validateNFTokenAcceptOffer = validateNFTokenAcceptOffer;
  88306. //# sourceMappingURL=NFTokenAcceptOffer.js.map
  88307. /***/ }),
  88308. /***/ 20769:
  88309. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88310. "use strict";
  88311. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88312. exports.validateNFTokenBurn = void 0;
  88313. const errors_1 = __webpack_require__(25615);
  88314. const common_1 = __webpack_require__(49633);
  88315. function validateNFTokenBurn(tx) {
  88316. (0, common_1.validateBaseTransaction)(tx);
  88317. if (tx.NFTokenID == null) {
  88318. throw new errors_1.ValidationError('NFTokenBurn: missing field NFTokenID');
  88319. }
  88320. }
  88321. exports.validateNFTokenBurn = validateNFTokenBurn;
  88322. //# sourceMappingURL=NFTokenBurn.js.map
  88323. /***/ }),
  88324. /***/ 57726:
  88325. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88326. "use strict";
  88327. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88328. exports.validateNFTokenCancelOffer = void 0;
  88329. const errors_1 = __webpack_require__(25615);
  88330. const common_1 = __webpack_require__(49633);
  88331. function validateNFTokenCancelOffer(tx) {
  88332. (0, common_1.validateBaseTransaction)(tx);
  88333. if (!Array.isArray(tx.NFTokenOffers)) {
  88334. throw new errors_1.ValidationError('NFTokenCancelOffer: missing field NFTokenOffers');
  88335. }
  88336. if (tx.NFTokenOffers.length < 1) {
  88337. throw new errors_1.ValidationError('NFTokenCancelOffer: empty field NFTokenOffers');
  88338. }
  88339. }
  88340. exports.validateNFTokenCancelOffer = validateNFTokenCancelOffer;
  88341. //# sourceMappingURL=NFTokenCancelOffer.js.map
  88342. /***/ }),
  88343. /***/ 2591:
  88344. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88345. "use strict";
  88346. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88347. exports.validateNFTokenCreateOffer = exports.NFTokenCreateOfferFlags = void 0;
  88348. const errors_1 = __webpack_require__(25615);
  88349. const utils_1 = __webpack_require__(38484);
  88350. const common_1 = __webpack_require__(49633);
  88351. var NFTokenCreateOfferFlags;
  88352. (function (NFTokenCreateOfferFlags) {
  88353. NFTokenCreateOfferFlags[NFTokenCreateOfferFlags["tfSellNFToken"] = 1] = "tfSellNFToken";
  88354. })(NFTokenCreateOfferFlags = exports.NFTokenCreateOfferFlags || (exports.NFTokenCreateOfferFlags = {}));
  88355. function validateNFTokenSellOfferCases(tx) {
  88356. if (tx.Owner != null) {
  88357. throw new errors_1.ValidationError('NFTokenCreateOffer: Owner must not be present for sell offers');
  88358. }
  88359. }
  88360. function validateNFTokenBuyOfferCases(tx) {
  88361. if (tx.Owner == null) {
  88362. throw new errors_1.ValidationError('NFTokenCreateOffer: Owner must be present for buy offers');
  88363. }
  88364. if ((0, common_1.parseAmountValue)(tx.Amount) <= 0) {
  88365. throw new errors_1.ValidationError('NFTokenCreateOffer: Amount must be greater than 0 for buy offers');
  88366. }
  88367. }
  88368. function validateNFTokenCreateOffer(tx) {
  88369. (0, common_1.validateBaseTransaction)(tx);
  88370. if (tx.Account === tx.Owner) {
  88371. throw new errors_1.ValidationError('NFTokenCreateOffer: Owner and Account must not be equal');
  88372. }
  88373. if (tx.Account === tx.Destination) {
  88374. throw new errors_1.ValidationError('NFTokenCreateOffer: Destination and Account must not be equal');
  88375. }
  88376. if (tx.NFTokenID == null) {
  88377. throw new errors_1.ValidationError('NFTokenCreateOffer: missing field NFTokenID');
  88378. }
  88379. if (!(0, common_1.isAmount)(tx.Amount)) {
  88380. throw new errors_1.ValidationError('NFTokenCreateOffer: invalid Amount');
  88381. }
  88382. if (typeof tx.Flags === 'number' &&
  88383. (0, utils_1.isFlagEnabled)(tx.Flags, NFTokenCreateOfferFlags.tfSellNFToken)) {
  88384. validateNFTokenSellOfferCases(tx);
  88385. }
  88386. else {
  88387. validateNFTokenBuyOfferCases(tx);
  88388. }
  88389. }
  88390. exports.validateNFTokenCreateOffer = validateNFTokenCreateOffer;
  88391. //# sourceMappingURL=NFTokenCreateOffer.js.map
  88392. /***/ }),
  88393. /***/ 38278:
  88394. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88395. "use strict";
  88396. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88397. exports.validateNFTokenMint = exports.NFTokenMintFlags = void 0;
  88398. const errors_1 = __webpack_require__(25615);
  88399. const utils_1 = __webpack_require__(38484);
  88400. const common_1 = __webpack_require__(49633);
  88401. var NFTokenMintFlags;
  88402. (function (NFTokenMintFlags) {
  88403. NFTokenMintFlags[NFTokenMintFlags["tfBurnable"] = 1] = "tfBurnable";
  88404. NFTokenMintFlags[NFTokenMintFlags["tfOnlyXRP"] = 2] = "tfOnlyXRP";
  88405. NFTokenMintFlags[NFTokenMintFlags["tfTrustLine"] = 4] = "tfTrustLine";
  88406. NFTokenMintFlags[NFTokenMintFlags["tfTransferable"] = 8] = "tfTransferable";
  88407. })(NFTokenMintFlags = exports.NFTokenMintFlags || (exports.NFTokenMintFlags = {}));
  88408. function validateNFTokenMint(tx) {
  88409. (0, common_1.validateBaseTransaction)(tx);
  88410. if (tx.Account === tx.Issuer) {
  88411. throw new errors_1.ValidationError('NFTokenMint: Issuer must not be equal to Account');
  88412. }
  88413. if (typeof tx.URI === 'string' && !(0, utils_1.isHex)(tx.URI)) {
  88414. throw new errors_1.ValidationError('NFTokenMint: URI must be in hex format');
  88415. }
  88416. if (tx.NFTokenTaxon == null) {
  88417. throw new errors_1.ValidationError('NFTokenMint: missing field NFTokenTaxon');
  88418. }
  88419. }
  88420. exports.validateNFTokenMint = validateNFTokenMint;
  88421. //# sourceMappingURL=NFTokenMint.js.map
  88422. /***/ }),
  88423. /***/ 523:
  88424. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88425. "use strict";
  88426. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88427. exports.validateAccountDelete = void 0;
  88428. const errors_1 = __webpack_require__(25615);
  88429. const common_1 = __webpack_require__(49633);
  88430. function validateAccountDelete(tx) {
  88431. (0, common_1.validateBaseTransaction)(tx);
  88432. if (tx.Destination === undefined) {
  88433. throw new errors_1.ValidationError('AccountDelete: missing field Destination');
  88434. }
  88435. if (typeof tx.Destination !== 'string') {
  88436. throw new errors_1.ValidationError('AccountDelete: invalid Destination');
  88437. }
  88438. if (tx.DestinationTag !== undefined &&
  88439. typeof tx.DestinationTag !== 'number') {
  88440. throw new errors_1.ValidationError('AccountDelete: invalid DestinationTag');
  88441. }
  88442. }
  88443. exports.validateAccountDelete = validateAccountDelete;
  88444. //# sourceMappingURL=accountDelete.js.map
  88445. /***/ }),
  88446. /***/ 45889:
  88447. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88448. "use strict";
  88449. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88450. exports.validateAccountSet = exports.AccountSetTfFlags = exports.AccountSetAsfFlags = void 0;
  88451. const ripple_address_codec_1 = __webpack_require__(88914);
  88452. const errors_1 = __webpack_require__(25615);
  88453. const common_1 = __webpack_require__(49633);
  88454. var AccountSetAsfFlags;
  88455. (function (AccountSetAsfFlags) {
  88456. AccountSetAsfFlags[AccountSetAsfFlags["asfRequireDest"] = 1] = "asfRequireDest";
  88457. AccountSetAsfFlags[AccountSetAsfFlags["asfRequireAuth"] = 2] = "asfRequireAuth";
  88458. AccountSetAsfFlags[AccountSetAsfFlags["asfDisallowXRP"] = 3] = "asfDisallowXRP";
  88459. AccountSetAsfFlags[AccountSetAsfFlags["asfDisableMaster"] = 4] = "asfDisableMaster";
  88460. AccountSetAsfFlags[AccountSetAsfFlags["asfAccountTxnID"] = 5] = "asfAccountTxnID";
  88461. AccountSetAsfFlags[AccountSetAsfFlags["asfNoFreeze"] = 6] = "asfNoFreeze";
  88462. AccountSetAsfFlags[AccountSetAsfFlags["asfGlobalFreeze"] = 7] = "asfGlobalFreeze";
  88463. AccountSetAsfFlags[AccountSetAsfFlags["asfDefaultRipple"] = 8] = "asfDefaultRipple";
  88464. AccountSetAsfFlags[AccountSetAsfFlags["asfDepositAuth"] = 9] = "asfDepositAuth";
  88465. AccountSetAsfFlags[AccountSetAsfFlags["asfAuthorizedNFTokenMinter"] = 10] = "asfAuthorizedNFTokenMinter";
  88466. AccountSetAsfFlags[AccountSetAsfFlags["asfDisallowIncomingNFTokenOffer"] = 12] = "asfDisallowIncomingNFTokenOffer";
  88467. AccountSetAsfFlags[AccountSetAsfFlags["asfDisallowIncomingCheck"] = 13] = "asfDisallowIncomingCheck";
  88468. AccountSetAsfFlags[AccountSetAsfFlags["asfDisallowIncomingPayChan"] = 14] = "asfDisallowIncomingPayChan";
  88469. AccountSetAsfFlags[AccountSetAsfFlags["asfDisallowIncomingTrustline"] = 15] = "asfDisallowIncomingTrustline";
  88470. })(AccountSetAsfFlags = exports.AccountSetAsfFlags || (exports.AccountSetAsfFlags = {}));
  88471. var AccountSetTfFlags;
  88472. (function (AccountSetTfFlags) {
  88473. AccountSetTfFlags[AccountSetTfFlags["tfRequireDestTag"] = 65536] = "tfRequireDestTag";
  88474. AccountSetTfFlags[AccountSetTfFlags["tfOptionalDestTag"] = 131072] = "tfOptionalDestTag";
  88475. AccountSetTfFlags[AccountSetTfFlags["tfRequireAuth"] = 262144] = "tfRequireAuth";
  88476. AccountSetTfFlags[AccountSetTfFlags["tfOptionalAuth"] = 524288] = "tfOptionalAuth";
  88477. AccountSetTfFlags[AccountSetTfFlags["tfDisallowXRP"] = 1048576] = "tfDisallowXRP";
  88478. AccountSetTfFlags[AccountSetTfFlags["tfAllowXRP"] = 2097152] = "tfAllowXRP";
  88479. })(AccountSetTfFlags = exports.AccountSetTfFlags || (exports.AccountSetTfFlags = {}));
  88480. const MIN_TICK_SIZE = 3;
  88481. const MAX_TICK_SIZE = 15;
  88482. function validateAccountSet(tx) {
  88483. (0, common_1.validateBaseTransaction)(tx);
  88484. if (tx.NFTokenMinter !== undefined &&
  88485. !(0, ripple_address_codec_1.isValidClassicAddress)(String(tx.NFTokenMinter))) {
  88486. throw new errors_1.ValidationError('AccountSet: invalid NFTokenMinter');
  88487. }
  88488. if (tx.ClearFlag !== undefined) {
  88489. if (typeof tx.ClearFlag !== 'number') {
  88490. throw new errors_1.ValidationError('AccountSet: invalid ClearFlag');
  88491. }
  88492. if (!Object.values(AccountSetAsfFlags).includes(tx.ClearFlag)) {
  88493. throw new errors_1.ValidationError('AccountSet: invalid ClearFlag');
  88494. }
  88495. }
  88496. if (tx.Domain !== undefined && typeof tx.Domain !== 'string') {
  88497. throw new errors_1.ValidationError('AccountSet: invalid Domain');
  88498. }
  88499. if (tx.EmailHash !== undefined && typeof tx.EmailHash !== 'string') {
  88500. throw new errors_1.ValidationError('AccountSet: invalid EmailHash');
  88501. }
  88502. if (tx.MessageKey !== undefined && typeof tx.MessageKey !== 'string') {
  88503. throw new errors_1.ValidationError('AccountSet: invalid MessageKey');
  88504. }
  88505. if (tx.SetFlag !== undefined) {
  88506. if (typeof tx.SetFlag !== 'number') {
  88507. throw new errors_1.ValidationError('AccountSet: invalid SetFlag');
  88508. }
  88509. if (!Object.values(AccountSetAsfFlags).includes(tx.SetFlag)) {
  88510. throw new errors_1.ValidationError('AccountSet: invalid SetFlag');
  88511. }
  88512. }
  88513. if (tx.TransferRate !== undefined && typeof tx.TransferRate !== 'number') {
  88514. throw new errors_1.ValidationError('AccountSet: invalid TransferRate');
  88515. }
  88516. if (tx.TickSize !== undefined) {
  88517. if (typeof tx.TickSize !== 'number') {
  88518. throw new errors_1.ValidationError('AccountSet: invalid TickSize');
  88519. }
  88520. if (tx.TickSize !== 0 &&
  88521. (tx.TickSize < MIN_TICK_SIZE || tx.TickSize > MAX_TICK_SIZE)) {
  88522. throw new errors_1.ValidationError('AccountSet: invalid TickSize');
  88523. }
  88524. }
  88525. }
  88526. exports.validateAccountSet = validateAccountSet;
  88527. //# sourceMappingURL=accountSet.js.map
  88528. /***/ }),
  88529. /***/ 1527:
  88530. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88531. "use strict";
  88532. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88533. exports.validateCheckCancel = void 0;
  88534. const errors_1 = __webpack_require__(25615);
  88535. const common_1 = __webpack_require__(49633);
  88536. function validateCheckCancel(tx) {
  88537. (0, common_1.validateBaseTransaction)(tx);
  88538. if (tx.CheckID !== undefined && typeof tx.CheckID !== 'string') {
  88539. throw new errors_1.ValidationError('CheckCancel: invalid CheckID');
  88540. }
  88541. }
  88542. exports.validateCheckCancel = validateCheckCancel;
  88543. //# sourceMappingURL=checkCancel.js.map
  88544. /***/ }),
  88545. /***/ 30611:
  88546. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88547. "use strict";
  88548. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88549. exports.validateCheckCash = void 0;
  88550. const errors_1 = __webpack_require__(25615);
  88551. const common_1 = __webpack_require__(49633);
  88552. function validateCheckCash(tx) {
  88553. (0, common_1.validateBaseTransaction)(tx);
  88554. if (tx.Amount == null && tx.DeliverMin == null) {
  88555. throw new errors_1.ValidationError('CheckCash: must have either Amount or DeliverMin');
  88556. }
  88557. if (tx.Amount != null && tx.DeliverMin != null) {
  88558. throw new errors_1.ValidationError('CheckCash: cannot have both Amount and DeliverMin');
  88559. }
  88560. if (tx.Amount != null && tx.Amount !== undefined && !(0, common_1.isAmount)(tx.Amount)) {
  88561. throw new errors_1.ValidationError('CheckCash: invalid Amount');
  88562. }
  88563. if (tx.DeliverMin != null &&
  88564. tx.DeliverMin !== undefined &&
  88565. !(0, common_1.isAmount)(tx.DeliverMin)) {
  88566. throw new errors_1.ValidationError('CheckCash: invalid DeliverMin');
  88567. }
  88568. if (tx.CheckID !== undefined && typeof tx.CheckID !== 'string') {
  88569. throw new errors_1.ValidationError('CheckCash: invalid CheckID');
  88570. }
  88571. }
  88572. exports.validateCheckCash = validateCheckCash;
  88573. //# sourceMappingURL=checkCash.js.map
  88574. /***/ }),
  88575. /***/ 24531:
  88576. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88577. "use strict";
  88578. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88579. exports.validateCheckCreate = void 0;
  88580. const errors_1 = __webpack_require__(25615);
  88581. const common_1 = __webpack_require__(49633);
  88582. function validateCheckCreate(tx) {
  88583. (0, common_1.validateBaseTransaction)(tx);
  88584. if (tx.SendMax === undefined) {
  88585. throw new errors_1.ValidationError('CheckCreate: missing field SendMax');
  88586. }
  88587. if (tx.Destination === undefined) {
  88588. throw new errors_1.ValidationError('CheckCreate: missing field Destination');
  88589. }
  88590. if (typeof tx.SendMax !== 'string' &&
  88591. !(0, common_1.isIssuedCurrency)(tx.SendMax)) {
  88592. throw new errors_1.ValidationError('CheckCreate: invalid SendMax');
  88593. }
  88594. if (typeof tx.Destination !== 'string') {
  88595. throw new errors_1.ValidationError('CheckCreate: invalid Destination');
  88596. }
  88597. if (tx.DestinationTag !== undefined &&
  88598. typeof tx.DestinationTag !== 'number') {
  88599. throw new errors_1.ValidationError('CheckCreate: invalid DestinationTag');
  88600. }
  88601. if (tx.Expiration !== undefined && typeof tx.Expiration !== 'number') {
  88602. throw new errors_1.ValidationError('CheckCreate: invalid Expiration');
  88603. }
  88604. if (tx.InvoiceID !== undefined && typeof tx.InvoiceID !== 'string') {
  88605. throw new errors_1.ValidationError('CheckCreate: invalid InvoiceID');
  88606. }
  88607. }
  88608. exports.validateCheckCreate = validateCheckCreate;
  88609. //# sourceMappingURL=checkCreate.js.map
  88610. /***/ }),
  88611. /***/ 49633:
  88612. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88613. "use strict";
  88614. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88615. exports.parseAmountValue = exports.validateBaseTransaction = exports.isAmount = exports.isIssuedCurrency = void 0;
  88616. const ripple_binary_codec_1 = __webpack_require__(42353);
  88617. const errors_1 = __webpack_require__(25615);
  88618. const utils_1 = __webpack_require__(38484);
  88619. const MEMO_SIZE = 3;
  88620. function isMemo(obj) {
  88621. if (obj.Memo == null) {
  88622. return false;
  88623. }
  88624. const memo = obj.Memo;
  88625. const size = Object.keys(memo).length;
  88626. const validData = memo.MemoData == null || typeof memo.MemoData === 'string';
  88627. const validFormat = memo.MemoFormat == null || typeof memo.MemoFormat === 'string';
  88628. const validType = memo.MemoType == null || typeof memo.MemoType === 'string';
  88629. return (size >= 1 &&
  88630. size <= MEMO_SIZE &&
  88631. validData &&
  88632. validFormat &&
  88633. validType &&
  88634. (0, utils_1.onlyHasFields)(memo, ['MemoFormat', 'MemoData', 'MemoType']));
  88635. }
  88636. const SIGNER_SIZE = 3;
  88637. function isSigner(obj) {
  88638. const signerWrapper = obj;
  88639. if (signerWrapper.Signer == null) {
  88640. return false;
  88641. }
  88642. const signer = signerWrapper.Signer;
  88643. return (Object.keys(signer).length === SIGNER_SIZE &&
  88644. typeof signer.Account === 'string' &&
  88645. typeof signer.TxnSignature === 'string' &&
  88646. typeof signer.SigningPubKey === 'string');
  88647. }
  88648. const ISSUED_CURRENCY_SIZE = 3;
  88649. function isRecord(value) {
  88650. return value !== null && typeof value === 'object';
  88651. }
  88652. function isIssuedCurrency(input) {
  88653. return (isRecord(input) &&
  88654. Object.keys(input).length === ISSUED_CURRENCY_SIZE &&
  88655. typeof input.value === 'string' &&
  88656. typeof input.issuer === 'string' &&
  88657. typeof input.currency === 'string');
  88658. }
  88659. exports.isIssuedCurrency = isIssuedCurrency;
  88660. function isAmount(amount) {
  88661. return typeof amount === 'string' || isIssuedCurrency(amount);
  88662. }
  88663. exports.isAmount = isAmount;
  88664. function validateBaseTransaction(common) {
  88665. if (common.Account === undefined) {
  88666. throw new errors_1.ValidationError('BaseTransaction: missing field Account');
  88667. }
  88668. if (typeof common.Account !== 'string') {
  88669. throw new errors_1.ValidationError('BaseTransaction: Account not string');
  88670. }
  88671. if (common.TransactionType === undefined) {
  88672. throw new errors_1.ValidationError('BaseTransaction: missing field TransactionType');
  88673. }
  88674. if (typeof common.TransactionType !== 'string') {
  88675. throw new errors_1.ValidationError('BaseTransaction: TransactionType not string');
  88676. }
  88677. if (!ripple_binary_codec_1.TRANSACTION_TYPES.includes(common.TransactionType)) {
  88678. throw new errors_1.ValidationError('BaseTransaction: Unknown TransactionType');
  88679. }
  88680. if (common.Fee !== undefined && typeof common.Fee !== 'string') {
  88681. throw new errors_1.ValidationError('BaseTransaction: invalid Fee');
  88682. }
  88683. if (common.Sequence !== undefined && typeof common.Sequence !== 'number') {
  88684. throw new errors_1.ValidationError('BaseTransaction: invalid Sequence');
  88685. }
  88686. if (common.AccountTxnID !== undefined &&
  88687. typeof common.AccountTxnID !== 'string') {
  88688. throw new errors_1.ValidationError('BaseTransaction: invalid AccountTxnID');
  88689. }
  88690. if (common.LastLedgerSequence !== undefined &&
  88691. typeof common.LastLedgerSequence !== 'number') {
  88692. throw new errors_1.ValidationError('BaseTransaction: invalid LastLedgerSequence');
  88693. }
  88694. const memos = common.Memos;
  88695. if (memos !== undefined && !memos.every(isMemo)) {
  88696. throw new errors_1.ValidationError('BaseTransaction: invalid Memos');
  88697. }
  88698. const signers = common.Signers;
  88699. if (signers !== undefined &&
  88700. (signers.length === 0 || !signers.every(isSigner))) {
  88701. throw new errors_1.ValidationError('BaseTransaction: invalid Signers');
  88702. }
  88703. if (common.SourceTag !== undefined && typeof common.SourceTag !== 'number') {
  88704. throw new errors_1.ValidationError('BaseTransaction: invalid SourceTag');
  88705. }
  88706. if (common.SigningPubKey !== undefined &&
  88707. typeof common.SigningPubKey !== 'string') {
  88708. throw new errors_1.ValidationError('BaseTransaction: invalid SigningPubKey');
  88709. }
  88710. if (common.TicketSequence !== undefined &&
  88711. typeof common.TicketSequence !== 'number') {
  88712. throw new errors_1.ValidationError('BaseTransaction: invalid TicketSequence');
  88713. }
  88714. if (common.TxnSignature !== undefined &&
  88715. typeof common.TxnSignature !== 'string') {
  88716. throw new errors_1.ValidationError('BaseTransaction: invalid TxnSignature');
  88717. }
  88718. }
  88719. exports.validateBaseTransaction = validateBaseTransaction;
  88720. function parseAmountValue(amount) {
  88721. if (!isAmount(amount)) {
  88722. return NaN;
  88723. }
  88724. if (typeof amount === 'string') {
  88725. return parseFloat(amount);
  88726. }
  88727. return parseFloat(amount.value);
  88728. }
  88729. exports.parseAmountValue = parseAmountValue;
  88730. //# sourceMappingURL=common.js.map
  88731. /***/ }),
  88732. /***/ 88985:
  88733. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88734. "use strict";
  88735. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88736. exports.validateDepositPreauth = void 0;
  88737. const errors_1 = __webpack_require__(25615);
  88738. const common_1 = __webpack_require__(49633);
  88739. function validateDepositPreauth(tx) {
  88740. (0, common_1.validateBaseTransaction)(tx);
  88741. if (tx.Authorize !== undefined && tx.Unauthorize !== undefined) {
  88742. throw new errors_1.ValidationError("DepositPreauth: can't provide both Authorize and Unauthorize fields");
  88743. }
  88744. if (tx.Authorize === undefined && tx.Unauthorize === undefined) {
  88745. throw new errors_1.ValidationError('DepositPreauth: must provide either Authorize or Unauthorize field');
  88746. }
  88747. if (tx.Authorize !== undefined) {
  88748. if (typeof tx.Authorize !== 'string') {
  88749. throw new errors_1.ValidationError('DepositPreauth: Authorize must be a string');
  88750. }
  88751. if (tx.Account === tx.Authorize) {
  88752. throw new errors_1.ValidationError("DepositPreauth: Account can't preauthorize its own address");
  88753. }
  88754. }
  88755. if (tx.Unauthorize !== undefined) {
  88756. if (typeof tx.Unauthorize !== 'string') {
  88757. throw new errors_1.ValidationError('DepositPreauth: Unauthorize must be a string');
  88758. }
  88759. if (tx.Account === tx.Unauthorize) {
  88760. throw new errors_1.ValidationError("DepositPreauth: Account can't unauthorize its own address");
  88761. }
  88762. }
  88763. }
  88764. exports.validateDepositPreauth = validateDepositPreauth;
  88765. //# sourceMappingURL=depositPreauth.js.map
  88766. /***/ }),
  88767. /***/ 48327:
  88768. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88769. "use strict";
  88770. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88771. exports.validateEscrowCancel = void 0;
  88772. const errors_1 = __webpack_require__(25615);
  88773. const common_1 = __webpack_require__(49633);
  88774. function validateEscrowCancel(tx) {
  88775. (0, common_1.validateBaseTransaction)(tx);
  88776. if (tx.Owner === undefined) {
  88777. throw new errors_1.ValidationError('EscrowCancel: missing Owner');
  88778. }
  88779. if (typeof tx.Owner !== 'string') {
  88780. throw new errors_1.ValidationError('EscrowCancel: Owner must be a string');
  88781. }
  88782. if (tx.OfferSequence === undefined) {
  88783. throw new errors_1.ValidationError('EscrowCancel: missing OfferSequence');
  88784. }
  88785. if (typeof tx.OfferSequence !== 'number') {
  88786. throw new errors_1.ValidationError('EscrowCancel: OfferSequence must be a number');
  88787. }
  88788. }
  88789. exports.validateEscrowCancel = validateEscrowCancel;
  88790. //# sourceMappingURL=escrowCancel.js.map
  88791. /***/ }),
  88792. /***/ 67243:
  88793. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88794. "use strict";
  88795. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88796. exports.validateEscrowCreate = void 0;
  88797. const errors_1 = __webpack_require__(25615);
  88798. const common_1 = __webpack_require__(49633);
  88799. function validateEscrowCreate(tx) {
  88800. (0, common_1.validateBaseTransaction)(tx);
  88801. if (tx.Amount === undefined) {
  88802. throw new errors_1.ValidationError('EscrowCreate: missing field Amount');
  88803. }
  88804. if (typeof tx.Amount !== 'string') {
  88805. throw new errors_1.ValidationError('EscrowCreate: Amount must be a string');
  88806. }
  88807. if (tx.Destination === undefined) {
  88808. throw new errors_1.ValidationError('EscrowCreate: missing field Destination');
  88809. }
  88810. if (typeof tx.Destination !== 'string') {
  88811. throw new errors_1.ValidationError('EscrowCreate: Destination must be a string');
  88812. }
  88813. if (tx.CancelAfter === undefined && tx.FinishAfter === undefined) {
  88814. throw new errors_1.ValidationError('EscrowCreate: Either CancelAfter or FinishAfter must be specified');
  88815. }
  88816. if (tx.FinishAfter === undefined && tx.Condition === undefined) {
  88817. throw new errors_1.ValidationError('EscrowCreate: Either Condition or FinishAfter must be specified');
  88818. }
  88819. if (tx.CancelAfter !== undefined && typeof tx.CancelAfter !== 'number') {
  88820. throw new errors_1.ValidationError('EscrowCreate: CancelAfter must be a number');
  88821. }
  88822. if (tx.FinishAfter !== undefined && typeof tx.FinishAfter !== 'number') {
  88823. throw new errors_1.ValidationError('EscrowCreate: FinishAfter must be a number');
  88824. }
  88825. if (tx.Condition !== undefined && typeof tx.Condition !== 'string') {
  88826. throw new errors_1.ValidationError('EscrowCreate: Condition must be a string');
  88827. }
  88828. if (tx.DestinationTag !== undefined &&
  88829. typeof tx.DestinationTag !== 'number') {
  88830. throw new errors_1.ValidationError('EscrowCreate: DestinationTag must be a number');
  88831. }
  88832. }
  88833. exports.validateEscrowCreate = validateEscrowCreate;
  88834. //# sourceMappingURL=escrowCreate.js.map
  88835. /***/ }),
  88836. /***/ 39735:
  88837. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88838. "use strict";
  88839. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88840. exports.validateEscrowFinish = void 0;
  88841. const errors_1 = __webpack_require__(25615);
  88842. const common_1 = __webpack_require__(49633);
  88843. function validateEscrowFinish(tx) {
  88844. (0, common_1.validateBaseTransaction)(tx);
  88845. if (tx.Owner === undefined) {
  88846. throw new errors_1.ValidationError('EscrowFinish: missing field Owner');
  88847. }
  88848. if (typeof tx.Owner !== 'string') {
  88849. throw new errors_1.ValidationError('EscrowFinish: Owner must be a string');
  88850. }
  88851. if (tx.OfferSequence === undefined) {
  88852. throw new errors_1.ValidationError('EscrowFinish: missing field OfferSequence');
  88853. }
  88854. if (typeof tx.OfferSequence !== 'number') {
  88855. throw new errors_1.ValidationError('EscrowFinish: OfferSequence must be a number');
  88856. }
  88857. if (tx.Condition !== undefined && typeof tx.Condition !== 'string') {
  88858. throw new errors_1.ValidationError('EscrowFinish: Condition must be a string');
  88859. }
  88860. if (tx.Fulfillment !== undefined && typeof tx.Fulfillment !== 'string') {
  88861. throw new errors_1.ValidationError('EscrowFinish: Fulfillment must be a string');
  88862. }
  88863. }
  88864. exports.validateEscrowFinish = validateEscrowFinish;
  88865. //# sourceMappingURL=escrowFinish.js.map
  88866. /***/ }),
  88867. /***/ 28714:
  88868. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88869. "use strict";
  88870. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88871. exports.TrustSetFlags = exports.PaymentChannelClaimFlags = exports.PaymentFlags = exports.OfferCreateFlags = exports.NFTokenMintFlags = exports.NFTokenCreateOfferFlags = exports.AccountSetTfFlags = exports.AccountSetAsfFlags = exports.validate = void 0;
  88872. var transaction_1 = __webpack_require__(52992);
  88873. Object.defineProperty(exports, "validate", ({ enumerable: true, get: function () { return transaction_1.validate; } }));
  88874. var accountSet_1 = __webpack_require__(45889);
  88875. Object.defineProperty(exports, "AccountSetAsfFlags", ({ enumerable: true, get: function () { return accountSet_1.AccountSetAsfFlags; } }));
  88876. Object.defineProperty(exports, "AccountSetTfFlags", ({ enumerable: true, get: function () { return accountSet_1.AccountSetTfFlags; } }));
  88877. var NFTokenCreateOffer_1 = __webpack_require__(2591);
  88878. Object.defineProperty(exports, "NFTokenCreateOfferFlags", ({ enumerable: true, get: function () { return NFTokenCreateOffer_1.NFTokenCreateOfferFlags; } }));
  88879. var NFTokenMint_1 = __webpack_require__(38278);
  88880. Object.defineProperty(exports, "NFTokenMintFlags", ({ enumerable: true, get: function () { return NFTokenMint_1.NFTokenMintFlags; } }));
  88881. var offerCreate_1 = __webpack_require__(92749);
  88882. Object.defineProperty(exports, "OfferCreateFlags", ({ enumerable: true, get: function () { return offerCreate_1.OfferCreateFlags; } }));
  88883. var payment_1 = __webpack_require__(96510);
  88884. Object.defineProperty(exports, "PaymentFlags", ({ enumerable: true, get: function () { return payment_1.PaymentFlags; } }));
  88885. var paymentChannelClaim_1 = __webpack_require__(55932);
  88886. Object.defineProperty(exports, "PaymentChannelClaimFlags", ({ enumerable: true, get: function () { return paymentChannelClaim_1.PaymentChannelClaimFlags; } }));
  88887. var trustSet_1 = __webpack_require__(79726);
  88888. Object.defineProperty(exports, "TrustSetFlags", ({ enumerable: true, get: function () { return trustSet_1.TrustSetFlags; } }));
  88889. //# sourceMappingURL=index.js.map
  88890. /***/ }),
  88891. /***/ 76262:
  88892. /***/ ((__unused_webpack_module, exports) => {
  88893. "use strict";
  88894. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88895. exports.isDeletedNode = exports.isModifiedNode = exports.isCreatedNode = void 0;
  88896. function isCreatedNode(node) {
  88897. return Object.prototype.hasOwnProperty.call(node, `CreatedNode`);
  88898. }
  88899. exports.isCreatedNode = isCreatedNode;
  88900. function isModifiedNode(node) {
  88901. return Object.prototype.hasOwnProperty.call(node, `ModifiedNode`);
  88902. }
  88903. exports.isModifiedNode = isModifiedNode;
  88904. function isDeletedNode(node) {
  88905. return Object.prototype.hasOwnProperty.call(node, `DeletedNode`);
  88906. }
  88907. exports.isDeletedNode = isDeletedNode;
  88908. //# sourceMappingURL=metadata.js.map
  88909. /***/ }),
  88910. /***/ 82953:
  88911. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88912. "use strict";
  88913. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88914. exports.validateOfferCancel = void 0;
  88915. const errors_1 = __webpack_require__(25615);
  88916. const common_1 = __webpack_require__(49633);
  88917. function validateOfferCancel(tx) {
  88918. (0, common_1.validateBaseTransaction)(tx);
  88919. if (tx.OfferSequence === undefined) {
  88920. throw new errors_1.ValidationError('OfferCancel: missing field OfferSequence');
  88921. }
  88922. if (typeof tx.OfferSequence !== 'number') {
  88923. throw new errors_1.ValidationError('OfferCancel: OfferSequence must be a number');
  88924. }
  88925. }
  88926. exports.validateOfferCancel = validateOfferCancel;
  88927. //# sourceMappingURL=offerCancel.js.map
  88928. /***/ }),
  88929. /***/ 92749:
  88930. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88931. "use strict";
  88932. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88933. exports.validateOfferCreate = exports.OfferCreateFlags = void 0;
  88934. const errors_1 = __webpack_require__(25615);
  88935. const common_1 = __webpack_require__(49633);
  88936. var OfferCreateFlags;
  88937. (function (OfferCreateFlags) {
  88938. OfferCreateFlags[OfferCreateFlags["tfPassive"] = 65536] = "tfPassive";
  88939. OfferCreateFlags[OfferCreateFlags["tfImmediateOrCancel"] = 131072] = "tfImmediateOrCancel";
  88940. OfferCreateFlags[OfferCreateFlags["tfFillOrKill"] = 262144] = "tfFillOrKill";
  88941. OfferCreateFlags[OfferCreateFlags["tfSell"] = 524288] = "tfSell";
  88942. })(OfferCreateFlags = exports.OfferCreateFlags || (exports.OfferCreateFlags = {}));
  88943. function validateOfferCreate(tx) {
  88944. (0, common_1.validateBaseTransaction)(tx);
  88945. if (tx.TakerGets === undefined) {
  88946. throw new errors_1.ValidationError('OfferCreate: missing field TakerGets');
  88947. }
  88948. if (tx.TakerPays === undefined) {
  88949. throw new errors_1.ValidationError('OfferCreate: missing field TakerPays');
  88950. }
  88951. if (typeof tx.TakerGets !== 'string' && !(0, common_1.isAmount)(tx.TakerGets)) {
  88952. throw new errors_1.ValidationError('OfferCreate: invalid TakerGets');
  88953. }
  88954. if (typeof tx.TakerPays !== 'string' && !(0, common_1.isAmount)(tx.TakerPays)) {
  88955. throw new errors_1.ValidationError('OfferCreate: invalid TakerPays');
  88956. }
  88957. if (tx.Expiration !== undefined && typeof tx.Expiration !== 'number') {
  88958. throw new errors_1.ValidationError('OfferCreate: invalid Expiration');
  88959. }
  88960. if (tx.OfferSequence !== undefined && typeof tx.OfferSequence !== 'number') {
  88961. throw new errors_1.ValidationError('OfferCreate: invalid OfferSequence');
  88962. }
  88963. }
  88964. exports.validateOfferCreate = validateOfferCreate;
  88965. //# sourceMappingURL=offerCreate.js.map
  88966. /***/ }),
  88967. /***/ 96510:
  88968. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  88969. "use strict";
  88970. Object.defineProperty(exports, "__esModule", ({ value: true }));
  88971. exports.validatePayment = exports.PaymentFlags = void 0;
  88972. const errors_1 = __webpack_require__(25615);
  88973. const utils_1 = __webpack_require__(38484);
  88974. const common_1 = __webpack_require__(49633);
  88975. var PaymentFlags;
  88976. (function (PaymentFlags) {
  88977. PaymentFlags[PaymentFlags["tfNoDirectRipple"] = 65536] = "tfNoDirectRipple";
  88978. PaymentFlags[PaymentFlags["tfPartialPayment"] = 131072] = "tfPartialPayment";
  88979. PaymentFlags[PaymentFlags["tfLimitQuality"] = 262144] = "tfLimitQuality";
  88980. })(PaymentFlags = exports.PaymentFlags || (exports.PaymentFlags = {}));
  88981. function validatePayment(tx) {
  88982. (0, common_1.validateBaseTransaction)(tx);
  88983. if (tx.Amount === undefined) {
  88984. throw new errors_1.ValidationError('PaymentTransaction: missing field Amount');
  88985. }
  88986. if (!(0, common_1.isAmount)(tx.Amount)) {
  88987. throw new errors_1.ValidationError('PaymentTransaction: invalid Amount');
  88988. }
  88989. if (tx.Destination === undefined) {
  88990. throw new errors_1.ValidationError('PaymentTransaction: missing field Destination');
  88991. }
  88992. if (!(0, common_1.isAmount)(tx.Destination)) {
  88993. throw new errors_1.ValidationError('PaymentTransaction: invalid Destination');
  88994. }
  88995. if (tx.DestinationTag != null && typeof tx.DestinationTag !== 'number') {
  88996. throw new errors_1.ValidationError('PaymentTransaction: DestinationTag must be a number');
  88997. }
  88998. if (tx.InvoiceID !== undefined && typeof tx.InvoiceID !== 'string') {
  88999. throw new errors_1.ValidationError('PaymentTransaction: InvoiceID must be a string');
  89000. }
  89001. if (tx.Paths !== undefined &&
  89002. !isPaths(tx.Paths)) {
  89003. throw new errors_1.ValidationError('PaymentTransaction: invalid Paths');
  89004. }
  89005. if (tx.SendMax !== undefined && !(0, common_1.isAmount)(tx.SendMax)) {
  89006. throw new errors_1.ValidationError('PaymentTransaction: invalid SendMax');
  89007. }
  89008. checkPartialPayment(tx);
  89009. }
  89010. exports.validatePayment = validatePayment;
  89011. function checkPartialPayment(tx) {
  89012. var _a;
  89013. if (tx.DeliverMin != null) {
  89014. if (tx.Flags == null) {
  89015. throw new errors_1.ValidationError('PaymentTransaction: tfPartialPayment flag required with DeliverMin');
  89016. }
  89017. const flags = tx.Flags;
  89018. const isTfPartialPayment = typeof flags === 'number'
  89019. ? (0, utils_1.isFlagEnabled)(flags, PaymentFlags.tfPartialPayment)
  89020. : (_a = flags.tfPartialPayment) !== null && _a !== void 0 ? _a : false;
  89021. if (!isTfPartialPayment) {
  89022. throw new errors_1.ValidationError('PaymentTransaction: tfPartialPayment flag required with DeliverMin');
  89023. }
  89024. if (!(0, common_1.isAmount)(tx.DeliverMin)) {
  89025. throw new errors_1.ValidationError('PaymentTransaction: invalid DeliverMin');
  89026. }
  89027. }
  89028. }
  89029. function isPathStep(pathStep) {
  89030. if (pathStep.account !== undefined && typeof pathStep.account !== 'string') {
  89031. return false;
  89032. }
  89033. if (pathStep.currency !== undefined &&
  89034. typeof pathStep.currency !== 'string') {
  89035. return false;
  89036. }
  89037. if (pathStep.issuer !== undefined && typeof pathStep.issuer !== 'string') {
  89038. return false;
  89039. }
  89040. if (pathStep.account !== undefined &&
  89041. pathStep.currency === undefined &&
  89042. pathStep.issuer === undefined) {
  89043. return true;
  89044. }
  89045. if (pathStep.currency !== undefined || pathStep.issuer !== undefined) {
  89046. return true;
  89047. }
  89048. return false;
  89049. }
  89050. function isPath(path) {
  89051. for (const pathStep of path) {
  89052. if (!isPathStep(pathStep)) {
  89053. return false;
  89054. }
  89055. }
  89056. return true;
  89057. }
  89058. function isPaths(paths) {
  89059. if (!Array.isArray(paths) || paths.length === 0) {
  89060. return false;
  89061. }
  89062. for (const path of paths) {
  89063. if (!Array.isArray(path) || path.length === 0) {
  89064. return false;
  89065. }
  89066. if (!isPath(path)) {
  89067. return false;
  89068. }
  89069. }
  89070. return true;
  89071. }
  89072. //# sourceMappingURL=payment.js.map
  89073. /***/ }),
  89074. /***/ 55932:
  89075. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  89076. "use strict";
  89077. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89078. exports.validatePaymentChannelClaim = exports.PaymentChannelClaimFlags = void 0;
  89079. const errors_1 = __webpack_require__(25615);
  89080. const common_1 = __webpack_require__(49633);
  89081. var PaymentChannelClaimFlags;
  89082. (function (PaymentChannelClaimFlags) {
  89083. PaymentChannelClaimFlags[PaymentChannelClaimFlags["tfRenew"] = 65536] = "tfRenew";
  89084. PaymentChannelClaimFlags[PaymentChannelClaimFlags["tfClose"] = 131072] = "tfClose";
  89085. })(PaymentChannelClaimFlags = exports.PaymentChannelClaimFlags || (exports.PaymentChannelClaimFlags = {}));
  89086. function validatePaymentChannelClaim(tx) {
  89087. (0, common_1.validateBaseTransaction)(tx);
  89088. if (tx.Channel === undefined) {
  89089. throw new errors_1.ValidationError('PaymentChannelClaim: missing Channel');
  89090. }
  89091. if (typeof tx.Channel !== 'string') {
  89092. throw new errors_1.ValidationError('PaymentChannelClaim: Channel must be a string');
  89093. }
  89094. if (tx.Balance !== undefined && typeof tx.Balance !== 'string') {
  89095. throw new errors_1.ValidationError('PaymentChannelClaim: Balance must be a string');
  89096. }
  89097. if (tx.Amount !== undefined && typeof tx.Amount !== 'string') {
  89098. throw new errors_1.ValidationError('PaymentChannelClaim: Amount must be a string');
  89099. }
  89100. if (tx.Signature !== undefined && typeof tx.Signature !== 'string') {
  89101. throw new errors_1.ValidationError('PaymentChannelClaim: Signature must be a string');
  89102. }
  89103. if (tx.PublicKey !== undefined && typeof tx.PublicKey !== 'string') {
  89104. throw new errors_1.ValidationError('PaymentChannelClaim: PublicKey must be a string');
  89105. }
  89106. }
  89107. exports.validatePaymentChannelClaim = validatePaymentChannelClaim;
  89108. //# sourceMappingURL=paymentChannelClaim.js.map
  89109. /***/ }),
  89110. /***/ 4252:
  89111. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  89112. "use strict";
  89113. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89114. exports.validatePaymentChannelCreate = void 0;
  89115. const errors_1 = __webpack_require__(25615);
  89116. const common_1 = __webpack_require__(49633);
  89117. function validatePaymentChannelCreate(tx) {
  89118. (0, common_1.validateBaseTransaction)(tx);
  89119. if (tx.Amount === undefined) {
  89120. throw new errors_1.ValidationError('PaymentChannelCreate: missing Amount');
  89121. }
  89122. if (typeof tx.Amount !== 'string') {
  89123. throw new errors_1.ValidationError('PaymentChannelCreate: Amount must be a string');
  89124. }
  89125. if (tx.Destination === undefined) {
  89126. throw new errors_1.ValidationError('PaymentChannelCreate: missing Destination');
  89127. }
  89128. if (typeof tx.Destination !== 'string') {
  89129. throw new errors_1.ValidationError('PaymentChannelCreate: Destination must be a string');
  89130. }
  89131. if (tx.SettleDelay === undefined) {
  89132. throw new errors_1.ValidationError('PaymentChannelCreate: missing SettleDelay');
  89133. }
  89134. if (typeof tx.SettleDelay !== 'number') {
  89135. throw new errors_1.ValidationError('PaymentChannelCreate: SettleDelay must be a number');
  89136. }
  89137. if (tx.PublicKey === undefined) {
  89138. throw new errors_1.ValidationError('PaymentChannelCreate: missing PublicKey');
  89139. }
  89140. if (typeof tx.PublicKey !== 'string') {
  89141. throw new errors_1.ValidationError('PaymentChannelCreate: PublicKey must be a string');
  89142. }
  89143. if (tx.CancelAfter !== undefined && typeof tx.CancelAfter !== 'number') {
  89144. throw new errors_1.ValidationError('PaymentChannelCreate: CancelAfter must be a number');
  89145. }
  89146. if (tx.DestinationTag !== undefined &&
  89147. typeof tx.DestinationTag !== 'number') {
  89148. throw new errors_1.ValidationError('PaymentChannelCreate: DestinationTag must be a number');
  89149. }
  89150. }
  89151. exports.validatePaymentChannelCreate = validatePaymentChannelCreate;
  89152. //# sourceMappingURL=paymentChannelCreate.js.map
  89153. /***/ }),
  89154. /***/ 35270:
  89155. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  89156. "use strict";
  89157. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89158. exports.validatePaymentChannelFund = void 0;
  89159. const errors_1 = __webpack_require__(25615);
  89160. const common_1 = __webpack_require__(49633);
  89161. function validatePaymentChannelFund(tx) {
  89162. (0, common_1.validateBaseTransaction)(tx);
  89163. if (tx.Channel === undefined) {
  89164. throw new errors_1.ValidationError('PaymentChannelFund: missing Channel');
  89165. }
  89166. if (typeof tx.Channel !== 'string') {
  89167. throw new errors_1.ValidationError('PaymentChannelFund: Channel must be a string');
  89168. }
  89169. if (tx.Amount === undefined) {
  89170. throw new errors_1.ValidationError('PaymentChannelFund: missing Amount');
  89171. }
  89172. if (typeof tx.Amount !== 'string') {
  89173. throw new errors_1.ValidationError('PaymentChannelFund: Amount must be a string');
  89174. }
  89175. if (tx.Expiration !== undefined && typeof tx.Expiration !== 'number') {
  89176. throw new errors_1.ValidationError('PaymentChannelFund: Expiration must be a number');
  89177. }
  89178. }
  89179. exports.validatePaymentChannelFund = validatePaymentChannelFund;
  89180. //# sourceMappingURL=paymentChannelFund.js.map
  89181. /***/ }),
  89182. /***/ 57104:
  89183. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  89184. "use strict";
  89185. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89186. exports.validateSetRegularKey = void 0;
  89187. const errors_1 = __webpack_require__(25615);
  89188. const common_1 = __webpack_require__(49633);
  89189. function validateSetRegularKey(tx) {
  89190. (0, common_1.validateBaseTransaction)(tx);
  89191. if (tx.RegularKey !== undefined && typeof tx.RegularKey !== 'string') {
  89192. throw new errors_1.ValidationError('SetRegularKey: RegularKey must be a string');
  89193. }
  89194. }
  89195. exports.validateSetRegularKey = validateSetRegularKey;
  89196. //# sourceMappingURL=setRegularKey.js.map
  89197. /***/ }),
  89198. /***/ 88222:
  89199. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  89200. "use strict";
  89201. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89202. exports.validateSignerListSet = void 0;
  89203. const errors_1 = __webpack_require__(25615);
  89204. const common_1 = __webpack_require__(49633);
  89205. const MAX_SIGNERS = 32;
  89206. const HEX_WALLET_LOCATOR_REGEX = /^[0-9A-Fa-f]{64}$/u;
  89207. function validateSignerListSet(tx) {
  89208. (0, common_1.validateBaseTransaction)(tx);
  89209. if (tx.SignerQuorum === undefined) {
  89210. throw new errors_1.ValidationError('SignerListSet: missing field SignerQuorum');
  89211. }
  89212. if (typeof tx.SignerQuorum !== 'number') {
  89213. throw new errors_1.ValidationError('SignerListSet: invalid SignerQuorum');
  89214. }
  89215. if (tx.SignerEntries === undefined) {
  89216. throw new errors_1.ValidationError('SignerListSet: missing field SignerEntries');
  89217. }
  89218. if (!Array.isArray(tx.SignerEntries)) {
  89219. throw new errors_1.ValidationError('SignerListSet: invalid SignerEntries');
  89220. }
  89221. if (tx.SignerEntries.length === 0) {
  89222. throw new errors_1.ValidationError('SignerListSet: need at least 1 member in SignerEntries');
  89223. }
  89224. if (tx.SignerEntries.length > MAX_SIGNERS) {
  89225. throw new errors_1.ValidationError(`SignerListSet: maximum of ${MAX_SIGNERS} members allowed in SignerEntries`);
  89226. }
  89227. for (const entry of tx.SignerEntries) {
  89228. const signerEntry = entry;
  89229. const { WalletLocator } = signerEntry.SignerEntry;
  89230. if (WalletLocator !== undefined &&
  89231. !HEX_WALLET_LOCATOR_REGEX.test(WalletLocator)) {
  89232. throw new errors_1.ValidationError(`SignerListSet: WalletLocator in SignerEntry must be a 256-bit (32-byte) hexadecimal value`);
  89233. }
  89234. }
  89235. }
  89236. exports.validateSignerListSet = validateSignerListSet;
  89237. //# sourceMappingURL=signerListSet.js.map
  89238. /***/ }),
  89239. /***/ 41100:
  89240. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  89241. "use strict";
  89242. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89243. exports.validateTicketCreate = void 0;
  89244. const errors_1 = __webpack_require__(25615);
  89245. const common_1 = __webpack_require__(49633);
  89246. const MAX_TICKETS = 250;
  89247. function validateTicketCreate(tx) {
  89248. (0, common_1.validateBaseTransaction)(tx);
  89249. const { TicketCount } = tx;
  89250. if (TicketCount === undefined) {
  89251. throw new errors_1.ValidationError('TicketCreate: missing field TicketCount');
  89252. }
  89253. if (typeof TicketCount !== 'number') {
  89254. throw new errors_1.ValidationError('TicketCreate: TicketCount must be a number');
  89255. }
  89256. if (!Number.isInteger(TicketCount) ||
  89257. TicketCount < 1 ||
  89258. TicketCount > MAX_TICKETS) {
  89259. throw new errors_1.ValidationError('TicketCreate: TicketCount must be an integer from 1 to 250');
  89260. }
  89261. }
  89262. exports.validateTicketCreate = validateTicketCreate;
  89263. //# sourceMappingURL=ticketCreate.js.map
  89264. /***/ }),
  89265. /***/ 52992:
  89266. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  89267. "use strict";
  89268. var __importDefault = (this && this.__importDefault) || function (mod) {
  89269. return (mod && mod.__esModule) ? mod : { "default": mod };
  89270. };
  89271. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89272. exports.validate = void 0;
  89273. const isEqual_1 = __importDefault(__webpack_require__(18446));
  89274. const omitBy_1 = __importDefault(__webpack_require__(14176));
  89275. const ripple_binary_codec_1 = __webpack_require__(42353);
  89276. const errors_1 = __webpack_require__(25615);
  89277. const flags_1 = __webpack_require__(34279);
  89278. const accountDelete_1 = __webpack_require__(523);
  89279. const accountSet_1 = __webpack_require__(45889);
  89280. const checkCancel_1 = __webpack_require__(1527);
  89281. const checkCash_1 = __webpack_require__(30611);
  89282. const checkCreate_1 = __webpack_require__(24531);
  89283. const depositPreauth_1 = __webpack_require__(88985);
  89284. const escrowCancel_1 = __webpack_require__(48327);
  89285. const escrowCreate_1 = __webpack_require__(67243);
  89286. const escrowFinish_1 = __webpack_require__(39735);
  89287. const NFTokenAcceptOffer_1 = __webpack_require__(95832);
  89288. const NFTokenBurn_1 = __webpack_require__(20769);
  89289. const NFTokenCancelOffer_1 = __webpack_require__(57726);
  89290. const NFTokenCreateOffer_1 = __webpack_require__(2591);
  89291. const NFTokenMint_1 = __webpack_require__(38278);
  89292. const offerCancel_1 = __webpack_require__(82953);
  89293. const offerCreate_1 = __webpack_require__(92749);
  89294. const payment_1 = __webpack_require__(96510);
  89295. const paymentChannelClaim_1 = __webpack_require__(55932);
  89296. const paymentChannelCreate_1 = __webpack_require__(4252);
  89297. const paymentChannelFund_1 = __webpack_require__(35270);
  89298. const setRegularKey_1 = __webpack_require__(57104);
  89299. const signerListSet_1 = __webpack_require__(88222);
  89300. const ticketCreate_1 = __webpack_require__(41100);
  89301. const trustSet_1 = __webpack_require__(79726);
  89302. function validate(transaction) {
  89303. const tx = Object.assign({}, transaction);
  89304. if (tx.TransactionType == null) {
  89305. throw new errors_1.ValidationError('Object does not have a `TransactionType`');
  89306. }
  89307. if (typeof tx.TransactionType !== 'string') {
  89308. throw new errors_1.ValidationError("Object's `TransactionType` is not a string");
  89309. }
  89310. (0, flags_1.setTransactionFlagsToNumber)(tx);
  89311. switch (tx.TransactionType) {
  89312. case 'AccountDelete':
  89313. (0, accountDelete_1.validateAccountDelete)(tx);
  89314. break;
  89315. case 'AccountSet':
  89316. (0, accountSet_1.validateAccountSet)(tx);
  89317. break;
  89318. case 'CheckCancel':
  89319. (0, checkCancel_1.validateCheckCancel)(tx);
  89320. break;
  89321. case 'CheckCash':
  89322. (0, checkCash_1.validateCheckCash)(tx);
  89323. break;
  89324. case 'CheckCreate':
  89325. (0, checkCreate_1.validateCheckCreate)(tx);
  89326. break;
  89327. case 'DepositPreauth':
  89328. (0, depositPreauth_1.validateDepositPreauth)(tx);
  89329. break;
  89330. case 'EscrowCancel':
  89331. (0, escrowCancel_1.validateEscrowCancel)(tx);
  89332. break;
  89333. case 'EscrowCreate':
  89334. (0, escrowCreate_1.validateEscrowCreate)(tx);
  89335. break;
  89336. case 'EscrowFinish':
  89337. (0, escrowFinish_1.validateEscrowFinish)(tx);
  89338. break;
  89339. case 'NFTokenAcceptOffer':
  89340. (0, NFTokenAcceptOffer_1.validateNFTokenAcceptOffer)(tx);
  89341. break;
  89342. case 'NFTokenBurn':
  89343. (0, NFTokenBurn_1.validateNFTokenBurn)(tx);
  89344. break;
  89345. case 'NFTokenCancelOffer':
  89346. (0, NFTokenCancelOffer_1.validateNFTokenCancelOffer)(tx);
  89347. break;
  89348. case 'NFTokenCreateOffer':
  89349. (0, NFTokenCreateOffer_1.validateNFTokenCreateOffer)(tx);
  89350. break;
  89351. case 'NFTokenMint':
  89352. (0, NFTokenMint_1.validateNFTokenMint)(tx);
  89353. break;
  89354. case 'OfferCancel':
  89355. (0, offerCancel_1.validateOfferCancel)(tx);
  89356. break;
  89357. case 'OfferCreate':
  89358. (0, offerCreate_1.validateOfferCreate)(tx);
  89359. break;
  89360. case 'Payment':
  89361. (0, payment_1.validatePayment)(tx);
  89362. break;
  89363. case 'PaymentChannelClaim':
  89364. (0, paymentChannelClaim_1.validatePaymentChannelClaim)(tx);
  89365. break;
  89366. case 'PaymentChannelCreate':
  89367. (0, paymentChannelCreate_1.validatePaymentChannelCreate)(tx);
  89368. break;
  89369. case 'PaymentChannelFund':
  89370. (0, paymentChannelFund_1.validatePaymentChannelFund)(tx);
  89371. break;
  89372. case 'SetRegularKey':
  89373. (0, setRegularKey_1.validateSetRegularKey)(tx);
  89374. break;
  89375. case 'SignerListSet':
  89376. (0, signerListSet_1.validateSignerListSet)(tx);
  89377. break;
  89378. case 'TicketCreate':
  89379. (0, ticketCreate_1.validateTicketCreate)(tx);
  89380. break;
  89381. case 'TrustSet':
  89382. (0, trustSet_1.validateTrustSet)(tx);
  89383. break;
  89384. default:
  89385. throw new errors_1.ValidationError(`Invalid field TransactionType: ${tx.TransactionType}`);
  89386. }
  89387. if (!(0, isEqual_1.default)((0, ripple_binary_codec_1.decode)((0, ripple_binary_codec_1.encode)(tx)), (0, omitBy_1.default)(tx, (value) => value == null))) {
  89388. throw new errors_1.ValidationError(`Invalid Transaction: ${tx.TransactionType}`);
  89389. }
  89390. }
  89391. exports.validate = validate;
  89392. //# sourceMappingURL=transaction.js.map
  89393. /***/ }),
  89394. /***/ 79726:
  89395. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  89396. "use strict";
  89397. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89398. exports.validateTrustSet = exports.TrustSetFlags = void 0;
  89399. const errors_1 = __webpack_require__(25615);
  89400. const common_1 = __webpack_require__(49633);
  89401. var TrustSetFlags;
  89402. (function (TrustSetFlags) {
  89403. TrustSetFlags[TrustSetFlags["tfSetfAuth"] = 65536] = "tfSetfAuth";
  89404. TrustSetFlags[TrustSetFlags["tfSetNoRipple"] = 131072] = "tfSetNoRipple";
  89405. TrustSetFlags[TrustSetFlags["tfClearNoRipple"] = 262144] = "tfClearNoRipple";
  89406. TrustSetFlags[TrustSetFlags["tfSetFreeze"] = 1048576] = "tfSetFreeze";
  89407. TrustSetFlags[TrustSetFlags["tfClearFreeze"] = 2097152] = "tfClearFreeze";
  89408. })(TrustSetFlags = exports.TrustSetFlags || (exports.TrustSetFlags = {}));
  89409. function validateTrustSet(tx) {
  89410. (0, common_1.validateBaseTransaction)(tx);
  89411. const { LimitAmount, QualityIn, QualityOut } = tx;
  89412. if (LimitAmount === undefined) {
  89413. throw new errors_1.ValidationError('TrustSet: missing field LimitAmount');
  89414. }
  89415. if (!(0, common_1.isAmount)(LimitAmount)) {
  89416. throw new errors_1.ValidationError('TrustSet: invalid LimitAmount');
  89417. }
  89418. if (QualityIn !== undefined && typeof QualityIn !== 'number') {
  89419. throw new errors_1.ValidationError('TrustSet: QualityIn must be a number');
  89420. }
  89421. if (QualityOut !== undefined && typeof QualityOut !== 'number') {
  89422. throw new errors_1.ValidationError('TrustSet: QualityOut must be a number');
  89423. }
  89424. }
  89425. exports.validateTrustSet = validateTrustSet;
  89426. //# sourceMappingURL=trustSet.js.map
  89427. /***/ }),
  89428. /***/ 34279:
  89429. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  89430. "use strict";
  89431. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89432. exports.setTransactionFlagsToNumber = exports.parseAccountRootFlags = void 0;
  89433. const errors_1 = __webpack_require__(25615);
  89434. const AccountRoot_1 = __webpack_require__(98245);
  89435. const accountSet_1 = __webpack_require__(45889);
  89436. const offerCreate_1 = __webpack_require__(92749);
  89437. const payment_1 = __webpack_require__(96510);
  89438. const paymentChannelClaim_1 = __webpack_require__(55932);
  89439. const trustSet_1 = __webpack_require__(79726);
  89440. const _1 = __webpack_require__(38484);
  89441. function parseAccountRootFlags(flags) {
  89442. const flagsInterface = {};
  89443. Object.keys(AccountRoot_1.AccountRootFlags).forEach((flag) => {
  89444. if ((0, _1.isFlagEnabled)(flags, AccountRoot_1.AccountRootFlags[flag])) {
  89445. flagsInterface[flag] = true;
  89446. }
  89447. });
  89448. return flagsInterface;
  89449. }
  89450. exports.parseAccountRootFlags = parseAccountRootFlags;
  89451. function setTransactionFlagsToNumber(tx) {
  89452. if (tx.Flags == null) {
  89453. tx.Flags = 0;
  89454. return;
  89455. }
  89456. if (typeof tx.Flags === 'number') {
  89457. return;
  89458. }
  89459. switch (tx.TransactionType) {
  89460. case 'AccountSet':
  89461. tx.Flags = convertAccountSetFlagsToNumber(tx.Flags);
  89462. return;
  89463. case 'OfferCreate':
  89464. tx.Flags = convertOfferCreateFlagsToNumber(tx.Flags);
  89465. return;
  89466. case 'PaymentChannelClaim':
  89467. tx.Flags = convertPaymentChannelClaimFlagsToNumber(tx.Flags);
  89468. return;
  89469. case 'Payment':
  89470. tx.Flags = convertPaymentTransactionFlagsToNumber(tx.Flags);
  89471. return;
  89472. case 'TrustSet':
  89473. tx.Flags = convertTrustSetFlagsToNumber(tx.Flags);
  89474. return;
  89475. default:
  89476. tx.Flags = 0;
  89477. }
  89478. }
  89479. exports.setTransactionFlagsToNumber = setTransactionFlagsToNumber;
  89480. function convertAccountSetFlagsToNumber(flags) {
  89481. return reduceFlags(flags, accountSet_1.AccountSetTfFlags);
  89482. }
  89483. function convertOfferCreateFlagsToNumber(flags) {
  89484. return reduceFlags(flags, offerCreate_1.OfferCreateFlags);
  89485. }
  89486. function convertPaymentChannelClaimFlagsToNumber(flags) {
  89487. return reduceFlags(flags, paymentChannelClaim_1.PaymentChannelClaimFlags);
  89488. }
  89489. function convertPaymentTransactionFlagsToNumber(flags) {
  89490. return reduceFlags(flags, payment_1.PaymentFlags);
  89491. }
  89492. function convertTrustSetFlagsToNumber(flags) {
  89493. return reduceFlags(flags, trustSet_1.TrustSetFlags);
  89494. }
  89495. function reduceFlags(flags, flagEnum) {
  89496. return Object.keys(flags).reduce((resultFlags, flag) => {
  89497. if (flagEnum[flag] == null) {
  89498. throw new errors_1.ValidationError(`flag ${flag} doesn't exist in flagEnum: ${JSON.stringify(flagEnum)}`);
  89499. }
  89500. return flags[flag] ? resultFlags | flagEnum[flag] : resultFlags;
  89501. }, 0);
  89502. }
  89503. //# sourceMappingURL=flags.js.map
  89504. /***/ }),
  89505. /***/ 38484:
  89506. /***/ ((__unused_webpack_module, exports) => {
  89507. "use strict";
  89508. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89509. exports.isHex = exports.isFlagEnabled = exports.onlyHasFields = void 0;
  89510. const HEX_REGEX = /^[0-9A-Fa-f]+$/u;
  89511. function onlyHasFields(obj, fields) {
  89512. return Object.keys(obj).every((key) => fields.includes(key));
  89513. }
  89514. exports.onlyHasFields = onlyHasFields;
  89515. function isFlagEnabled(Flags, checkFlag) {
  89516. return (checkFlag & Flags) === checkFlag;
  89517. }
  89518. exports.isFlagEnabled = isFlagEnabled;
  89519. function isHex(str) {
  89520. return HEX_REGEX.test(str);
  89521. }
  89522. exports.isHex = isHex;
  89523. //# sourceMappingURL=index.js.map
  89524. /***/ }),
  89525. /***/ 94714:
  89526. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  89527. "use strict";
  89528. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  89529. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  89530. return new (P || (P = Promise))(function (resolve, reject) {
  89531. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  89532. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  89533. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  89534. step((generator = generator.apply(thisArg, _arguments || [])).next());
  89535. });
  89536. };
  89537. var __importDefault = (this && this.__importDefault) || function (mod) {
  89538. return (mod && mod.__esModule) ? mod : { "default": mod };
  89539. };
  89540. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89541. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  89542. const ripple_address_codec_1 = __webpack_require__(88914);
  89543. const errors_1 = __webpack_require__(25615);
  89544. const flags_1 = __webpack_require__(34279);
  89545. const utils_1 = __webpack_require__(6607);
  89546. const getFeeXrp_1 = __importDefault(__webpack_require__(42596));
  89547. const LEDGER_OFFSET = 20;
  89548. function autofill(transaction, signersCount) {
  89549. return __awaiter(this, void 0, void 0, function* () {
  89550. const tx = Object.assign({}, transaction);
  89551. setValidAddresses(tx);
  89552. (0, flags_1.setTransactionFlagsToNumber)(tx);
  89553. const promises = [];
  89554. if (tx.Sequence == null) {
  89555. promises.push(setNextValidSequenceNumber(this, tx));
  89556. }
  89557. if (tx.Fee == null) {
  89558. promises.push(calculateFeePerTransactionType(this, tx, signersCount));
  89559. }
  89560. if (tx.LastLedgerSequence == null) {
  89561. promises.push(setLatestValidatedLedgerSequence(this, tx));
  89562. }
  89563. if (tx.TransactionType === 'AccountDelete') {
  89564. promises.push(checkAccountDeleteBlockers(this, tx));
  89565. }
  89566. return Promise.all(promises).then(() => tx);
  89567. });
  89568. }
  89569. function setValidAddresses(tx) {
  89570. validateAccountAddress(tx, 'Account', 'SourceTag');
  89571. if (tx['Destination'] != null) {
  89572. validateAccountAddress(tx, 'Destination', 'DestinationTag');
  89573. }
  89574. convertToClassicAddress(tx, 'Authorize');
  89575. convertToClassicAddress(tx, 'Unauthorize');
  89576. convertToClassicAddress(tx, 'Owner');
  89577. convertToClassicAddress(tx, 'RegularKey');
  89578. }
  89579. function validateAccountAddress(tx, accountField, tagField) {
  89580. const { classicAccount, tag } = getClassicAccountAndTag(tx[accountField]);
  89581. tx[accountField] = classicAccount;
  89582. if (tag != null && tag !== false) {
  89583. if (tx[tagField] && tx[tagField] !== tag) {
  89584. throw new errors_1.ValidationError(`The ${tagField}, if present, must match the tag of the ${accountField} X-address`);
  89585. }
  89586. tx[tagField] = tag;
  89587. }
  89588. }
  89589. function getClassicAccountAndTag(Account, expectedTag) {
  89590. if ((0, ripple_address_codec_1.isValidXAddress)(Account)) {
  89591. const classic = (0, ripple_address_codec_1.xAddressToClassicAddress)(Account);
  89592. if (expectedTag != null && classic.tag !== expectedTag) {
  89593. throw new errors_1.ValidationError('address includes a tag that does not match the tag specified in the transaction');
  89594. }
  89595. return {
  89596. classicAccount: classic.classicAddress,
  89597. tag: classic.tag,
  89598. };
  89599. }
  89600. return {
  89601. classicAccount: Account,
  89602. tag: expectedTag,
  89603. };
  89604. }
  89605. function convertToClassicAddress(tx, fieldName) {
  89606. const account = tx[fieldName];
  89607. if (typeof account === 'string') {
  89608. const { classicAccount } = getClassicAccountAndTag(account);
  89609. tx[fieldName] = classicAccount;
  89610. }
  89611. }
  89612. function setNextValidSequenceNumber(client, tx) {
  89613. return __awaiter(this, void 0, void 0, function* () {
  89614. const request = {
  89615. command: 'account_info',
  89616. account: tx.Account,
  89617. ledger_index: 'current',
  89618. };
  89619. const data = yield client.request(request);
  89620. tx.Sequence = data.result.account_data.Sequence;
  89621. });
  89622. }
  89623. function fetchAccountDeleteFee(client) {
  89624. var _a;
  89625. return __awaiter(this, void 0, void 0, function* () {
  89626. const response = yield client.request({ command: 'server_state' });
  89627. const fee = (_a = response.result.state.validated_ledger) === null || _a === void 0 ? void 0 : _a.reserve_inc;
  89628. if (fee == null) {
  89629. return Promise.reject(new Error('Could not fetch Owner Reserve.'));
  89630. }
  89631. return new bignumber_js_1.default(fee);
  89632. });
  89633. }
  89634. function calculateFeePerTransactionType(client, tx, signersCount = 0) {
  89635. return __awaiter(this, void 0, void 0, function* () {
  89636. const netFeeXRP = yield (0, getFeeXrp_1.default)(client);
  89637. const netFeeDrops = (0, utils_1.xrpToDrops)(netFeeXRP);
  89638. let baseFee = new bignumber_js_1.default(netFeeDrops);
  89639. if (tx.TransactionType === 'EscrowFinish' && tx.Fulfillment != null) {
  89640. const fulfillmentBytesSize = Math.ceil(tx.Fulfillment.length / 2);
  89641. const product = new bignumber_js_1.default(scaleValue(netFeeDrops, 33 + fulfillmentBytesSize / 16));
  89642. baseFee = product.dp(0, bignumber_js_1.default.ROUND_CEIL);
  89643. }
  89644. if (tx.TransactionType === 'AccountDelete') {
  89645. baseFee = yield fetchAccountDeleteFee(client);
  89646. }
  89647. if (signersCount > 0) {
  89648. baseFee = bignumber_js_1.default.sum(baseFee, scaleValue(netFeeDrops, 1 + signersCount));
  89649. }
  89650. const maxFeeDrops = (0, utils_1.xrpToDrops)(client.maxFeeXRP);
  89651. const totalFee = tx.TransactionType === 'AccountDelete'
  89652. ? baseFee
  89653. : bignumber_js_1.default.min(baseFee, maxFeeDrops);
  89654. tx.Fee = totalFee.dp(0, bignumber_js_1.default.ROUND_CEIL).toString(10);
  89655. });
  89656. }
  89657. function scaleValue(value, multiplier) {
  89658. return new bignumber_js_1.default(value).times(multiplier).toString();
  89659. }
  89660. function setLatestValidatedLedgerSequence(client, tx) {
  89661. return __awaiter(this, void 0, void 0, function* () {
  89662. const ledgerSequence = yield client.getLedgerIndex();
  89663. tx.LastLedgerSequence = ledgerSequence + LEDGER_OFFSET;
  89664. });
  89665. }
  89666. function checkAccountDeleteBlockers(client, tx) {
  89667. return __awaiter(this, void 0, void 0, function* () {
  89668. const request = {
  89669. command: 'account_objects',
  89670. account: tx.Account,
  89671. ledger_index: 'validated',
  89672. deletion_blockers_only: true,
  89673. };
  89674. const response = yield client.request(request);
  89675. return new Promise((resolve, reject) => {
  89676. if (response.result.account_objects.length > 0) {
  89677. reject(new errors_1.XrplError(`Account ${tx.Account} cannot be deleted; there are Escrows, PayChannels, RippleStates, or Checks associated with the account.`, response.result.account_objects));
  89678. }
  89679. resolve();
  89680. });
  89681. });
  89682. }
  89683. exports["default"] = autofill;
  89684. //# sourceMappingURL=autofill.js.map
  89685. /***/ }),
  89686. /***/ 96647:
  89687. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  89688. "use strict";
  89689. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  89690. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  89691. return new (P || (P = Promise))(function (resolve, reject) {
  89692. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  89693. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  89694. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  89695. step((generator = generator.apply(thisArg, _arguments || [])).next());
  89696. });
  89697. };
  89698. var __importDefault = (this && this.__importDefault) || function (mod) {
  89699. return (mod && mod.__esModule) ? mod : { "default": mod };
  89700. };
  89701. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89702. exports.getBalances = exports.getXrpBalance = void 0;
  89703. const flatMap_1 = __importDefault(__webpack_require__(94654));
  89704. const utils_1 = __webpack_require__(6607);
  89705. function formatBalances(trustlines) {
  89706. return trustlines.map((trustline) => ({
  89707. value: trustline.balance,
  89708. currency: trustline.currency,
  89709. issuer: trustline.account,
  89710. }));
  89711. }
  89712. function getXrpBalance(address, options = {}) {
  89713. var _a;
  89714. return __awaiter(this, void 0, void 0, function* () {
  89715. const xrpRequest = {
  89716. command: 'account_info',
  89717. account: address,
  89718. ledger_index: (_a = options.ledger_index) !== null && _a !== void 0 ? _a : 'validated',
  89719. ledger_hash: options.ledger_hash,
  89720. };
  89721. const response = yield this.request(xrpRequest);
  89722. return (0, utils_1.dropsToXrp)(response.result.account_data.Balance);
  89723. });
  89724. }
  89725. exports.getXrpBalance = getXrpBalance;
  89726. function getBalances(address, options = {}) {
  89727. var _a;
  89728. return __awaiter(this, void 0, void 0, function* () {
  89729. const balances = [];
  89730. let xrpPromise = Promise.resolve('');
  89731. if (!options.peer) {
  89732. xrpPromise = this.getXrpBalance(address, {
  89733. ledger_hash: options.ledger_hash,
  89734. ledger_index: options.ledger_index,
  89735. });
  89736. }
  89737. const linesRequest = {
  89738. command: 'account_lines',
  89739. account: address,
  89740. ledger_index: (_a = options.ledger_index) !== null && _a !== void 0 ? _a : 'validated',
  89741. ledger_hash: options.ledger_hash,
  89742. peer: options.peer,
  89743. limit: options.limit,
  89744. };
  89745. const linesPromise = this.requestAll(linesRequest);
  89746. yield Promise.all([xrpPromise, linesPromise]).then(([xrpBalance, linesResponses]) => {
  89747. const accountLinesBalance = (0, flatMap_1.default)(linesResponses, (response) => formatBalances(response.result.lines));
  89748. if (xrpBalance !== '') {
  89749. balances.push({ currency: 'XRP', value: xrpBalance });
  89750. }
  89751. balances.push(...accountLinesBalance);
  89752. });
  89753. return balances.slice(0, options.limit);
  89754. });
  89755. }
  89756. exports.getBalances = getBalances;
  89757. //# sourceMappingURL=balances.js.map
  89758. /***/ }),
  89759. /***/ 42596:
  89760. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  89761. "use strict";
  89762. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  89763. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  89764. return new (P || (P = Promise))(function (resolve, reject) {
  89765. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  89766. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  89767. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  89768. step((generator = generator.apply(thisArg, _arguments || [])).next());
  89769. });
  89770. };
  89771. var __importDefault = (this && this.__importDefault) || function (mod) {
  89772. return (mod && mod.__esModule) ? mod : { "default": mod };
  89773. };
  89774. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89775. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  89776. const errors_1 = __webpack_require__(25615);
  89777. const NUM_DECIMAL_PLACES = 6;
  89778. const BASE_10 = 10;
  89779. function getFeeXrp(client, cushion) {
  89780. var _a;
  89781. return __awaiter(this, void 0, void 0, function* () {
  89782. const feeCushion = cushion !== null && cushion !== void 0 ? cushion : client.feeCushion;
  89783. const serverInfo = (yield client.request({ command: 'server_info' })).result
  89784. .info;
  89785. const baseFee = (_a = serverInfo.validated_ledger) === null || _a === void 0 ? void 0 : _a.base_fee_xrp;
  89786. if (baseFee == null) {
  89787. throw new errors_1.XrplError('getFeeXrp: Could not get base_fee_xrp from server_info');
  89788. }
  89789. const baseFeeXrp = new bignumber_js_1.default(baseFee);
  89790. if (serverInfo.load_factor == null) {
  89791. serverInfo.load_factor = 1;
  89792. }
  89793. let fee = baseFeeXrp.times(serverInfo.load_factor).times(feeCushion);
  89794. fee = bignumber_js_1.default.min(fee, client.maxFeeXRP);
  89795. return new bignumber_js_1.default(fee.toFixed(NUM_DECIMAL_PLACES)).toString(BASE_10);
  89796. });
  89797. }
  89798. exports["default"] = getFeeXrp;
  89799. //# sourceMappingURL=getFeeXrp.js.map
  89800. /***/ }),
  89801. /***/ 87723:
  89802. /***/ (function(__unused_webpack_module, exports) {
  89803. "use strict";
  89804. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  89805. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  89806. return new (P || (P = Promise))(function (resolve, reject) {
  89807. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  89808. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  89809. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  89810. step((generator = generator.apply(thisArg, _arguments || [])).next());
  89811. });
  89812. };
  89813. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89814. function getLedgerIndex() {
  89815. return __awaiter(this, void 0, void 0, function* () {
  89816. const ledgerResponse = yield this.request({
  89817. command: 'ledger',
  89818. ledger_index: 'validated',
  89819. });
  89820. return ledgerResponse.result.ledger_index;
  89821. });
  89822. }
  89823. exports["default"] = getLedgerIndex;
  89824. //# sourceMappingURL=getLedgerIndex.js.map
  89825. /***/ }),
  89826. /***/ 43066:
  89827. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  89828. "use strict";
  89829. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  89830. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  89831. return new (P || (P = Promise))(function (resolve, reject) {
  89832. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  89833. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  89834. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  89835. step((generator = generator.apply(thisArg, _arguments || [])).next());
  89836. });
  89837. };
  89838. var __importDefault = (this && this.__importDefault) || function (mod) {
  89839. return (mod && mod.__esModule) ? mod : { "default": mod };
  89840. };
  89841. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89842. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  89843. const flatMap_1 = __importDefault(__webpack_require__(94654));
  89844. const errors_1 = __webpack_require__(25615);
  89845. const Offer_1 = __webpack_require__(59910);
  89846. const DEFAULT_LIMIT = 20;
  89847. function sortOffers(offers) {
  89848. return offers.sort((offerA, offerB) => {
  89849. var _a, _b;
  89850. const qualityA = (_a = offerA.quality) !== null && _a !== void 0 ? _a : 0;
  89851. const qualityB = (_b = offerB.quality) !== null && _b !== void 0 ? _b : 0;
  89852. return new bignumber_js_1.default(qualityA).comparedTo(qualityB);
  89853. });
  89854. }
  89855. const getOrderbookOptionsSet = new Set([
  89856. 'limit',
  89857. 'ledger_index',
  89858. 'ledger_hash',
  89859. 'taker',
  89860. ]);
  89861. function getOrderbook(takerPays, takerGets, options = {}) {
  89862. var _a, _b;
  89863. return __awaiter(this, void 0, void 0, function* () {
  89864. Object.keys(options).forEach((key) => {
  89865. if (!getOrderbookOptionsSet.has(key)) {
  89866. throw new errors_1.ValidationError(`Unexpected option: ${key}`, options);
  89867. }
  89868. });
  89869. if (options.limit && typeof options.limit !== 'number') {
  89870. throw new errors_1.ValidationError('limit must be a number', options.limit);
  89871. }
  89872. if (options.ledger_index &&
  89873. !(typeof options.ledger_index === 'number' ||
  89874. (typeof options.ledger_index === 'string' &&
  89875. ['validated', 'closed', 'current'].includes(options.ledger_index)))) {
  89876. throw new errors_1.ValidationError('ledger_index must be a number or a string of "validated", "closed", or "current"', options.ledger_index);
  89877. }
  89878. if (options.ledger_hash !== undefined &&
  89879. options.ledger_hash !== null &&
  89880. typeof options.ledger_hash !== 'string') {
  89881. throw new errors_1.ValidationError('ledger_hash must be a string', options.ledger_hash);
  89882. }
  89883. if (options.taker !== undefined && typeof options.taker !== 'string') {
  89884. throw new errors_1.ValidationError('taker must be a string', options.taker);
  89885. }
  89886. const request = {
  89887. command: 'book_offers',
  89888. taker_pays: takerPays,
  89889. taker_gets: takerGets,
  89890. ledger_index: (_a = options.ledger_index) !== null && _a !== void 0 ? _a : 'validated',
  89891. ledger_hash: options.ledger_hash === null ? undefined : options.ledger_hash,
  89892. limit: (_b = options.limit) !== null && _b !== void 0 ? _b : DEFAULT_LIMIT,
  89893. taker: options.taker ? options.taker : undefined,
  89894. };
  89895. const directOfferResults = yield this.requestAll(request);
  89896. request.taker_gets = takerPays;
  89897. request.taker_pays = takerGets;
  89898. const reverseOfferResults = yield this.requestAll(request);
  89899. const directOffers = (0, flatMap_1.default)(directOfferResults, (directOfferResult) => directOfferResult.result.offers);
  89900. const reverseOffers = (0, flatMap_1.default)(reverseOfferResults, (reverseOfferResult) => reverseOfferResult.result.offers);
  89901. const orders = [...directOffers, ...reverseOffers];
  89902. const buy = [];
  89903. const sell = [];
  89904. orders.forEach((order) => {
  89905. if ((order.Flags & Offer_1.OfferFlags.lsfSell) === 0) {
  89906. buy.push(order);
  89907. }
  89908. else {
  89909. sell.push(order);
  89910. }
  89911. });
  89912. return {
  89913. buy: sortOffers(buy).slice(0, options.limit),
  89914. sell: sortOffers(sell).slice(0, options.limit),
  89915. };
  89916. });
  89917. }
  89918. exports["default"] = getOrderbook;
  89919. //# sourceMappingURL=getOrderbook.js.map
  89920. /***/ }),
  89921. /***/ 61021:
  89922. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  89923. "use strict";
  89924. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  89925. if (k2 === undefined) k2 = k;
  89926. var desc = Object.getOwnPropertyDescriptor(m, k);
  89927. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  89928. desc = { enumerable: true, get: function() { return m[k]; } };
  89929. }
  89930. Object.defineProperty(o, k2, desc);
  89931. }) : (function(o, m, k, k2) {
  89932. if (k2 === undefined) k2 = k;
  89933. o[k2] = m[k];
  89934. }));
  89935. var __exportStar = (this && this.__exportStar) || function(m, exports) {
  89936. for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
  89937. };
  89938. var __importDefault = (this && this.__importDefault) || function (mod) {
  89939. return (mod && mod.__esModule) ? mod : { "default": mod };
  89940. };
  89941. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89942. exports.getOrderbook = exports.getLedgerIndex = exports.getXrpBalance = exports.getBalances = exports.autofill = void 0;
  89943. var autofill_1 = __webpack_require__(94714);
  89944. Object.defineProperty(exports, "autofill", ({ enumerable: true, get: function () { return __importDefault(autofill_1).default; } }));
  89945. var balances_1 = __webpack_require__(96647);
  89946. Object.defineProperty(exports, "getBalances", ({ enumerable: true, get: function () { return balances_1.getBalances; } }));
  89947. Object.defineProperty(exports, "getXrpBalance", ({ enumerable: true, get: function () { return balances_1.getXrpBalance; } }));
  89948. var getLedgerIndex_1 = __webpack_require__(87723);
  89949. Object.defineProperty(exports, "getLedgerIndex", ({ enumerable: true, get: function () { return __importDefault(getLedgerIndex_1).default; } }));
  89950. var getOrderbook_1 = __webpack_require__(43066);
  89951. Object.defineProperty(exports, "getOrderbook", ({ enumerable: true, get: function () { return __importDefault(getOrderbook_1).default; } }));
  89952. __exportStar(__webpack_require__(97509), exports);
  89953. __exportStar(__webpack_require__(93170), exports);
  89954. //# sourceMappingURL=index.js.map
  89955. /***/ }),
  89956. /***/ 97509:
  89957. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  89958. "use strict";
  89959. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  89960. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  89961. return new (P || (P = Promise))(function (resolve, reject) {
  89962. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  89963. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  89964. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  89965. step((generator = generator.apply(thisArg, _arguments || [])).next());
  89966. });
  89967. };
  89968. Object.defineProperty(exports, "__esModule", ({ value: true }));
  89969. exports.submitAndWait = exports.submit = void 0;
  89970. const ripple_binary_codec_1 = __webpack_require__(42353);
  89971. const errors_1 = __webpack_require__(25615);
  89972. const utils_1 = __webpack_require__(6607);
  89973. const LEDGER_CLOSE_TIME = 1000;
  89974. function sleep(ms) {
  89975. return __awaiter(this, void 0, void 0, function* () {
  89976. return new Promise((resolve) => {
  89977. setTimeout(resolve, ms);
  89978. });
  89979. });
  89980. }
  89981. function submit(transaction, opts) {
  89982. return __awaiter(this, void 0, void 0, function* () {
  89983. const signedTx = yield getSignedTx(this, transaction, opts);
  89984. return submitRequest(this, signedTx, opts === null || opts === void 0 ? void 0 : opts.failHard);
  89985. });
  89986. }
  89987. exports.submit = submit;
  89988. function submitAndWait(transaction, opts) {
  89989. return __awaiter(this, void 0, void 0, function* () {
  89990. const signedTx = yield getSignedTx(this, transaction, opts);
  89991. const lastLedger = getLastLedgerSequence(signedTx);
  89992. if (lastLedger == null) {
  89993. throw new errors_1.ValidationError('Transaction must contain a LastLedgerSequence value for reliable submission.');
  89994. }
  89995. const response = yield submitRequest(this, signedTx, opts === null || opts === void 0 ? void 0 : opts.failHard);
  89996. const txHash = utils_1.hashes.hashSignedTx(signedTx);
  89997. return waitForFinalTransactionOutcome(this, txHash, lastLedger, response.result.engine_result);
  89998. });
  89999. }
  90000. exports.submitAndWait = submitAndWait;
  90001. function submitRequest(client, signedTransaction, failHard = false) {
  90002. return __awaiter(this, void 0, void 0, function* () {
  90003. if (!isSigned(signedTransaction)) {
  90004. throw new errors_1.ValidationError('Transaction must be signed');
  90005. }
  90006. const signedTxEncoded = typeof signedTransaction === 'string'
  90007. ? signedTransaction
  90008. : (0, ripple_binary_codec_1.encode)(signedTransaction);
  90009. const request = {
  90010. command: 'submit',
  90011. tx_blob: signedTxEncoded,
  90012. fail_hard: isAccountDelete(signedTransaction) || failHard,
  90013. };
  90014. return client.request(request);
  90015. });
  90016. }
  90017. function waitForFinalTransactionOutcome(client, txHash, lastLedger, submissionResult) {
  90018. return __awaiter(this, void 0, void 0, function* () {
  90019. yield sleep(LEDGER_CLOSE_TIME);
  90020. const latestLedger = yield client.getLedgerIndex();
  90021. if (lastLedger < latestLedger) {
  90022. throw new errors_1.XrplError(`The latest ledger sequence ${latestLedger} is greater than the transaction's LastLedgerSequence (${lastLedger}).\n` +
  90023. `Preliminary result: ${submissionResult}`);
  90024. }
  90025. const txResponse = yield client
  90026. .request({
  90027. command: 'tx',
  90028. transaction: txHash,
  90029. })
  90030. .catch((error) => __awaiter(this, void 0, void 0, function* () {
  90031. var _a;
  90032. const message = (_a = error === null || error === void 0 ? void 0 : error.data) === null || _a === void 0 ? void 0 : _a.error;
  90033. if (message === 'txnNotFound') {
  90034. return waitForFinalTransactionOutcome(client, txHash, lastLedger, submissionResult);
  90035. }
  90036. throw new Error(`${message} \n Preliminary result: ${submissionResult}.\nFull error details: ${String(error)}`);
  90037. }));
  90038. if (txResponse.result.validated) {
  90039. return txResponse;
  90040. }
  90041. return waitForFinalTransactionOutcome(client, txHash, lastLedger, submissionResult);
  90042. });
  90043. }
  90044. function isSigned(transaction) {
  90045. const tx = typeof transaction === 'string' ? (0, ripple_binary_codec_1.decode)(transaction) : transaction;
  90046. return (typeof tx !== 'string' &&
  90047. (tx.SigningPubKey != null || tx.TxnSignature != null));
  90048. }
  90049. function getSignedTx(client, transaction, { autofill = true, wallet, } = {}) {
  90050. return __awaiter(this, void 0, void 0, function* () {
  90051. if (isSigned(transaction)) {
  90052. return transaction;
  90053. }
  90054. if (!wallet) {
  90055. throw new errors_1.ValidationError('Wallet must be provided when submitting an unsigned transaction');
  90056. }
  90057. let tx = typeof transaction === 'string'
  90058. ?
  90059. (0, ripple_binary_codec_1.decode)(transaction)
  90060. : transaction;
  90061. if (autofill) {
  90062. tx = yield client.autofill(tx);
  90063. }
  90064. return wallet.sign(tx).tx_blob;
  90065. });
  90066. }
  90067. function getLastLedgerSequence(transaction) {
  90068. const tx = typeof transaction === 'string' ? (0, ripple_binary_codec_1.decode)(transaction) : transaction;
  90069. return tx.LastLedgerSequence;
  90070. }
  90071. function isAccountDelete(transaction) {
  90072. const tx = typeof transaction === 'string' ? (0, ripple_binary_codec_1.decode)(transaction) : transaction;
  90073. return tx.TransactionType === 'AccountDelete';
  90074. }
  90075. //# sourceMappingURL=submit.js.map
  90076. /***/ }),
  90077. /***/ 93170:
  90078. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  90079. "use strict";
  90080. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90081. exports.ensureClassicAddress = void 0;
  90082. const ripple_address_codec_1 = __webpack_require__(88914);
  90083. function ensureClassicAddress(account) {
  90084. if ((0, ripple_address_codec_1.isValidXAddress)(account)) {
  90085. const { classicAddress, tag } = (0, ripple_address_codec_1.xAddressToClassicAddress)(account);
  90086. if (tag !== false) {
  90087. throw new Error('This command does not support the use of a tag. Use an address without a tag.');
  90088. }
  90089. return classicAddress;
  90090. }
  90091. return account;
  90092. }
  90093. exports.ensureClassicAddress = ensureClassicAddress;
  90094. //# sourceMappingURL=utils.js.map
  90095. /***/ }),
  90096. /***/ 66316:
  90097. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  90098. "use strict";
  90099. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90100. const errors_1 = __webpack_require__(25615);
  90101. const stringConversion_1 = __webpack_require__(73333);
  90102. function createCrossChainPayment(payment, destAccount) {
  90103. var _a;
  90104. const destAccountHex = (0, stringConversion_1.convertStringToHex)(destAccount);
  90105. const destAccountMemo = { Memo: { MemoData: destAccountHex } };
  90106. const memos = (_a = payment.Memos) !== null && _a !== void 0 ? _a : [];
  90107. if (memos.length > 2) {
  90108. throw new errors_1.XrplError('Cannot have more than 2 memos in a cross-chain transaction.');
  90109. }
  90110. const newMemos = [destAccountMemo, ...memos];
  90111. const newPayment = Object.assign(Object.assign({}, payment), { Memos: newMemos });
  90112. delete newPayment.TxnSignature;
  90113. return newPayment;
  90114. }
  90115. exports["default"] = createCrossChainPayment;
  90116. //# sourceMappingURL=createCrossChainPayment.js.map
  90117. /***/ }),
  90118. /***/ 9094:
  90119. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  90120. "use strict";
  90121. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90122. exports.deriveXAddress = exports.deriveAddress = exports.deriveKeypair = void 0;
  90123. const ripple_address_codec_1 = __webpack_require__(88914);
  90124. const ripple_keypairs_1 = __webpack_require__(29140);
  90125. Object.defineProperty(exports, "deriveKeypair", ({ enumerable: true, get: function () { return ripple_keypairs_1.deriveKeypair; } }));
  90126. Object.defineProperty(exports, "deriveAddress", ({ enumerable: true, get: function () { return ripple_keypairs_1.deriveAddress; } }));
  90127. function deriveXAddress(options) {
  90128. const classicAddress = (0, ripple_keypairs_1.deriveAddress)(options.publicKey);
  90129. return (0, ripple_address_codec_1.classicAddressToXAddress)(classicAddress, options.tag, options.test);
  90130. }
  90131. exports.deriveXAddress = deriveXAddress;
  90132. //# sourceMappingURL=derive.js.map
  90133. /***/ }),
  90134. /***/ 90013:
  90135. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90136. "use strict";
  90137. var __importDefault = (this && this.__importDefault) || function (mod) {
  90138. return (mod && mod.__esModule) ? mod : { "default": mod };
  90139. };
  90140. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90141. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  90142. const flatten_1 = __importDefault(__webpack_require__(85564));
  90143. const groupBy_1 = __importDefault(__webpack_require__(7739));
  90144. const xrpConversion_1 = __webpack_require__(75122);
  90145. function normalizeNode(affectedNode) {
  90146. const diffType = Object.keys(affectedNode)[0];
  90147. const node = affectedNode[diffType];
  90148. return Object.assign(Object.assign({}, node), { NodeType: diffType, LedgerEntryType: node.LedgerEntryType, LedgerIndex: node.LedgerIndex, NewFields: node.NewFields, FinalFields: node.FinalFields, PreviousFields: node.PreviousFields });
  90149. }
  90150. function normalizeNodes(metadata) {
  90151. if (metadata.AffectedNodes.length === 0) {
  90152. return [];
  90153. }
  90154. return metadata.AffectedNodes.map(normalizeNode);
  90155. }
  90156. function groupByAccount(balanceChanges) {
  90157. const grouped = (0, groupBy_1.default)(balanceChanges, (node) => node.account);
  90158. return Object.entries(grouped).map(([account, items]) => {
  90159. return { account, balances: items.map((item) => item.balance) };
  90160. });
  90161. }
  90162. function getValue(balance) {
  90163. if (typeof balance === 'string') {
  90164. return new bignumber_js_1.default(balance);
  90165. }
  90166. return new bignumber_js_1.default(balance.value);
  90167. }
  90168. function computeBalanceChange(node) {
  90169. var _a, _b, _c;
  90170. let value = null;
  90171. if ((_a = node.NewFields) === null || _a === void 0 ? void 0 : _a.Balance) {
  90172. value = getValue(node.NewFields.Balance);
  90173. }
  90174. else if (((_b = node.PreviousFields) === null || _b === void 0 ? void 0 : _b.Balance) && ((_c = node.FinalFields) === null || _c === void 0 ? void 0 : _c.Balance)) {
  90175. value = getValue(node.FinalFields.Balance).minus(getValue(node.PreviousFields.Balance));
  90176. }
  90177. if (value === null || value.isZero()) {
  90178. return null;
  90179. }
  90180. return value;
  90181. }
  90182. function getXRPQuantity(node) {
  90183. var _a, _b, _c;
  90184. const value = computeBalanceChange(node);
  90185. if (value === null) {
  90186. return null;
  90187. }
  90188. return {
  90189. account: ((_b = (_a = node.FinalFields) === null || _a === void 0 ? void 0 : _a.Account) !== null && _b !== void 0 ? _b : (_c = node.NewFields) === null || _c === void 0 ? void 0 : _c.Account),
  90190. balance: {
  90191. currency: 'XRP',
  90192. value: (0, xrpConversion_1.dropsToXrp)(value).toString(),
  90193. },
  90194. };
  90195. }
  90196. function flipTrustlinePerspective(balanceChange) {
  90197. const negatedBalance = new bignumber_js_1.default(balanceChange.balance.value).negated();
  90198. return {
  90199. account: balanceChange.balance.issuer,
  90200. balance: {
  90201. issuer: balanceChange.account,
  90202. currency: balanceChange.balance.currency,
  90203. value: negatedBalance.toString(),
  90204. },
  90205. };
  90206. }
  90207. function getTrustlineQuantity(node) {
  90208. var _a, _b;
  90209. const value = computeBalanceChange(node);
  90210. if (value === null) {
  90211. return null;
  90212. }
  90213. const fields = node.NewFields == null ? node.FinalFields : node.NewFields;
  90214. const result = {
  90215. account: (_a = fields === null || fields === void 0 ? void 0 : fields.LowLimit) === null || _a === void 0 ? void 0 : _a.issuer,
  90216. balance: {
  90217. issuer: (_b = fields === null || fields === void 0 ? void 0 : fields.HighLimit) === null || _b === void 0 ? void 0 : _b.issuer,
  90218. currency: (fields === null || fields === void 0 ? void 0 : fields.Balance).currency,
  90219. value: value.toString(),
  90220. },
  90221. };
  90222. return [result, flipTrustlinePerspective(result)];
  90223. }
  90224. function getBalanceChanges(metadata) {
  90225. const quantities = normalizeNodes(metadata).map((node) => {
  90226. if (node.LedgerEntryType === 'AccountRoot') {
  90227. const xrpQuantity = getXRPQuantity(node);
  90228. if (xrpQuantity == null) {
  90229. return [];
  90230. }
  90231. return [xrpQuantity];
  90232. }
  90233. if (node.LedgerEntryType === 'RippleState') {
  90234. const trustlineQuantity = getTrustlineQuantity(node);
  90235. if (trustlineQuantity == null) {
  90236. return [];
  90237. }
  90238. return trustlineQuantity;
  90239. }
  90240. return [];
  90241. });
  90242. return groupByAccount((0, flatten_1.default)(quantities));
  90243. }
  90244. exports["default"] = getBalanceChanges;
  90245. //# sourceMappingURL=getBalanceChanges.js.map
  90246. /***/ }),
  90247. /***/ 85612:
  90248. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90249. "use strict";
  90250. var __importDefault = (this && this.__importDefault) || function (mod) {
  90251. return (mod && mod.__esModule) ? mod : { "default": mod };
  90252. };
  90253. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90254. const flatMap_1 = __importDefault(__webpack_require__(94654));
  90255. const metadata_1 = __webpack_require__(76262);
  90256. function getNFTokenID(meta) {
  90257. if (meta.AffectedNodes === undefined) {
  90258. throw new TypeError(`Unable to parse the parameter given to getNFTokenID.
  90259. 'meta' must be the metadata from an NFTokenMint transaction. Received ${JSON.stringify(meta)} instead.`);
  90260. }
  90261. const affectedNodes = meta.AffectedNodes.filter((node) => {
  90262. var _a;
  90263. if ((0, metadata_1.isCreatedNode)(node)) {
  90264. return node.CreatedNode.LedgerEntryType === 'NFTokenPage';
  90265. }
  90266. if ((0, metadata_1.isModifiedNode)(node)) {
  90267. return (node.ModifiedNode.LedgerEntryType === 'NFTokenPage' &&
  90268. Boolean((_a = node.ModifiedNode.PreviousFields) === null || _a === void 0 ? void 0 : _a.NFTokens));
  90269. }
  90270. return false;
  90271. });
  90272. const previousTokenIDSet = new Set((0, flatMap_1.default)(affectedNodes, (node) => {
  90273. var _a;
  90274. const nftokens = (0, metadata_1.isModifiedNode)(node)
  90275. ? (_a = node.ModifiedNode.PreviousFields) === null || _a === void 0 ? void 0 : _a.NFTokens
  90276. : [];
  90277. return nftokens.map((token) => token.NFToken.NFTokenID);
  90278. }).filter((id) => Boolean(id)));
  90279. const finalTokenIDs = (0, flatMap_1.default)(affectedNodes, (node) => {
  90280. var _a, _b, _c, _d, _e, _f;
  90281. return ((_f = ((_c = (_b = (_a = node.ModifiedNode) === null || _a === void 0 ? void 0 : _a.FinalFields) === null || _b === void 0 ? void 0 : _b.NFTokens) !== null && _c !== void 0 ? _c : (_e = (_d = node.CreatedNode) === null || _d === void 0 ? void 0 : _d.NewFields) === null || _e === void 0 ? void 0 : _e.NFTokens)) !== null && _f !== void 0 ? _f : []).map((token) => token.NFToken.NFTokenID);
  90282. }).filter((nftokenID) => Boolean(nftokenID));
  90283. const nftokenID = finalTokenIDs.find((id) => !previousTokenIDSet.has(id));
  90284. return nftokenID;
  90285. }
  90286. exports["default"] = getNFTokenID;
  90287. //# sourceMappingURL=getNFTokenID.js.map
  90288. /***/ }),
  90289. /***/ 42861:
  90290. /***/ ((__unused_webpack_module, exports) => {
  90291. "use strict";
  90292. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90293. var HashPrefix;
  90294. (function (HashPrefix) {
  90295. HashPrefix[HashPrefix["TRANSACTION_ID"] = 1415073280] = "TRANSACTION_ID";
  90296. HashPrefix[HashPrefix["TRANSACTION_NODE"] = 1397638144] = "TRANSACTION_NODE";
  90297. HashPrefix[HashPrefix["INNER_NODE"] = 1296649728] = "INNER_NODE";
  90298. HashPrefix[HashPrefix["LEAF_NODE"] = 1296846336] = "LEAF_NODE";
  90299. HashPrefix[HashPrefix["TRANSACTION_SIGN"] = 1398036480] = "TRANSACTION_SIGN";
  90300. HashPrefix[HashPrefix["TRANSACTION_SIGN_TESTNET"] = 1937012736] = "TRANSACTION_SIGN_TESTNET";
  90301. HashPrefix[HashPrefix["TRANSACTION_MULTISIGN"] = 1397576704] = "TRANSACTION_MULTISIGN";
  90302. HashPrefix[HashPrefix["LEDGER"] = 1280791040] = "LEDGER";
  90303. })(HashPrefix || (HashPrefix = {}));
  90304. exports["default"] = HashPrefix;
  90305. //# sourceMappingURL=HashPrefix.js.map
  90306. /***/ }),
  90307. /***/ 90963:
  90308. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90309. "use strict";
  90310. var __importDefault = (this && this.__importDefault) || function (mod) {
  90311. return (mod && mod.__esModule) ? mod : { "default": mod };
  90312. };
  90313. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90314. const errors_1 = __webpack_require__(25615);
  90315. const HashPrefix_1 = __importDefault(__webpack_require__(42861));
  90316. const sha512Half_1 = __importDefault(__webpack_require__(40026));
  90317. const LeafNode_1 = __importDefault(__webpack_require__(34952));
  90318. const node_1 = __webpack_require__(76639);
  90319. const HEX_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
  90320. const SLOT_MAX = 15;
  90321. const HEX = 16;
  90322. class InnerNode extends node_1.Node {
  90323. constructor(depth = 0) {
  90324. super();
  90325. this.leaves = {};
  90326. this.type = node_1.NodeType.INNER;
  90327. this.depth = depth;
  90328. this.empty = true;
  90329. }
  90330. get hash() {
  90331. if (this.empty) {
  90332. return HEX_ZERO;
  90333. }
  90334. let hex = '';
  90335. for (let iter = 0; iter <= SLOT_MAX; iter++) {
  90336. const child = this.leaves[iter];
  90337. const hash = child == null ? HEX_ZERO : child.hash;
  90338. hex += hash;
  90339. }
  90340. const prefix = HashPrefix_1.default.INNER_NODE.toString(HEX);
  90341. return (0, sha512Half_1.default)(prefix + hex);
  90342. }
  90343. addItem(tag, node) {
  90344. const existingNode = this.getNode(parseInt(tag[this.depth], HEX));
  90345. if (existingNode === undefined) {
  90346. this.setNode(parseInt(tag[this.depth], HEX), node);
  90347. return;
  90348. }
  90349. if (existingNode instanceof InnerNode) {
  90350. existingNode.addItem(tag, node);
  90351. }
  90352. else if (existingNode instanceof LeafNode_1.default) {
  90353. if (existingNode.tag === tag) {
  90354. throw new errors_1.XrplError('Tried to add a node to a SHAMap that was already in there.');
  90355. }
  90356. else {
  90357. const newInnerNode = new InnerNode(this.depth + 1);
  90358. newInnerNode.addItem(existingNode.tag, existingNode);
  90359. newInnerNode.addItem(tag, node);
  90360. this.setNode(parseInt(tag[this.depth], HEX), newInnerNode);
  90361. }
  90362. }
  90363. }
  90364. setNode(slot, node) {
  90365. if (slot < 0 || slot > SLOT_MAX) {
  90366. throw new errors_1.XrplError('Invalid slot: slot must be between 0-15.');
  90367. }
  90368. this.leaves[slot] = node;
  90369. this.empty = false;
  90370. }
  90371. getNode(slot) {
  90372. if (slot < 0 || slot > SLOT_MAX) {
  90373. throw new errors_1.XrplError('Invalid slot: slot must be between 0-15.');
  90374. }
  90375. return this.leaves[slot];
  90376. }
  90377. }
  90378. exports["default"] = InnerNode;
  90379. //# sourceMappingURL=InnerNode.js.map
  90380. /***/ }),
  90381. /***/ 34952:
  90382. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90383. "use strict";
  90384. var __importDefault = (this && this.__importDefault) || function (mod) {
  90385. return (mod && mod.__esModule) ? mod : { "default": mod };
  90386. };
  90387. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90388. const errors_1 = __webpack_require__(25615);
  90389. const HashPrefix_1 = __importDefault(__webpack_require__(42861));
  90390. const sha512Half_1 = __importDefault(__webpack_require__(40026));
  90391. const node_1 = __webpack_require__(76639);
  90392. const HEX = 16;
  90393. class LeafNode extends node_1.Node {
  90394. constructor(tag, data, type) {
  90395. super();
  90396. this.tag = tag;
  90397. this.type = type;
  90398. this.data = data;
  90399. }
  90400. get hash() {
  90401. switch (this.type) {
  90402. case node_1.NodeType.ACCOUNT_STATE: {
  90403. const leafPrefix = HashPrefix_1.default.LEAF_NODE.toString(HEX);
  90404. return (0, sha512Half_1.default)(leafPrefix + this.data + this.tag);
  90405. }
  90406. case node_1.NodeType.TRANSACTION_NO_METADATA: {
  90407. const txIDPrefix = HashPrefix_1.default.TRANSACTION_ID.toString(HEX);
  90408. return (0, sha512Half_1.default)(txIDPrefix + this.data);
  90409. }
  90410. case node_1.NodeType.TRANSACTION_METADATA: {
  90411. const txNodePrefix = HashPrefix_1.default.TRANSACTION_NODE.toString(HEX);
  90412. return (0, sha512Half_1.default)(txNodePrefix + this.data + this.tag);
  90413. }
  90414. default:
  90415. throw new errors_1.XrplError('Tried to hash a SHAMap node of unknown type.');
  90416. }
  90417. }
  90418. addItem(tag, node) {
  90419. throw new errors_1.XrplError('Cannot call addItem on a LeafNode');
  90420. this.addItem(tag, node);
  90421. }
  90422. }
  90423. exports["default"] = LeafNode;
  90424. //# sourceMappingURL=LeafNode.js.map
  90425. /***/ }),
  90426. /***/ 91040:
  90427. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90428. "use strict";
  90429. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  90430. if (k2 === undefined) k2 = k;
  90431. var desc = Object.getOwnPropertyDescriptor(m, k);
  90432. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  90433. desc = { enumerable: true, get: function() { return m[k]; } };
  90434. }
  90435. Object.defineProperty(o, k2, desc);
  90436. }) : (function(o, m, k, k2) {
  90437. if (k2 === undefined) k2 = k;
  90438. o[k2] = m[k];
  90439. }));
  90440. var __exportStar = (this && this.__exportStar) || function(m, exports) {
  90441. for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
  90442. };
  90443. var __importDefault = (this && this.__importDefault) || function (mod) {
  90444. return (mod && mod.__esModule) ? mod : { "default": mod };
  90445. };
  90446. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90447. const InnerNode_1 = __importDefault(__webpack_require__(90963));
  90448. const LeafNode_1 = __importDefault(__webpack_require__(34952));
  90449. class SHAMap {
  90450. constructor() {
  90451. this.root = new InnerNode_1.default(0);
  90452. }
  90453. get hash() {
  90454. return this.root.hash;
  90455. }
  90456. addItem(tag, data, type) {
  90457. this.root.addItem(tag, new LeafNode_1.default(tag, data, type));
  90458. }
  90459. }
  90460. __exportStar(__webpack_require__(76639), exports);
  90461. exports["default"] = SHAMap;
  90462. //# sourceMappingURL=index.js.map
  90463. /***/ }),
  90464. /***/ 76639:
  90465. /***/ ((__unused_webpack_module, exports) => {
  90466. "use strict";
  90467. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90468. exports.Node = exports.NodeType = void 0;
  90469. var NodeType;
  90470. (function (NodeType) {
  90471. NodeType[NodeType["INNER"] = 1] = "INNER";
  90472. NodeType[NodeType["TRANSACTION_NO_METADATA"] = 2] = "TRANSACTION_NO_METADATA";
  90473. NodeType[NodeType["TRANSACTION_METADATA"] = 3] = "TRANSACTION_METADATA";
  90474. NodeType[NodeType["ACCOUNT_STATE"] = 4] = "ACCOUNT_STATE";
  90475. })(NodeType = exports.NodeType || (exports.NodeType = {}));
  90476. class Node {
  90477. }
  90478. exports.Node = Node;
  90479. //# sourceMappingURL=node.js.map
  90480. /***/ }),
  90481. /***/ 42704:
  90482. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90483. "use strict";
  90484. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  90485. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  90486. if (k2 === undefined) k2 = k;
  90487. var desc = Object.getOwnPropertyDescriptor(m, k);
  90488. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  90489. desc = { enumerable: true, get: function() { return m[k]; } };
  90490. }
  90491. Object.defineProperty(o, k2, desc);
  90492. }) : (function(o, m, k, k2) {
  90493. if (k2 === undefined) k2 = k;
  90494. o[k2] = m[k];
  90495. }));
  90496. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  90497. Object.defineProperty(o, "default", { enumerable: true, value: v });
  90498. }) : function(o, v) {
  90499. o["default"] = v;
  90500. });
  90501. var __importStar = (this && this.__importStar) || function (mod) {
  90502. if (mod && mod.__esModule) return mod;
  90503. var result = {};
  90504. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  90505. __setModuleDefault(result, mod);
  90506. return result;
  90507. };
  90508. var __importDefault = (this && this.__importDefault) || function (mod) {
  90509. return (mod && mod.__esModule) ? mod : { "default": mod };
  90510. };
  90511. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90512. exports.hashStateTree = exports.hashTxTree = exports.hashLedgerHeader = exports.hashSignedTx = void 0;
  90513. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  90514. const ripple_binary_codec_1 = __webpack_require__(42353);
  90515. const errors_1 = __webpack_require__(25615);
  90516. const HashPrefix_1 = __importDefault(__webpack_require__(42861));
  90517. const sha512Half_1 = __importDefault(__webpack_require__(40026));
  90518. const SHAMap_1 = __importStar(__webpack_require__(91040));
  90519. const HEX = 16;
  90520. function intToHex(integer, byteLength) {
  90521. const foo = Number(integer)
  90522. .toString(HEX)
  90523. .padStart(byteLength * 2, '0');
  90524. return foo;
  90525. }
  90526. function bytesToHex(bytes) {
  90527. return Buffer.from(bytes).toString('hex');
  90528. }
  90529. function bigintToHex(integerString, byteLength) {
  90530. const hex = new bignumber_js_1.default(integerString).toString(HEX);
  90531. return hex.padStart(byteLength * 2, '0');
  90532. }
  90533. function addLengthPrefix(hex) {
  90534. const length = hex.length / 2;
  90535. if (length <= 192) {
  90536. return bytesToHex([length]) + hex;
  90537. }
  90538. if (length <= 12480) {
  90539. const prefix = length - 193;
  90540. return bytesToHex([193 + (prefix >>> 8), prefix & 0xff]) + hex;
  90541. }
  90542. if (length <= 918744) {
  90543. const prefix = length - 12481;
  90544. return (bytesToHex([
  90545. 241 + (prefix >>> 16),
  90546. (prefix >>> 8) & 0xff,
  90547. prefix & 0xff,
  90548. ]) + hex);
  90549. }
  90550. throw new errors_1.XrplError('Variable integer overflow.');
  90551. }
  90552. function hashSignedTx(tx) {
  90553. let txBlob;
  90554. let txObject;
  90555. if (typeof tx === 'string') {
  90556. txBlob = tx;
  90557. txObject = (0, ripple_binary_codec_1.decode)(tx);
  90558. }
  90559. else {
  90560. txBlob = (0, ripple_binary_codec_1.encode)(tx);
  90561. txObject = tx;
  90562. }
  90563. if (txObject.TxnSignature === undefined && txObject.Signers === undefined) {
  90564. throw new errors_1.ValidationError('The transaction must be signed to hash it.');
  90565. }
  90566. const prefix = HashPrefix_1.default.TRANSACTION_ID.toString(16).toUpperCase();
  90567. return (0, sha512Half_1.default)(prefix.concat(txBlob));
  90568. }
  90569. exports.hashSignedTx = hashSignedTx;
  90570. function hashLedgerHeader(ledgerHeader) {
  90571. const prefix = HashPrefix_1.default.LEDGER.toString(HEX).toUpperCase();
  90572. const ledger = prefix +
  90573. intToHex(Number(ledgerHeader.ledger_index), 4) +
  90574. bigintToHex(ledgerHeader.total_coins, 8) +
  90575. ledgerHeader.parent_hash +
  90576. ledgerHeader.transaction_hash +
  90577. ledgerHeader.account_hash +
  90578. intToHex(ledgerHeader.parent_close_time, 4) +
  90579. intToHex(ledgerHeader.close_time, 4) +
  90580. intToHex(ledgerHeader.close_time_resolution, 1) +
  90581. intToHex(ledgerHeader.close_flags, 1);
  90582. return (0, sha512Half_1.default)(ledger);
  90583. }
  90584. exports.hashLedgerHeader = hashLedgerHeader;
  90585. function hashTxTree(transactions) {
  90586. var _a;
  90587. const shamap = new SHAMap_1.default();
  90588. for (const txJSON of transactions) {
  90589. const txBlobHex = (0, ripple_binary_codec_1.encode)(txJSON);
  90590. const metaHex = (0, ripple_binary_codec_1.encode)((_a = txJSON.metaData) !== null && _a !== void 0 ? _a : {});
  90591. const txHash = hashSignedTx(txBlobHex);
  90592. const data = addLengthPrefix(txBlobHex) + addLengthPrefix(metaHex);
  90593. shamap.addItem(txHash, data, SHAMap_1.NodeType.TRANSACTION_METADATA);
  90594. }
  90595. return shamap.hash;
  90596. }
  90597. exports.hashTxTree = hashTxTree;
  90598. function hashStateTree(entries) {
  90599. const shamap = new SHAMap_1.default();
  90600. entries.forEach((ledgerEntry) => {
  90601. const data = (0, ripple_binary_codec_1.encode)(ledgerEntry);
  90602. shamap.addItem(ledgerEntry.index, data, SHAMap_1.NodeType.ACCOUNT_STATE);
  90603. });
  90604. return shamap.hash;
  90605. }
  90606. exports.hashStateTree = hashStateTree;
  90607. function computeTransactionHash(ledger, options) {
  90608. const { transaction_hash } = ledger;
  90609. if (!options.computeTreeHashes) {
  90610. return transaction_hash;
  90611. }
  90612. if (ledger.transactions == null) {
  90613. throw new errors_1.ValidationError('transactions is missing from the ledger');
  90614. }
  90615. const transactionHash = hashTxTree(ledger.transactions);
  90616. if (transaction_hash !== transactionHash) {
  90617. throw new errors_1.ValidationError('transactionHash in header' +
  90618. ' does not match computed hash of transactions', {
  90619. transactionHashInHeader: transaction_hash,
  90620. computedHashOfTransactions: transactionHash,
  90621. });
  90622. }
  90623. return transactionHash;
  90624. }
  90625. function computeStateHash(ledger, options) {
  90626. const { account_hash } = ledger;
  90627. if (!options.computeTreeHashes) {
  90628. return account_hash;
  90629. }
  90630. if (ledger.accountState == null) {
  90631. throw new errors_1.ValidationError('accountState is missing from the ledger');
  90632. }
  90633. const stateHash = hashStateTree(ledger.accountState);
  90634. if (account_hash !== stateHash) {
  90635. throw new errors_1.ValidationError('stateHash in header does not match computed hash of state');
  90636. }
  90637. return stateHash;
  90638. }
  90639. function hashLedger(ledger, options = {}) {
  90640. const subhashes = {
  90641. transaction_hash: computeTransactionHash(ledger, options),
  90642. account_hash: computeStateHash(ledger, options),
  90643. };
  90644. return hashLedgerHeader(Object.assign(Object.assign({}, ledger), subhashes));
  90645. }
  90646. exports["default"] = hashLedger;
  90647. //# sourceMappingURL=hashLedger.js.map
  90648. /***/ }),
  90649. /***/ 93671:
  90650. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90651. "use strict";
  90652. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  90653. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  90654. if (k2 === undefined) k2 = k;
  90655. var desc = Object.getOwnPropertyDescriptor(m, k);
  90656. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  90657. desc = { enumerable: true, get: function() { return m[k]; } };
  90658. }
  90659. Object.defineProperty(o, k2, desc);
  90660. }) : (function(o, m, k, k2) {
  90661. if (k2 === undefined) k2 = k;
  90662. o[k2] = m[k];
  90663. }));
  90664. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  90665. Object.defineProperty(o, "default", { enumerable: true, value: v });
  90666. }) : function(o, v) {
  90667. o["default"] = v;
  90668. });
  90669. var __importStar = (this && this.__importStar) || function (mod) {
  90670. if (mod && mod.__esModule) return mod;
  90671. var result = {};
  90672. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  90673. __setModuleDefault(result, mod);
  90674. return result;
  90675. };
  90676. var __importDefault = (this && this.__importDefault) || function (mod) {
  90677. return (mod && mod.__esModule) ? mod : { "default": mod };
  90678. };
  90679. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90680. exports.hashTxTree = exports.hashStateTree = exports.hashLedger = exports.hashSignedTx = exports.hashLedgerHeader = exports.hashPaymentChannel = exports.hashEscrow = exports.hashTrustline = exports.hashOfferId = exports.hashSignerListId = exports.hashAccountRoot = exports.hashTx = void 0;
  90681. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  90682. const ripple_address_codec_1 = __webpack_require__(88914);
  90683. const hashLedger_1 = __importStar(__webpack_require__(42704));
  90684. exports.hashLedger = hashLedger_1.default;
  90685. Object.defineProperty(exports, "hashLedgerHeader", ({ enumerable: true, get: function () { return hashLedger_1.hashLedgerHeader; } }));
  90686. Object.defineProperty(exports, "hashSignedTx", ({ enumerable: true, get: function () { return hashLedger_1.hashSignedTx; } }));
  90687. Object.defineProperty(exports, "hashTxTree", ({ enumerable: true, get: function () { return hashLedger_1.hashTxTree; } }));
  90688. Object.defineProperty(exports, "hashStateTree", ({ enumerable: true, get: function () { return hashLedger_1.hashStateTree; } }));
  90689. const HashPrefix_1 = __importDefault(__webpack_require__(42861));
  90690. const ledgerSpaces_1 = __importDefault(__webpack_require__(81887));
  90691. const sha512Half_1 = __importDefault(__webpack_require__(40026));
  90692. const HEX = 16;
  90693. const BYTE_LENGTH = 4;
  90694. function addressToHex(address) {
  90695. return Buffer.from((0, ripple_address_codec_1.decodeAccountID)(address)).toString('hex');
  90696. }
  90697. function ledgerSpaceHex(name) {
  90698. return ledgerSpaces_1.default[name].charCodeAt(0).toString(HEX).padStart(4, '0');
  90699. }
  90700. const MASK = 0xff;
  90701. function currencyToHex(currency) {
  90702. if (currency.length !== 3) {
  90703. return currency;
  90704. }
  90705. const bytes = Array(20).fill(0);
  90706. bytes[12] = currency.charCodeAt(0) & MASK;
  90707. bytes[13] = currency.charCodeAt(1) & MASK;
  90708. bytes[14] = currency.charCodeAt(2) & MASK;
  90709. return Buffer.from(bytes).toString('hex');
  90710. }
  90711. function hashTx(txBlobHex) {
  90712. const prefix = HashPrefix_1.default.TRANSACTION_SIGN.toString(HEX).toUpperCase();
  90713. return (0, sha512Half_1.default)(prefix + txBlobHex);
  90714. }
  90715. exports.hashTx = hashTx;
  90716. function hashAccountRoot(address) {
  90717. return (0, sha512Half_1.default)(ledgerSpaceHex('account') + addressToHex(address));
  90718. }
  90719. exports.hashAccountRoot = hashAccountRoot;
  90720. function hashSignerListId(address) {
  90721. return (0, sha512Half_1.default)(`${ledgerSpaceHex('signerList') + addressToHex(address)}00000000`);
  90722. }
  90723. exports.hashSignerListId = hashSignerListId;
  90724. function hashOfferId(address, sequence) {
  90725. const hexPrefix = ledgerSpaces_1.default.offer
  90726. .charCodeAt(0)
  90727. .toString(HEX)
  90728. .padStart(2, '0');
  90729. const hexSequence = sequence.toString(HEX).padStart(8, '0');
  90730. const prefix = `00${hexPrefix}`;
  90731. return (0, sha512Half_1.default)(prefix + addressToHex(address) + hexSequence);
  90732. }
  90733. exports.hashOfferId = hashOfferId;
  90734. function hashTrustline(address1, address2, currency) {
  90735. const address1Hex = addressToHex(address1);
  90736. const address2Hex = addressToHex(address2);
  90737. const swap = new bignumber_js_1.default(address1Hex, 16).isGreaterThan(new bignumber_js_1.default(address2Hex, 16));
  90738. const lowAddressHex = swap ? address2Hex : address1Hex;
  90739. const highAddressHex = swap ? address1Hex : address2Hex;
  90740. const prefix = ledgerSpaceHex('rippleState');
  90741. return (0, sha512Half_1.default)(prefix + lowAddressHex + highAddressHex + currencyToHex(currency));
  90742. }
  90743. exports.hashTrustline = hashTrustline;
  90744. function hashEscrow(address, sequence) {
  90745. return (0, sha512Half_1.default)(ledgerSpaceHex('escrow') +
  90746. addressToHex(address) +
  90747. sequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'));
  90748. }
  90749. exports.hashEscrow = hashEscrow;
  90750. function hashPaymentChannel(address, dstAddress, sequence) {
  90751. return (0, sha512Half_1.default)(ledgerSpaceHex('paychan') +
  90752. addressToHex(address) +
  90753. addressToHex(dstAddress) +
  90754. sequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'));
  90755. }
  90756. exports.hashPaymentChannel = hashPaymentChannel;
  90757. //# sourceMappingURL=index.js.map
  90758. /***/ }),
  90759. /***/ 81887:
  90760. /***/ ((__unused_webpack_module, exports) => {
  90761. "use strict";
  90762. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90763. const ledgerSpaces = {
  90764. account: 'a',
  90765. dirNode: 'd',
  90766. generatorMap: 'g',
  90767. rippleState: 'r',
  90768. offer: 'o',
  90769. ownerDir: 'O',
  90770. bookDir: 'B',
  90771. contract: 'c',
  90772. skipList: 's',
  90773. escrow: 'u',
  90774. amendment: 'f',
  90775. feeSettings: 'e',
  90776. ticket: 'T',
  90777. signerList: 'S',
  90778. paychan: 'x',
  90779. check: 'C',
  90780. depositPreauth: 'p',
  90781. };
  90782. exports["default"] = ledgerSpaces;
  90783. //# sourceMappingURL=ledgerSpaces.js.map
  90784. /***/ }),
  90785. /***/ 40026:
  90786. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  90787. "use strict";
  90788. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  90789. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90790. const crypto_1 = __webpack_require__(55835);
  90791. const HASH_SIZE = 64;
  90792. function sha512Half(hex) {
  90793. return (0, crypto_1.createHash)('sha512')
  90794. .update(Buffer.from(hex, 'hex'))
  90795. .digest('hex')
  90796. .toUpperCase()
  90797. .slice(0, HASH_SIZE);
  90798. }
  90799. exports["default"] = sha512Half;
  90800. //# sourceMappingURL=sha512Half.js.map
  90801. /***/ }),
  90802. /***/ 6607:
  90803. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90804. "use strict";
  90805. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  90806. if (k2 === undefined) k2 = k;
  90807. var desc = Object.getOwnPropertyDescriptor(m, k);
  90808. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  90809. desc = { enumerable: true, get: function() { return m[k]; } };
  90810. }
  90811. Object.defineProperty(o, k2, desc);
  90812. }) : (function(o, m, k, k2) {
  90813. if (k2 === undefined) k2 = k;
  90814. o[k2] = m[k];
  90815. }));
  90816. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  90817. Object.defineProperty(o, "default", { enumerable: true, value: v });
  90818. }) : function(o, v) {
  90819. o["default"] = v;
  90820. });
  90821. var __importStar = (this && this.__importStar) || function (mod) {
  90822. if (mod && mod.__esModule) return mod;
  90823. var result = {};
  90824. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  90825. __setModuleDefault(result, mod);
  90826. return result;
  90827. };
  90828. var __importDefault = (this && this.__importDefault) || function (mod) {
  90829. return (mod && mod.__esModule) ? mod : { "default": mod };
  90830. };
  90831. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90832. exports.parseNFTokenID = exports.createCrossChainPayment = exports.getNFTokenID = exports.encodeForSigningClaim = exports.encodeForSigning = exports.encodeForMultiSigning = exports.decode = exports.encode = exports.decodeXAddress = exports.encodeXAddress = exports.decodeAccountPublic = exports.encodeAccountPublic = exports.decodeNodePublic = exports.encodeNodePublic = exports.decodeAccountID = exports.encodeAccountID = exports.decodeSeed = exports.encodeSeed = exports.isValidClassicAddress = exports.isValidXAddress = exports.xAddressToClassicAddress = exports.classicAddressToXAddress = exports.convertHexToString = exports.convertStringToHex = exports.verifyPaymentChannelClaim = exports.verifyKeypairSignature = exports.signPaymentChannelClaim = exports.deriveXAddress = exports.deriveAddress = exports.deriveKeypair = exports.hashes = exports.isValidAddress = exports.isValidSecret = exports.qualityToDecimal = exports.transferRateToDecimal = exports.decimalToTransferRate = exports.percentToTransferRate = exports.decimalToQuality = exports.percentToQuality = exports.unixTimeToRippleTime = exports.rippleTimeToUnixTime = exports.isoTimeToRippleTime = exports.rippleTimeToISOTime = exports.hasNextPage = exports.xrpToDrops = exports.dropsToXrp = exports.getBalanceChanges = void 0;
  90833. const ripple_address_codec_1 = __webpack_require__(88914);
  90834. Object.defineProperty(exports, "classicAddressToXAddress", ({ enumerable: true, get: function () { return ripple_address_codec_1.classicAddressToXAddress; } }));
  90835. Object.defineProperty(exports, "decodeAccountID", ({ enumerable: true, get: function () { return ripple_address_codec_1.decodeAccountID; } }));
  90836. Object.defineProperty(exports, "decodeAccountPublic", ({ enumerable: true, get: function () { return ripple_address_codec_1.decodeAccountPublic; } }));
  90837. Object.defineProperty(exports, "decodeNodePublic", ({ enumerable: true, get: function () { return ripple_address_codec_1.decodeNodePublic; } }));
  90838. Object.defineProperty(exports, "decodeSeed", ({ enumerable: true, get: function () { return ripple_address_codec_1.decodeSeed; } }));
  90839. Object.defineProperty(exports, "decodeXAddress", ({ enumerable: true, get: function () { return ripple_address_codec_1.decodeXAddress; } }));
  90840. Object.defineProperty(exports, "encodeAccountID", ({ enumerable: true, get: function () { return ripple_address_codec_1.encodeAccountID; } }));
  90841. Object.defineProperty(exports, "encodeAccountPublic", ({ enumerable: true, get: function () { return ripple_address_codec_1.encodeAccountPublic; } }));
  90842. Object.defineProperty(exports, "encodeNodePublic", ({ enumerable: true, get: function () { return ripple_address_codec_1.encodeNodePublic; } }));
  90843. Object.defineProperty(exports, "encodeSeed", ({ enumerable: true, get: function () { return ripple_address_codec_1.encodeSeed; } }));
  90844. Object.defineProperty(exports, "encodeXAddress", ({ enumerable: true, get: function () { return ripple_address_codec_1.encodeXAddress; } }));
  90845. Object.defineProperty(exports, "isValidClassicAddress", ({ enumerable: true, get: function () { return ripple_address_codec_1.isValidClassicAddress; } }));
  90846. Object.defineProperty(exports, "isValidXAddress", ({ enumerable: true, get: function () { return ripple_address_codec_1.isValidXAddress; } }));
  90847. Object.defineProperty(exports, "xAddressToClassicAddress", ({ enumerable: true, get: function () { return ripple_address_codec_1.xAddressToClassicAddress; } }));
  90848. const rbc = __importStar(__webpack_require__(42353));
  90849. const ripple_keypairs_1 = __webpack_require__(29140);
  90850. Object.defineProperty(exports, "verifyKeypairSignature", ({ enumerable: true, get: function () { return ripple_keypairs_1.verify; } }));
  90851. const createCrossChainPayment_1 = __importDefault(__webpack_require__(66316));
  90852. exports.createCrossChainPayment = createCrossChainPayment_1.default;
  90853. const derive_1 = __webpack_require__(9094);
  90854. Object.defineProperty(exports, "deriveKeypair", ({ enumerable: true, get: function () { return derive_1.deriveKeypair; } }));
  90855. Object.defineProperty(exports, "deriveAddress", ({ enumerable: true, get: function () { return derive_1.deriveAddress; } }));
  90856. Object.defineProperty(exports, "deriveXAddress", ({ enumerable: true, get: function () { return derive_1.deriveXAddress; } }));
  90857. const getBalanceChanges_1 = __importDefault(__webpack_require__(90013));
  90858. exports.getBalanceChanges = getBalanceChanges_1.default;
  90859. const getNFTokenID_1 = __importDefault(__webpack_require__(85612));
  90860. exports.getNFTokenID = getNFTokenID_1.default;
  90861. const hashes_1 = __webpack_require__(93671);
  90862. const parseNFTokenID_1 = __importDefault(__webpack_require__(54112));
  90863. exports.parseNFTokenID = parseNFTokenID_1.default;
  90864. const quality_1 = __webpack_require__(33217);
  90865. Object.defineProperty(exports, "percentToTransferRate", ({ enumerable: true, get: function () { return quality_1.percentToTransferRate; } }));
  90866. Object.defineProperty(exports, "decimalToTransferRate", ({ enumerable: true, get: function () { return quality_1.decimalToTransferRate; } }));
  90867. Object.defineProperty(exports, "transferRateToDecimal", ({ enumerable: true, get: function () { return quality_1.transferRateToDecimal; } }));
  90868. Object.defineProperty(exports, "percentToQuality", ({ enumerable: true, get: function () { return quality_1.percentToQuality; } }));
  90869. Object.defineProperty(exports, "decimalToQuality", ({ enumerable: true, get: function () { return quality_1.decimalToQuality; } }));
  90870. Object.defineProperty(exports, "qualityToDecimal", ({ enumerable: true, get: function () { return quality_1.qualityToDecimal; } }));
  90871. const signPaymentChannelClaim_1 = __importDefault(__webpack_require__(98030));
  90872. exports.signPaymentChannelClaim = signPaymentChannelClaim_1.default;
  90873. const stringConversion_1 = __webpack_require__(73333);
  90874. Object.defineProperty(exports, "convertHexToString", ({ enumerable: true, get: function () { return stringConversion_1.convertHexToString; } }));
  90875. Object.defineProperty(exports, "convertStringToHex", ({ enumerable: true, get: function () { return stringConversion_1.convertStringToHex; } }));
  90876. const timeConversion_1 = __webpack_require__(48716);
  90877. Object.defineProperty(exports, "rippleTimeToISOTime", ({ enumerable: true, get: function () { return timeConversion_1.rippleTimeToISOTime; } }));
  90878. Object.defineProperty(exports, "isoTimeToRippleTime", ({ enumerable: true, get: function () { return timeConversion_1.isoTimeToRippleTime; } }));
  90879. Object.defineProperty(exports, "rippleTimeToUnixTime", ({ enumerable: true, get: function () { return timeConversion_1.rippleTimeToUnixTime; } }));
  90880. Object.defineProperty(exports, "unixTimeToRippleTime", ({ enumerable: true, get: function () { return timeConversion_1.unixTimeToRippleTime; } }));
  90881. const verifyPaymentChannelClaim_1 = __importDefault(__webpack_require__(3663));
  90882. exports.verifyPaymentChannelClaim = verifyPaymentChannelClaim_1.default;
  90883. const xrpConversion_1 = __webpack_require__(75122);
  90884. Object.defineProperty(exports, "xrpToDrops", ({ enumerable: true, get: function () { return xrpConversion_1.xrpToDrops; } }));
  90885. Object.defineProperty(exports, "dropsToXrp", ({ enumerable: true, get: function () { return xrpConversion_1.dropsToXrp; } }));
  90886. function isValidSecret(secret) {
  90887. try {
  90888. (0, derive_1.deriveKeypair)(secret);
  90889. return true;
  90890. }
  90891. catch (_err) {
  90892. return false;
  90893. }
  90894. }
  90895. exports.isValidSecret = isValidSecret;
  90896. function encode(object) {
  90897. return rbc.encode(object);
  90898. }
  90899. exports.encode = encode;
  90900. function encodeForSigning(object) {
  90901. return rbc.encodeForSigning(object);
  90902. }
  90903. exports.encodeForSigning = encodeForSigning;
  90904. function encodeForSigningClaim(object) {
  90905. return rbc.encodeForSigningClaim(object);
  90906. }
  90907. exports.encodeForSigningClaim = encodeForSigningClaim;
  90908. function encodeForMultiSigning(object, signer) {
  90909. return rbc.encodeForMultisigning(object, signer);
  90910. }
  90911. exports.encodeForMultiSigning = encodeForMultiSigning;
  90912. function decode(hex) {
  90913. return rbc.decode(hex);
  90914. }
  90915. exports.decode = decode;
  90916. function isValidAddress(address) {
  90917. return (0, ripple_address_codec_1.isValidXAddress)(address) || (0, ripple_address_codec_1.isValidClassicAddress)(address);
  90918. }
  90919. exports.isValidAddress = isValidAddress;
  90920. function hasNextPage(response) {
  90921. return Boolean(response.result['marker']);
  90922. }
  90923. exports.hasNextPage = hasNextPage;
  90924. const hashes = {
  90925. hashSignedTx: hashes_1.hashSignedTx,
  90926. hashTx: hashes_1.hashTx,
  90927. hashAccountRoot: hashes_1.hashAccountRoot,
  90928. hashSignerListId: hashes_1.hashSignerListId,
  90929. hashOfferId: hashes_1.hashOfferId,
  90930. hashTrustline: hashes_1.hashTrustline,
  90931. hashTxTree: hashes_1.hashTxTree,
  90932. hashStateTree: hashes_1.hashStateTree,
  90933. hashLedger: hashes_1.hashLedger,
  90934. hashLedgerHeader: hashes_1.hashLedgerHeader,
  90935. hashEscrow: hashes_1.hashEscrow,
  90936. hashPaymentChannel: hashes_1.hashPaymentChannel,
  90937. };
  90938. exports.hashes = hashes;
  90939. //# sourceMappingURL=index.js.map
  90940. /***/ }),
  90941. /***/ 54112:
  90942. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90943. "use strict";
  90944. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  90945. var __importDefault = (this && this.__importDefault) || function (mod) {
  90946. return (mod && mod.__esModule) ? mod : { "default": mod };
  90947. };
  90948. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90949. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  90950. const ripple_address_codec_1 = __webpack_require__(88914);
  90951. const errors_1 = __webpack_require__(25615);
  90952. function unscrambleTaxon(taxon, tokenSeq) {
  90953. return (taxon ^ (384160001 * tokenSeq + 2459)) % 4294967296;
  90954. }
  90955. function parseNFTokenID(nftokenID) {
  90956. const expectedLength = 64;
  90957. if (nftokenID.length !== expectedLength) {
  90958. throw new errors_1.XrplError(`Attempting to parse a nftokenID with length ${nftokenID.length}
  90959. , but expected a token with length ${expectedLength}`);
  90960. }
  90961. const scrambledTaxon = new bignumber_js_1.default(nftokenID.substring(48, 56), 16).toNumber();
  90962. const sequence = new bignumber_js_1.default(nftokenID.substring(56, 64), 16).toNumber();
  90963. const NFTokenIDData = {
  90964. NFTokenID: nftokenID,
  90965. Flags: new bignumber_js_1.default(nftokenID.substring(0, 4), 16).toNumber(),
  90966. TransferFee: new bignumber_js_1.default(nftokenID.substring(4, 8), 16).toNumber(),
  90967. Issuer: (0, ripple_address_codec_1.encodeAccountID)(Buffer.from(nftokenID.substring(8, 48), 'hex')),
  90968. Taxon: unscrambleTaxon(scrambledTaxon, sequence),
  90969. Sequence: sequence,
  90970. };
  90971. return NFTokenIDData;
  90972. }
  90973. exports["default"] = parseNFTokenID;
  90974. //# sourceMappingURL=parseNFTokenID.js.map
  90975. /***/ }),
  90976. /***/ 33217:
  90977. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  90978. "use strict";
  90979. var __importDefault = (this && this.__importDefault) || function (mod) {
  90980. return (mod && mod.__esModule) ? mod : { "default": mod };
  90981. };
  90982. Object.defineProperty(exports, "__esModule", ({ value: true }));
  90983. exports.percentToQuality = exports.transferRateToDecimal = exports.qualityToDecimal = exports.decimalToQuality = exports.percentToTransferRate = exports.decimalToTransferRate = void 0;
  90984. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  90985. const errors_1 = __webpack_require__(25615);
  90986. const BASE_TEN = 10;
  90987. const ONE_BILLION = '1000000000';
  90988. const TWO_BILLION = '2000000000';
  90989. function percentToDecimal(percent) {
  90990. if (!percent.endsWith('%')) {
  90991. throw new errors_1.ValidationError(`Value ${percent} must end with %`);
  90992. }
  90993. const split = percent.split('%').filter((str) => str !== '');
  90994. if (split.length !== 1) {
  90995. throw new errors_1.ValidationError(`Value ${percent} contains too many % signs`);
  90996. }
  90997. return new bignumber_js_1.default(split[0]).dividedBy('100').toString(BASE_TEN);
  90998. }
  90999. function decimalToTransferRate(decimal) {
  91000. const rate = new bignumber_js_1.default(decimal).times(ONE_BILLION).plus(ONE_BILLION);
  91001. if (rate.isLessThan(ONE_BILLION) || rate.isGreaterThan(TWO_BILLION)) {
  91002. throw new errors_1.ValidationError(`Decimal value must be between 0 and 1.00.`);
  91003. }
  91004. const billionths = rate.toString(BASE_TEN);
  91005. if (billionths === ONE_BILLION) {
  91006. return 0;
  91007. }
  91008. if (billionths === 'NaN') {
  91009. throw new errors_1.ValidationError(`Value is not a number`);
  91010. }
  91011. if (billionths.includes('.')) {
  91012. throw new errors_1.ValidationError(`Decimal exceeds maximum precision.`);
  91013. }
  91014. return Number(billionths);
  91015. }
  91016. exports.decimalToTransferRate = decimalToTransferRate;
  91017. function percentToTransferRate(percent) {
  91018. return decimalToTransferRate(percentToDecimal(percent));
  91019. }
  91020. exports.percentToTransferRate = percentToTransferRate;
  91021. function decimalToQuality(decimal) {
  91022. const rate = new bignumber_js_1.default(decimal).times(ONE_BILLION);
  91023. const billionths = rate.toString(BASE_TEN);
  91024. if (billionths === 'NaN') {
  91025. throw new errors_1.ValidationError(`Value is not a number`);
  91026. }
  91027. if (billionths.includes('-')) {
  91028. throw new errors_1.ValidationError('Cannot have negative Quality');
  91029. }
  91030. if (billionths === ONE_BILLION) {
  91031. return 0;
  91032. }
  91033. if (billionths.includes('.')) {
  91034. throw new errors_1.ValidationError(`Decimal exceeds maximum precision.`);
  91035. }
  91036. return Number(billionths);
  91037. }
  91038. exports.decimalToQuality = decimalToQuality;
  91039. function qualityToDecimal(quality) {
  91040. if (!Number.isInteger(quality)) {
  91041. throw new errors_1.ValidationError('Quality must be an integer');
  91042. }
  91043. if (quality < 0) {
  91044. throw new errors_1.ValidationError('Negative quality not allowed');
  91045. }
  91046. if (quality === 0) {
  91047. return '1';
  91048. }
  91049. const decimal = new bignumber_js_1.default(quality).dividedBy(ONE_BILLION);
  91050. return decimal.toString(BASE_TEN);
  91051. }
  91052. exports.qualityToDecimal = qualityToDecimal;
  91053. function transferRateToDecimal(rate) {
  91054. if (!Number.isInteger(rate)) {
  91055. throw new errors_1.ValidationError('Error decoding, transfer Rate must be an integer');
  91056. }
  91057. if (rate === 0) {
  91058. return '0';
  91059. }
  91060. const decimal = new bignumber_js_1.default(rate).minus(ONE_BILLION).dividedBy(ONE_BILLION);
  91061. if (decimal.isLessThan(0)) {
  91062. throw new errors_1.ValidationError('Error decoding, negative transfer rate');
  91063. }
  91064. return decimal.toString(BASE_TEN);
  91065. }
  91066. exports.transferRateToDecimal = transferRateToDecimal;
  91067. function percentToQuality(percent) {
  91068. return decimalToQuality(percentToDecimal(percent));
  91069. }
  91070. exports.percentToQuality = percentToQuality;
  91071. //# sourceMappingURL=quality.js.map
  91072. /***/ }),
  91073. /***/ 98030:
  91074. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  91075. "use strict";
  91076. Object.defineProperty(exports, "__esModule", ({ value: true }));
  91077. const ripple_binary_codec_1 = __webpack_require__(42353);
  91078. const ripple_keypairs_1 = __webpack_require__(29140);
  91079. const xrpConversion_1 = __webpack_require__(75122);
  91080. function signPaymentChannelClaim(channel, amount, privateKey) {
  91081. const signingData = (0, ripple_binary_codec_1.encodeForSigningClaim)({
  91082. channel,
  91083. amount: (0, xrpConversion_1.xrpToDrops)(amount),
  91084. });
  91085. return (0, ripple_keypairs_1.sign)(signingData, privateKey);
  91086. }
  91087. exports["default"] = signPaymentChannelClaim;
  91088. //# sourceMappingURL=signPaymentChannelClaim.js.map
  91089. /***/ }),
  91090. /***/ 73333:
  91091. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  91092. "use strict";
  91093. /* provided dependency */ var Buffer = __webpack_require__(48764)["Buffer"];
  91094. Object.defineProperty(exports, "__esModule", ({ value: true }));
  91095. exports.convertStringToHex = exports.convertHexToString = void 0;
  91096. function convertStringToHex(string) {
  91097. return Buffer.from(string, 'utf8').toString('hex').toUpperCase();
  91098. }
  91099. exports.convertStringToHex = convertStringToHex;
  91100. function convertHexToString(hex, encoding = 'utf8') {
  91101. return Buffer.from(hex, 'hex').toString(encoding);
  91102. }
  91103. exports.convertHexToString = convertHexToString;
  91104. //# sourceMappingURL=stringConversion.js.map
  91105. /***/ }),
  91106. /***/ 48716:
  91107. /***/ ((__unused_webpack_module, exports) => {
  91108. "use strict";
  91109. Object.defineProperty(exports, "__esModule", ({ value: true }));
  91110. exports.isoTimeToRippleTime = exports.rippleTimeToISOTime = exports.unixTimeToRippleTime = exports.rippleTimeToUnixTime = void 0;
  91111. const RIPPLE_EPOCH_DIFF = 0x386d4380;
  91112. function rippleTimeToUnixTime(rpepoch) {
  91113. return (rpepoch + RIPPLE_EPOCH_DIFF) * 1000;
  91114. }
  91115. exports.rippleTimeToUnixTime = rippleTimeToUnixTime;
  91116. function unixTimeToRippleTime(timestamp) {
  91117. return Math.round(timestamp / 1000) - RIPPLE_EPOCH_DIFF;
  91118. }
  91119. exports.unixTimeToRippleTime = unixTimeToRippleTime;
  91120. function rippleTimeToISOTime(rippleTime) {
  91121. return new Date(rippleTimeToUnixTime(rippleTime)).toISOString();
  91122. }
  91123. exports.rippleTimeToISOTime = rippleTimeToISOTime;
  91124. function isoTimeToRippleTime(iso8601) {
  91125. const isoDate = typeof iso8601 === 'string' ? new Date(iso8601) : iso8601;
  91126. return unixTimeToRippleTime(isoDate.getTime());
  91127. }
  91128. exports.isoTimeToRippleTime = isoTimeToRippleTime;
  91129. //# sourceMappingURL=timeConversion.js.map
  91130. /***/ }),
  91131. /***/ 3663:
  91132. /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  91133. "use strict";
  91134. Object.defineProperty(exports, "__esModule", ({ value: true }));
  91135. const ripple_binary_codec_1 = __webpack_require__(42353);
  91136. const ripple_keypairs_1 = __webpack_require__(29140);
  91137. const xrpConversion_1 = __webpack_require__(75122);
  91138. function verifyPaymentChannelClaim(channel, amount, signature, publicKey) {
  91139. const signingData = (0, ripple_binary_codec_1.encodeForSigningClaim)({
  91140. channel,
  91141. amount: (0, xrpConversion_1.xrpToDrops)(amount),
  91142. });
  91143. return (0, ripple_keypairs_1.verify)(signingData, signature, publicKey);
  91144. }
  91145. exports["default"] = verifyPaymentChannelClaim;
  91146. //# sourceMappingURL=verifyPaymentChannelClaim.js.map
  91147. /***/ }),
  91148. /***/ 75122:
  91149. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  91150. "use strict";
  91151. var __importDefault = (this && this.__importDefault) || function (mod) {
  91152. return (mod && mod.__esModule) ? mod : { "default": mod };
  91153. };
  91154. Object.defineProperty(exports, "__esModule", ({ value: true }));
  91155. exports.xrpToDrops = exports.dropsToXrp = void 0;
  91156. const bignumber_js_1 = __importDefault(__webpack_require__(44431));
  91157. const errors_1 = __webpack_require__(25615);
  91158. const DROPS_PER_XRP = 1000000.0;
  91159. const MAX_FRACTION_LENGTH = 6;
  91160. const BASE_TEN = 10;
  91161. const SANITY_CHECK = /^-?[0-9.]+$/u;
  91162. function dropsToXrp(dropsToConvert) {
  91163. const drops = new bignumber_js_1.default(dropsToConvert).toString(BASE_TEN);
  91164. if (typeof dropsToConvert === 'string' && drops === 'NaN') {
  91165. throw new errors_1.ValidationError(`dropsToXrp: invalid value '${dropsToConvert}', should be a BigNumber or string-encoded number.`);
  91166. }
  91167. if (drops.includes('.')) {
  91168. throw new errors_1.ValidationError(`dropsToXrp: value '${drops}' has too many decimal places.`);
  91169. }
  91170. if (!SANITY_CHECK.exec(drops)) {
  91171. throw new errors_1.ValidationError(`dropsToXrp: failed sanity check -` +
  91172. ` value '${drops}',` +
  91173. ` does not match (^-?[0-9]+$).`);
  91174. }
  91175. return new bignumber_js_1.default(drops).dividedBy(DROPS_PER_XRP).toString(BASE_TEN);
  91176. }
  91177. exports.dropsToXrp = dropsToXrp;
  91178. function xrpToDrops(xrpToConvert) {
  91179. const xrp = new bignumber_js_1.default(xrpToConvert).toString(BASE_TEN);
  91180. if (typeof xrpToConvert === 'string' && xrp === 'NaN') {
  91181. throw new errors_1.ValidationError(`xrpToDrops: invalid value '${xrpToConvert}', should be a BigNumber or string-encoded number.`);
  91182. }
  91183. if (!SANITY_CHECK.exec(xrp)) {
  91184. throw new errors_1.ValidationError(`xrpToDrops: failed sanity check - value '${xrp}', does not match (^-?[0-9.]+$).`);
  91185. }
  91186. const components = xrp.split('.');
  91187. if (components.length > 2) {
  91188. throw new errors_1.ValidationError(`xrpToDrops: failed sanity check - value '${xrp}' has too many decimal points.`);
  91189. }
  91190. const fraction = components[1] || '0';
  91191. if (fraction.length > MAX_FRACTION_LENGTH) {
  91192. throw new errors_1.ValidationError(`xrpToDrops: value '${xrp}' has too many decimal places.`);
  91193. }
  91194. return new bignumber_js_1.default(xrp)
  91195. .times(DROPS_PER_XRP)
  91196. .integerValue(bignumber_js_1.default.ROUND_FLOOR)
  91197. .toString(BASE_TEN);
  91198. }
  91199. exports.xrpToDrops = xrpToDrops;
  91200. //# sourceMappingURL=xrpConversion.js.map
  91201. /***/ }),
  91202. /***/ 47529:
  91203. /***/ ((module) => {
  91204. module.exports = extend
  91205. var hasOwnProperty = Object.prototype.hasOwnProperty;
  91206. function extend() {
  91207. var target = {}
  91208. for (var i = 0; i < arguments.length; i++) {
  91209. var source = arguments[i]
  91210. for (var key in source) {
  91211. if (hasOwnProperty.call(source, key)) {
  91212. target[key] = source[key]
  91213. }
  91214. }
  91215. }
  91216. return target
  91217. }
  91218. /***/ }),
  91219. /***/ 80950:
  91220. /***/ (() => {
  91221. /* (ignored) */
  91222. /***/ }),
  91223. /***/ 46601:
  91224. /***/ (() => {
  91225. /* (ignored) */
  91226. /***/ }),
  91227. /***/ 89214:
  91228. /***/ (() => {
  91229. /* (ignored) */
  91230. /***/ }),
  91231. /***/ 8623:
  91232. /***/ (() => {
  91233. /* (ignored) */
  91234. /***/ }),
  91235. /***/ 7748:
  91236. /***/ (() => {
  91237. /* (ignored) */
  91238. /***/ }),
  91239. /***/ 85568:
  91240. /***/ (() => {
  91241. /* (ignored) */
  91242. /***/ }),
  91243. /***/ 56619:
  91244. /***/ (() => {
  91245. /* (ignored) */
  91246. /***/ }),
  91247. /***/ 77108:
  91248. /***/ (() => {
  91249. /* (ignored) */
  91250. /***/ }),
  91251. /***/ 52361:
  91252. /***/ (() => {
  91253. /* (ignored) */
  91254. /***/ }),
  91255. /***/ 94616:
  91256. /***/ (() => {
  91257. /* (ignored) */
  91258. /***/ }),
  91259. /***/ 33370:
  91260. /***/ (() => {
  91261. /* (ignored) */
  91262. /***/ }),
  91263. /***/ 26155:
  91264. /***/ (() => {
  91265. /* (ignored) */
  91266. /***/ }),
  91267. /***/ 63083:
  91268. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  91269. "use strict";
  91270. var possibleNames = [
  91271. 'BigInt64Array',
  91272. 'BigUint64Array',
  91273. 'Float32Array',
  91274. 'Float64Array',
  91275. 'Int16Array',
  91276. 'Int32Array',
  91277. 'Int8Array',
  91278. 'Uint16Array',
  91279. 'Uint32Array',
  91280. 'Uint8Array',
  91281. 'Uint8ClampedArray'
  91282. ];
  91283. var g = typeof globalThis === 'undefined' ? __webpack_require__.g : globalThis;
  91284. module.exports = function availableTypedArrays() {
  91285. var out = [];
  91286. for (var i = 0; i < possibleNames.length; i++) {
  91287. if (typeof g[possibleNames[i]] === 'function') {
  91288. out[out.length] = possibleNames[i];
  91289. }
  91290. }
  91291. return out;
  91292. };
  91293. /***/ }),
  91294. /***/ 20882:
  91295. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  91296. "use strict";
  91297. var GetIntrinsic = __webpack_require__(40210);
  91298. var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
  91299. if ($gOPD) {
  91300. try {
  91301. $gOPD([], 'length');
  91302. } catch (e) {
  91303. // IE 8 has a broken gOPD
  91304. $gOPD = null;
  91305. }
  91306. }
  91307. module.exports = $gOPD;
  91308. /***/ }),
  91309. /***/ 46996:
  91310. /***/ ((module) => {
  91311. "use strict";
  91312. module.exports = JSON.parse('["的","一","是","在","不","了","有","和","人","这","中","大","为","上","个","国","我","以","要","他","时","来","用","们","生","到","作","地","于","出","就","分","对","成","会","可","主","发","年","动","同","工","也","能","下","过","子","说","产","种","面","而","方","后","多","定","行","学","法","所","民","得","经","十","三","之","进","着","等","部","度","家","电","力","里","如","水","化","高","自","二","理","起","小","物","现","实","加","量","都","两","体","制","机","当","使","点","从","业","本","去","把","性","好","应","开","它","合","还","因","由","其","些","然","前","外","天","政","四","日","那","社","义","事","平","形","相","全","表","间","样","与","关","各","重","新","线","内","数","正","心","反","你","明","看","原","又","么","利","比","或","但","质","气","第","向","道","命","此","变","条","只","没","结","解","问","意","建","月","公","无","系","军","很","情","者","最","立","代","想","已","通","并","提","直","题","党","程","展","五","果","料","象","员","革","位","入","常","文","总","次","品","式","活","设","及","管","特","件","长","求","老","头","基","资","边","流","路","级","少","图","山","统","接","知","较","将","组","见","计","别","她","手","角","期","根","论","运","农","指","几","九","区","强","放","决","西","被","干","做","必","战","先","回","则","任","取","据","处","队","南","给","色","光","门","即","保","治","北","造","百","规","热","领","七","海","口","东","导","器","压","志","世","金","增","争","济","阶","油","思","术","极","交","受","联","什","认","六","共","权","收","证","改","清","美","再","采","转","更","单","风","切","打","白","教","速","花","带","安","场","身","车","例","真","务","具","万","每","目","至","达","走","积","示","议","声","报","斗","完","类","八","离","华","名","确","才","科","张","信","马","节","话","米","整","空","元","况","今","集","温","传","土","许","步","群","广","石","记","需","段","研","界","拉","林","律","叫","且","究","观","越","织","装","影","算","低","持","音","众","书","布","复","容","儿","须","际","商","非","验","连","断","深","难","近","矿","千","周","委","素","技","备","半","办","青","省","列","习","响","约","支","般","史","感","劳","便","团","往","酸","历","市","克","何","除","消","构","府","称","太","准","精","值","号","率","族","维","划","选","标","写","存","候","毛","亲","快","效","斯","院","查","江","型","眼","王","按","格","养","易","置","派","层","片","始","却","专","状","育","厂","京","识","适","属","圆","包","火","住","调","满","县","局","照","参","红","细","引","听","该","铁","价","严","首","底","液","官","德","随","病","苏","失","尔","死","讲","配","女","黄","推","显","谈","罪","神","艺","呢","席","含","企","望","密","批","营","项","防","举","球","英","氧","势","告","李","台","落","木","帮","轮","破","亚","师","围","注","远","字","材","排","供","河","态","封","另","施","减","树","溶","怎","止","案","言","士","均","武","固","叶","鱼","波","视","仅","费","紧","爱","左","章","早","朝","害","续","轻","服","试","食","充","兵","源","判","护","司","足","某","练","差","致","板","田","降","黑","犯","负","击","范","继","兴","似","余","坚","曲","输","修","故","城","夫","够","送","笔","船","占","右","财","吃","富","春","职","觉","汉","画","功","巴","跟","虽","杂","飞","检","吸","助","升","阳","互","初","创","抗","考","投","坏","策","古","径","换","未","跑","留","钢","曾","端","责","站","简","述","钱","副","尽","帝","射","草","冲","承","独","令","限","阿","宣","环","双","请","超","微","让","控","州","良","轴","找","否","纪","益","依","优","顶","础","载","倒","房","突","坐","粉","敌","略","客","袁","冷","胜","绝","析","块","剂","测","丝","协","诉","念","陈","仍","罗","盐","友","洋","错","苦","夜","刑","移","频","逐","靠","混","母","短","皮","终","聚","汽","村","云","哪","既","距","卫","停","烈","央","察","烧","迅","境","若","印","洲","刻","括","激","孔","搞","甚","室","待","核","校","散","侵","吧","甲","游","久","菜","味","旧","模","湖","货","损","预","阻","毫","普","稳","乙","妈","植","息","扩","银","语","挥","酒","守","拿","序","纸","医","缺","雨","吗","针","刘","啊","急","唱","误","训","愿","审","附","获","茶","鲜","粮","斤","孩","脱","硫","肥","善","龙","演","父","渐","血","欢","械","掌","歌","沙","刚","攻","谓","盾","讨","晚","粒","乱","燃","矛","乎","杀","药","宁","鲁","贵","钟","煤","读","班","伯","香","介","迫","句","丰","培","握","兰","担","弦","蛋","沉","假","穿","执","答","乐","谁","顺","烟","缩","征","脸","喜","松","脚","困","异","免","背","星","福","买","染","井","概","慢","怕","磁","倍","祖","皇","促","静","补","评","翻","肉","践","尼","衣","宽","扬","棉","希","伤","操","垂","秋","宜","氢","套","督","振","架","亮","末","宪","庆","编","牛","触","映","雷","销","诗","座","居","抓","裂","胞","呼","娘","景","威","绿","晶","厚","盟","衡","鸡","孙","延","危","胶","屋","乡","临","陆","顾","掉","呀","灯","岁","措","束","耐","剧","玉","赵","跳","哥","季","课","凯","胡","额","款","绍","卷","齐","伟","蒸","殖","永","宗","苗","川","炉","岩","弱","零","杨","奏","沿","露","杆","探","滑","镇","饭","浓","航","怀","赶","库","夺","伊","灵","税","途","灭","赛","归","召","鼓","播","盘","裁","险","康","唯","录","菌","纯","借","糖","盖","横","符","私","努","堂","域","枪","润","幅","哈","竟","熟","虫","泽","脑","壤","碳","欧","遍","侧","寨","敢","彻","虑","斜","薄","庭","纳","弹","饲","伸","折","麦","湿","暗","荷","瓦","塞","床","筑","恶","户","访","塔","奇","透","梁","刀","旋","迹","卡","氯","遇","份","毒","泥","退","洗","摆","灰","彩","卖","耗","夏","择","忙","铜","献","硬","予","繁","圈","雪","函","亦","抽","篇","阵","阴","丁","尺","追","堆","雄","迎","泛","爸","楼","避","谋","吨","野","猪","旗","累","偏","典","馆","索","秦","脂","潮","爷","豆","忽","托","惊","塑","遗","愈","朱","替","纤","粗","倾","尚","痛","楚","谢","奋","购","磨","君","池","旁","碎","骨","监","捕","弟","暴","割","贯","殊","释","词","亡","壁","顿","宝","午","尘","闻","揭","炮","残","冬","桥","妇","警","综","招","吴","付","浮","遭","徐","您","摇","谷","赞","箱","隔","订","男","吹","园","纷","唐","败","宋","玻","巨","耕","坦","荣","闭","湾","键","凡","驻","锅","救","恩","剥","凝","碱","齿","截","炼","麻","纺","禁","废","盛","版","缓","净","睛","昌","婚","涉","筒","嘴","插","岸","朗","庄","街","藏","姑","贸","腐","奴","啦","惯","乘","伙","恢","匀","纱","扎","辩","耳","彪","臣","亿","璃","抵","脉","秀","萨","俄","网","舞","店","喷","纵","寸","汗","挂","洪","贺","闪","柬","爆","烯","津","稻","墙","软","勇","像","滚","厘","蒙","芳","肯","坡","柱","荡","腿","仪","旅","尾","轧","冰","贡","登","黎","削","钻","勒","逃","障","氨","郭","峰","币","港","伏","轨","亩","毕","擦","莫","刺","浪","秘","援","株","健","售","股","岛","甘","泡","睡","童","铸","汤","阀","休","汇","舍","牧","绕","炸","哲","磷","绩","朋","淡","尖","启","陷","柴","呈","徒","颜","泪","稍","忘","泵","蓝","拖","洞","授","镜","辛","壮","锋","贫","虚","弯","摩","泰","幼","廷","尊","窗","纲","弄","隶","疑","氏","宫","姐","震","瑞","怪","尤","琴","循","描","膜","违","夹","腰","缘","珠","穷","森","枝","竹","沟","催","绳","忆","邦","剩","幸","浆","栏","拥","牙","贮","礼","滤","钠","纹","罢","拍","咱","喊","袖","埃","勤","罚","焦","潜","伍","墨","欲","缝","姓","刊","饱","仿","奖","铝","鬼","丽","跨","默","挖","链","扫","喝","袋","炭","污","幕","诸","弧","励","梅","奶","洁","灾","舟","鉴","苯","讼","抱","毁","懂","寒","智","埔","寄","届","跃","渡","挑","丹","艰","贝","碰","拔","爹","戴","码","梦","芽","熔","赤","渔","哭","敬","颗","奔","铅","仲","虎","稀","妹","乏","珍","申","桌","遵","允","隆","螺","仓","魏","锐","晓","氮","兼","隐","碍","赫","拨","忠","肃","缸","牵","抢","博","巧","壳","兄","杜","讯","诚","碧","祥","柯","页","巡","矩","悲","灌","龄","伦","票","寻","桂","铺","圣","恐","恰","郑","趣","抬","荒","腾","贴","柔","滴","猛","阔","辆","妻","填","撤","储","签","闹","扰","紫","砂","递","戏","吊","陶","伐","喂","疗","瓶","婆","抚","臂","摸","忍","虾","蜡","邻","胸","巩","挤","偶","弃","槽","劲","乳","邓","吉","仁","烂","砖","租","乌","舰","伴","瓜","浅","丙","暂","燥","橡","柳","迷","暖","牌","秧","胆","详","簧","踏","瓷","谱","呆","宾","糊","洛","辉","愤","竞","隙","怒","粘","乃","绪","肩","籍","敏","涂","熙","皆","侦","悬","掘","享","纠","醒","狂","锁","淀","恨","牲","霸","爬","赏","逆","玩","陵","祝","秒","浙","貌","役","彼","悉","鸭","趋","凤","晨","畜","辈","秩","卵","署","梯","炎","滩","棋","驱","筛","峡","冒","啥","寿","译","浸","泉","帽","迟","硅","疆","贷","漏","稿","冠","嫩","胁","芯","牢","叛","蚀","奥","鸣","岭","羊","凭","串","塘","绘","酵","融","盆","锡","庙","筹","冻","辅","摄","袭","筋","拒","僚","旱","钾","鸟","漆","沈","眉","疏","添","棒","穗","硝","韩","逼","扭","侨","凉","挺","碗","栽","炒","杯","患","馏","劝","豪","辽","勃","鸿","旦","吏","拜","狗","埋","辊","掩","饮","搬","骂","辞","勾","扣","估","蒋","绒","雾","丈","朵","姆","拟","宇","辑","陕","雕","偿","蓄","崇","剪","倡","厅","咬","驶","薯","刷","斥","番","赋","奉","佛","浇","漫","曼","扇","钙","桃","扶","仔","返","俗","亏","腔","鞋","棱","覆","框","悄","叔","撞","骗","勘","旺","沸","孤","吐","孟","渠","屈","疾","妙","惜","仰","狠","胀","谐","抛","霉","桑","岗","嘛","衰","盗","渗","脏","赖","涌","甜","曹","阅","肌","哩","厉","烃","纬","毅","昨","伪","症","煮","叹","钉","搭","茎","笼","酷","偷","弓","锥","恒","杰","坑","鼻","翼","纶","叙","狱","逮","罐","络","棚","抑","膨","蔬","寺","骤","穆","冶","枯","册","尸","凸","绅","坯","牺","焰","轰","欣","晋","瘦","御","锭","锦","丧","旬","锻","垄","搜","扑","邀","亭","酯","迈","舒","脆","酶","闲","忧","酚","顽","羽","涨","卸","仗","陪","辟","惩","杭","姚","肚","捉","飘","漂","昆","欺","吾","郎","烷","汁","呵","饰","萧","雅","邮","迁","燕","撒","姻","赴","宴","烦","债","帐","斑","铃","旨","醇","董","饼","雏","姿","拌","傅","腹","妥","揉","贤","拆","歪","葡","胺","丢","浩","徽","昂","垫","挡","览","贪","慰","缴","汪","慌","冯","诺","姜","谊","凶","劣","诬","耀","昏","躺","盈","骑","乔","溪","丛","卢","抹","闷","咨","刮","驾","缆","悟","摘","铒","掷","颇","幻","柄","惠","惨","佳","仇","腊","窝","涤","剑","瞧","堡","泼","葱","罩","霍","捞","胎","苍","滨","俩","捅","湘","砍","霞","邵","萄","疯","淮","遂","熊","粪","烘","宿","档","戈","驳","嫂","裕","徙","箭","捐","肠","撑","晒","辨","殿","莲","摊","搅","酱","屏","疫","哀","蔡","堵","沫","皱","畅","叠","阁","莱","敲","辖","钩","痕","坝","巷","饿","祸","丘","玄","溜","曰","逻","彭","尝","卿","妨","艇","吞","韦","怨","矮","歇"]');
  91313. /***/ }),
  91314. /***/ 4262:
  91315. /***/ ((module) => {
  91316. "use strict";
  91317. module.exports = JSON.parse('["的","一","是","在","不","了","有","和","人","這","中","大","為","上","個","國","我","以","要","他","時","來","用","們","生","到","作","地","於","出","就","分","對","成","會","可","主","發","年","動","同","工","也","能","下","過","子","說","產","種","面","而","方","後","多","定","行","學","法","所","民","得","經","十","三","之","進","著","等","部","度","家","電","力","裡","如","水","化","高","自","二","理","起","小","物","現","實","加","量","都","兩","體","制","機","當","使","點","從","業","本","去","把","性","好","應","開","它","合","還","因","由","其","些","然","前","外","天","政","四","日","那","社","義","事","平","形","相","全","表","間","樣","與","關","各","重","新","線","內","數","正","心","反","你","明","看","原","又","麼","利","比","或","但","質","氣","第","向","道","命","此","變","條","只","沒","結","解","問","意","建","月","公","無","系","軍","很","情","者","最","立","代","想","已","通","並","提","直","題","黨","程","展","五","果","料","象","員","革","位","入","常","文","總","次","品","式","活","設","及","管","特","件","長","求","老","頭","基","資","邊","流","路","級","少","圖","山","統","接","知","較","將","組","見","計","別","她","手","角","期","根","論","運","農","指","幾","九","區","強","放","決","西","被","幹","做","必","戰","先","回","則","任","取","據","處","隊","南","給","色","光","門","即","保","治","北","造","百","規","熱","領","七","海","口","東","導","器","壓","志","世","金","增","爭","濟","階","油","思","術","極","交","受","聯","什","認","六","共","權","收","證","改","清","美","再","採","轉","更","單","風","切","打","白","教","速","花","帶","安","場","身","車","例","真","務","具","萬","每","目","至","達","走","積","示","議","聲","報","鬥","完","類","八","離","華","名","確","才","科","張","信","馬","節","話","米","整","空","元","況","今","集","溫","傳","土","許","步","群","廣","石","記","需","段","研","界","拉","林","律","叫","且","究","觀","越","織","裝","影","算","低","持","音","眾","書","布","复","容","兒","須","際","商","非","驗","連","斷","深","難","近","礦","千","週","委","素","技","備","半","辦","青","省","列","習","響","約","支","般","史","感","勞","便","團","往","酸","歷","市","克","何","除","消","構","府","稱","太","準","精","值","號","率","族","維","劃","選","標","寫","存","候","毛","親","快","效","斯","院","查","江","型","眼","王","按","格","養","易","置","派","層","片","始","卻","專","狀","育","廠","京","識","適","屬","圓","包","火","住","調","滿","縣","局","照","參","紅","細","引","聽","該","鐵","價","嚴","首","底","液","官","德","隨","病","蘇","失","爾","死","講","配","女","黃","推","顯","談","罪","神","藝","呢","席","含","企","望","密","批","營","項","防","舉","球","英","氧","勢","告","李","台","落","木","幫","輪","破","亞","師","圍","注","遠","字","材","排","供","河","態","封","另","施","減","樹","溶","怎","止","案","言","士","均","武","固","葉","魚","波","視","僅","費","緊","愛","左","章","早","朝","害","續","輕","服","試","食","充","兵","源","判","護","司","足","某","練","差","致","板","田","降","黑","犯","負","擊","范","繼","興","似","餘","堅","曲","輸","修","故","城","夫","夠","送","筆","船","佔","右","財","吃","富","春","職","覺","漢","畫","功","巴","跟","雖","雜","飛","檢","吸","助","昇","陽","互","初","創","抗","考","投","壞","策","古","徑","換","未","跑","留","鋼","曾","端","責","站","簡","述","錢","副","盡","帝","射","草","衝","承","獨","令","限","阿","宣","環","雙","請","超","微","讓","控","州","良","軸","找","否","紀","益","依","優","頂","礎","載","倒","房","突","坐","粉","敵","略","客","袁","冷","勝","絕","析","塊","劑","測","絲","協","訴","念","陳","仍","羅","鹽","友","洋","錯","苦","夜","刑","移","頻","逐","靠","混","母","短","皮","終","聚","汽","村","雲","哪","既","距","衛","停","烈","央","察","燒","迅","境","若","印","洲","刻","括","激","孔","搞","甚","室","待","核","校","散","侵","吧","甲","遊","久","菜","味","舊","模","湖","貨","損","預","阻","毫","普","穩","乙","媽","植","息","擴","銀","語","揮","酒","守","拿","序","紙","醫","缺","雨","嗎","針","劉","啊","急","唱","誤","訓","願","審","附","獲","茶","鮮","糧","斤","孩","脫","硫","肥","善","龍","演","父","漸","血","歡","械","掌","歌","沙","剛","攻","謂","盾","討","晚","粒","亂","燃","矛","乎","殺","藥","寧","魯","貴","鐘","煤","讀","班","伯","香","介","迫","句","豐","培","握","蘭","擔","弦","蛋","沉","假","穿","執","答","樂","誰","順","煙","縮","徵","臉","喜","松","腳","困","異","免","背","星","福","買","染","井","概","慢","怕","磁","倍","祖","皇","促","靜","補","評","翻","肉","踐","尼","衣","寬","揚","棉","希","傷","操","垂","秋","宜","氫","套","督","振","架","亮","末","憲","慶","編","牛","觸","映","雷","銷","詩","座","居","抓","裂","胞","呼","娘","景","威","綠","晶","厚","盟","衡","雞","孫","延","危","膠","屋","鄉","臨","陸","顧","掉","呀","燈","歲","措","束","耐","劇","玉","趙","跳","哥","季","課","凱","胡","額","款","紹","卷","齊","偉","蒸","殖","永","宗","苗","川","爐","岩","弱","零","楊","奏","沿","露","桿","探","滑","鎮","飯","濃","航","懷","趕","庫","奪","伊","靈","稅","途","滅","賽","歸","召","鼓","播","盤","裁","險","康","唯","錄","菌","純","借","糖","蓋","橫","符","私","努","堂","域","槍","潤","幅","哈","竟","熟","蟲","澤","腦","壤","碳","歐","遍","側","寨","敢","徹","慮","斜","薄","庭","納","彈","飼","伸","折","麥","濕","暗","荷","瓦","塞","床","築","惡","戶","訪","塔","奇","透","梁","刀","旋","跡","卡","氯","遇","份","毒","泥","退","洗","擺","灰","彩","賣","耗","夏","擇","忙","銅","獻","硬","予","繁","圈","雪","函","亦","抽","篇","陣","陰","丁","尺","追","堆","雄","迎","泛","爸","樓","避","謀","噸","野","豬","旗","累","偏","典","館","索","秦","脂","潮","爺","豆","忽","托","驚","塑","遺","愈","朱","替","纖","粗","傾","尚","痛","楚","謝","奮","購","磨","君","池","旁","碎","骨","監","捕","弟","暴","割","貫","殊","釋","詞","亡","壁","頓","寶","午","塵","聞","揭","炮","殘","冬","橋","婦","警","綜","招","吳","付","浮","遭","徐","您","搖","谷","贊","箱","隔","訂","男","吹","園","紛","唐","敗","宋","玻","巨","耕","坦","榮","閉","灣","鍵","凡","駐","鍋","救","恩","剝","凝","鹼","齒","截","煉","麻","紡","禁","廢","盛","版","緩","淨","睛","昌","婚","涉","筒","嘴","插","岸","朗","莊","街","藏","姑","貿","腐","奴","啦","慣","乘","夥","恢","勻","紗","扎","辯","耳","彪","臣","億","璃","抵","脈","秀","薩","俄","網","舞","店","噴","縱","寸","汗","掛","洪","賀","閃","柬","爆","烯","津","稻","牆","軟","勇","像","滾","厘","蒙","芳","肯","坡","柱","盪","腿","儀","旅","尾","軋","冰","貢","登","黎","削","鑽","勒","逃","障","氨","郭","峰","幣","港","伏","軌","畝","畢","擦","莫","刺","浪","秘","援","株","健","售","股","島","甘","泡","睡","童","鑄","湯","閥","休","匯","舍","牧","繞","炸","哲","磷","績","朋","淡","尖","啟","陷","柴","呈","徒","顏","淚","稍","忘","泵","藍","拖","洞","授","鏡","辛","壯","鋒","貧","虛","彎","摩","泰","幼","廷","尊","窗","綱","弄","隸","疑","氏","宮","姐","震","瑞","怪","尤","琴","循","描","膜","違","夾","腰","緣","珠","窮","森","枝","竹","溝","催","繩","憶","邦","剩","幸","漿","欄","擁","牙","貯","禮","濾","鈉","紋","罷","拍","咱","喊","袖","埃","勤","罰","焦","潛","伍","墨","欲","縫","姓","刊","飽","仿","獎","鋁","鬼","麗","跨","默","挖","鏈","掃","喝","袋","炭","污","幕","諸","弧","勵","梅","奶","潔","災","舟","鑑","苯","訟","抱","毀","懂","寒","智","埔","寄","屆","躍","渡","挑","丹","艱","貝","碰","拔","爹","戴","碼","夢","芽","熔","赤","漁","哭","敬","顆","奔","鉛","仲","虎","稀","妹","乏","珍","申","桌","遵","允","隆","螺","倉","魏","銳","曉","氮","兼","隱","礙","赫","撥","忠","肅","缸","牽","搶","博","巧","殼","兄","杜","訊","誠","碧","祥","柯","頁","巡","矩","悲","灌","齡","倫","票","尋","桂","鋪","聖","恐","恰","鄭","趣","抬","荒","騰","貼","柔","滴","猛","闊","輛","妻","填","撤","儲","簽","鬧","擾","紫","砂","遞","戲","吊","陶","伐","餵","療","瓶","婆","撫","臂","摸","忍","蝦","蠟","鄰","胸","鞏","擠","偶","棄","槽","勁","乳","鄧","吉","仁","爛","磚","租","烏","艦","伴","瓜","淺","丙","暫","燥","橡","柳","迷","暖","牌","秧","膽","詳","簧","踏","瓷","譜","呆","賓","糊","洛","輝","憤","競","隙","怒","粘","乃","緒","肩","籍","敏","塗","熙","皆","偵","懸","掘","享","糾","醒","狂","鎖","淀","恨","牲","霸","爬","賞","逆","玩","陵","祝","秒","浙","貌","役","彼","悉","鴨","趨","鳳","晨","畜","輩","秩","卵","署","梯","炎","灘","棋","驅","篩","峽","冒","啥","壽","譯","浸","泉","帽","遲","矽","疆","貸","漏","稿","冠","嫩","脅","芯","牢","叛","蝕","奧","鳴","嶺","羊","憑","串","塘","繪","酵","融","盆","錫","廟","籌","凍","輔","攝","襲","筋","拒","僚","旱","鉀","鳥","漆","沈","眉","疏","添","棒","穗","硝","韓","逼","扭","僑","涼","挺","碗","栽","炒","杯","患","餾","勸","豪","遼","勃","鴻","旦","吏","拜","狗","埋","輥","掩","飲","搬","罵","辭","勾","扣","估","蔣","絨","霧","丈","朵","姆","擬","宇","輯","陝","雕","償","蓄","崇","剪","倡","廳","咬","駛","薯","刷","斥","番","賦","奉","佛","澆","漫","曼","扇","鈣","桃","扶","仔","返","俗","虧","腔","鞋","棱","覆","框","悄","叔","撞","騙","勘","旺","沸","孤","吐","孟","渠","屈","疾","妙","惜","仰","狠","脹","諧","拋","黴","桑","崗","嘛","衰","盜","滲","臟","賴","湧","甜","曹","閱","肌","哩","厲","烴","緯","毅","昨","偽","症","煮","嘆","釘","搭","莖","籠","酷","偷","弓","錐","恆","傑","坑","鼻","翼","綸","敘","獄","逮","罐","絡","棚","抑","膨","蔬","寺","驟","穆","冶","枯","冊","屍","凸","紳","坯","犧","焰","轟","欣","晉","瘦","禦","錠","錦","喪","旬","鍛","壟","搜","撲","邀","亭","酯","邁","舒","脆","酶","閒","憂","酚","頑","羽","漲","卸","仗","陪","闢","懲","杭","姚","肚","捉","飄","漂","昆","欺","吾","郎","烷","汁","呵","飾","蕭","雅","郵","遷","燕","撒","姻","赴","宴","煩","債","帳","斑","鈴","旨","醇","董","餅","雛","姿","拌","傅","腹","妥","揉","賢","拆","歪","葡","胺","丟","浩","徽","昂","墊","擋","覽","貪","慰","繳","汪","慌","馮","諾","姜","誼","兇","劣","誣","耀","昏","躺","盈","騎","喬","溪","叢","盧","抹","悶","諮","刮","駕","纜","悟","摘","鉺","擲","頗","幻","柄","惠","慘","佳","仇","臘","窩","滌","劍","瞧","堡","潑","蔥","罩","霍","撈","胎","蒼","濱","倆","捅","湘","砍","霞","邵","萄","瘋","淮","遂","熊","糞","烘","宿","檔","戈","駁","嫂","裕","徙","箭","捐","腸","撐","曬","辨","殿","蓮","攤","攪","醬","屏","疫","哀","蔡","堵","沫","皺","暢","疊","閣","萊","敲","轄","鉤","痕","壩","巷","餓","禍","丘","玄","溜","曰","邏","彭","嘗","卿","妨","艇","吞","韋","怨","矮","歇"]');
  91318. /***/ }),
  91319. /***/ 40032:
  91320. /***/ ((module) => {
  91321. "use strict";
  91322. module.exports = JSON.parse('["abdikace","abeceda","adresa","agrese","akce","aktovka","alej","alkohol","amputace","ananas","andulka","anekdota","anketa","antika","anulovat","archa","arogance","asfalt","asistent","aspirace","astma","astronom","atlas","atletika","atol","autobus","azyl","babka","bachor","bacil","baculka","badatel","bageta","bagr","bahno","bakterie","balada","baletka","balkon","balonek","balvan","balza","bambus","bankomat","barbar","baret","barman","baroko","barva","baterka","batoh","bavlna","bazalka","bazilika","bazuka","bedna","beran","beseda","bestie","beton","bezinka","bezmoc","beztak","bicykl","bidlo","biftek","bikiny","bilance","biograf","biolog","bitva","bizon","blahobyt","blatouch","blecha","bledule","blesk","blikat","blizna","blokovat","bloudit","blud","bobek","bobr","bodlina","bodnout","bohatost","bojkot","bojovat","bokorys","bolest","borec","borovice","bota","boubel","bouchat","bouda","boule","bourat","boxer","bradavka","brambora","branka","bratr","brepta","briketa","brko","brloh","bronz","broskev","brunetka","brusinka","brzda","brzy","bublina","bubnovat","buchta","buditel","budka","budova","bufet","bujarost","bukvice","buldok","bulva","bunda","bunkr","burza","butik","buvol","buzola","bydlet","bylina","bytovka","bzukot","capart","carevna","cedr","cedule","cejch","cejn","cela","celer","celkem","celnice","cenina","cennost","cenovka","centrum","cenzor","cestopis","cetka","chalupa","chapadlo","charita","chata","chechtat","chemie","chichot","chirurg","chlad","chleba","chlubit","chmel","chmura","chobot","chochol","chodba","cholera","chomout","chopit","choroba","chov","chrapot","chrlit","chrt","chrup","chtivost","chudina","chutnat","chvat","chvilka","chvost","chyba","chystat","chytit","cibule","cigareta","cihelna","cihla","cinkot","cirkus","cisterna","citace","citrus","cizinec","cizost","clona","cokoliv","couvat","ctitel","ctnost","cudnost","cuketa","cukr","cupot","cvaknout","cval","cvik","cvrkot","cyklista","daleko","dareba","datel","datum","dcera","debata","dechovka","decibel","deficit","deflace","dekl","dekret","demokrat","deprese","derby","deska","detektiv","dikobraz","diktovat","dioda","diplom","disk","displej","divadlo","divoch","dlaha","dlouho","dluhopis","dnes","dobro","dobytek","docent","dochutit","dodnes","dohled","dohoda","dohra","dojem","dojnice","doklad","dokola","doktor","dokument","dolar","doleva","dolina","doma","dominant","domluvit","domov","donutit","dopad","dopis","doplnit","doposud","doprovod","dopustit","dorazit","dorost","dort","dosah","doslov","dostatek","dosud","dosyta","dotaz","dotek","dotknout","doufat","doutnat","dovozce","dozadu","doznat","dozorce","drahota","drak","dramatik","dravec","draze","drdol","drobnost","drogerie","drozd","drsnost","drtit","drzost","duben","duchovno","dudek","duha","duhovka","dusit","dusno","dutost","dvojice","dvorec","dynamit","ekolog","ekonomie","elektron","elipsa","email","emise","emoce","empatie","epizoda","epocha","epopej","epos","esej","esence","eskorta","eskymo","etiketa","euforie","evoluce","exekuce","exkurze","expedice","exploze","export","extrakt","facka","fajfka","fakulta","fanatik","fantazie","farmacie","favorit","fazole","federace","fejeton","fenka","fialka","figurant","filozof","filtr","finance","finta","fixace","fjord","flanel","flirt","flotila","fond","fosfor","fotbal","fotka","foton","frakce","freska","fronta","fukar","funkce","fyzika","galeje","garant","genetika","geolog","gilotina","glazura","glejt","golem","golfista","gotika","graf","gramofon","granule","grep","gril","grog","groteska","guma","hadice","hadr","hala","halenka","hanba","hanopis","harfa","harpuna","havran","hebkost","hejkal","hejno","hejtman","hektar","helma","hematom","herec","herna","heslo","hezky","historik","hladovka","hlasivky","hlava","hledat","hlen","hlodavec","hloh","hloupost","hltat","hlubina","hluchota","hmat","hmota","hmyz","hnis","hnojivo","hnout","hoblina","hoboj","hoch","hodiny","hodlat","hodnota","hodovat","hojnost","hokej","holinka","holka","holub","homole","honitba","honorace","horal","horda","horizont","horko","horlivec","hormon","hornina","horoskop","horstvo","hospoda","hostina","hotovost","houba","houf","houpat","houska","hovor","hradba","hranice","hravost","hrazda","hrbolek","hrdina","hrdlo","hrdost","hrnek","hrobka","hromada","hrot","hrouda","hrozen","hrstka","hrubost","hryzat","hubenost","hubnout","hudba","hukot","humr","husita","hustota","hvozd","hybnost","hydrant","hygiena","hymna","hysterik","idylka","ihned","ikona","iluze","imunita","infekce","inflace","inkaso","inovace","inspekce","internet","invalida","investor","inzerce","ironie","jablko","jachta","jahoda","jakmile","jakost","jalovec","jantar","jarmark","jaro","jasan","jasno","jatka","javor","jazyk","jedinec","jedle","jednatel","jehlan","jekot","jelen","jelito","jemnost","jenom","jepice","jeseter","jevit","jezdec","jezero","jinak","jindy","jinoch","jiskra","jistota","jitrnice","jizva","jmenovat","jogurt","jurta","kabaret","kabel","kabinet","kachna","kadet","kadidlo","kahan","kajak","kajuta","kakao","kaktus","kalamita","kalhoty","kalibr","kalnost","kamera","kamkoliv","kamna","kanibal","kanoe","kantor","kapalina","kapela","kapitola","kapka","kaple","kapota","kapr","kapusta","kapybara","karamel","karotka","karton","kasa","katalog","katedra","kauce","kauza","kavalec","kazajka","kazeta","kazivost","kdekoliv","kdesi","kedluben","kemp","keramika","kino","klacek","kladivo","klam","klapot","klasika","klaun","klec","klenba","klepat","klesnout","klid","klima","klisna","klobouk","klokan","klopa","kloub","klubovna","klusat","kluzkost","kmen","kmitat","kmotr","kniha","knot","koalice","koberec","kobka","kobliha","kobyla","kocour","kohout","kojenec","kokos","koktejl","kolaps","koleda","kolize","kolo","komando","kometa","komik","komnata","komora","kompas","komunita","konat","koncept","kondice","konec","konfese","kongres","konina","konkurs","kontakt","konzerva","kopanec","kopie","kopnout","koprovka","korbel","korektor","kormidlo","koroptev","korpus","koruna","koryto","korzet","kosatec","kostka","kotel","kotleta","kotoul","koukat","koupelna","kousek","kouzlo","kovboj","koza","kozoroh","krabice","krach","krajina","kralovat","krasopis","kravata","kredit","krejcar","kresba","kreveta","kriket","kritik","krize","krkavec","krmelec","krmivo","krocan","krok","kronika","kropit","kroupa","krovka","krtek","kruhadlo","krupice","krutost","krvinka","krychle","krypta","krystal","kryt","kudlanka","kufr","kujnost","kukla","kulajda","kulich","kulka","kulomet","kultura","kuna","kupodivu","kurt","kurzor","kutil","kvalita","kvasinka","kvestor","kynolog","kyselina","kytara","kytice","kytka","kytovec","kyvadlo","labrador","lachtan","ladnost","laik","lakomec","lamela","lampa","lanovka","lasice","laso","lastura","latinka","lavina","lebka","leckdy","leden","lednice","ledovka","ledvina","legenda","legie","legrace","lehce","lehkost","lehnout","lektvar","lenochod","lentilka","lepenka","lepidlo","letadlo","letec","letmo","letokruh","levhart","levitace","levobok","libra","lichotka","lidojed","lidskost","lihovina","lijavec","lilek","limetka","linie","linka","linoleum","listopad","litina","litovat","lobista","lodivod","logika","logoped","lokalita","loket","lomcovat","lopata","lopuch","lord","losos","lotr","loudal","louh","louka","louskat","lovec","lstivost","lucerna","lucifer","lump","lusk","lustrace","lvice","lyra","lyrika","lysina","madam","madlo","magistr","mahagon","majetek","majitel","majorita","makak","makovice","makrela","malba","malina","malovat","malvice","maminka","mandle","manko","marnost","masakr","maskot","masopust","matice","matrika","maturita","mazanec","mazivo","mazlit","mazurka","mdloba","mechanik","meditace","medovina","melasa","meloun","mentolka","metla","metoda","metr","mezera","migrace","mihnout","mihule","mikina","mikrofon","milenec","milimetr","milost","mimika","mincovna","minibar","minomet","minulost","miska","mistr","mixovat","mladost","mlha","mlhovina","mlok","mlsat","mluvit","mnich","mnohem","mobil","mocnost","modelka","modlitba","mohyla","mokro","molekula","momentka","monarcha","monokl","monstrum","montovat","monzun","mosaz","moskyt","most","motivace","motorka","motyka","moucha","moudrost","mozaika","mozek","mozol","mramor","mravenec","mrkev","mrtvola","mrzet","mrzutost","mstitel","mudrc","muflon","mulat","mumie","munice","muset","mutace","muzeum","muzikant","myslivec","mzda","nabourat","nachytat","nadace","nadbytek","nadhoz","nadobro","nadpis","nahlas","nahnat","nahodile","nahradit","naivita","najednou","najisto","najmout","naklonit","nakonec","nakrmit","nalevo","namazat","namluvit","nanometr","naoko","naopak","naostro","napadat","napevno","naplnit","napnout","naposled","naprosto","narodit","naruby","narychlo","nasadit","nasekat","naslepo","nastat","natolik","navenek","navrch","navzdory","nazvat","nebe","nechat","necky","nedaleko","nedbat","neduh","negace","nehet","nehoda","nejen","nejprve","neklid","nelibost","nemilost","nemoc","neochota","neonka","nepokoj","nerost","nerv","nesmysl","nesoulad","netvor","neuron","nevina","nezvykle","nicota","nijak","nikam","nikdy","nikl","nikterak","nitro","nocleh","nohavice","nominace","nora","norek","nositel","nosnost","nouze","noviny","novota","nozdra","nuda","nudle","nuget","nutit","nutnost","nutrie","nymfa","obal","obarvit","obava","obdiv","obec","obehnat","obejmout","obezita","obhajoba","obilnice","objasnit","objekt","obklopit","oblast","oblek","obliba","obloha","obluda","obnos","obohatit","obojek","obout","obrazec","obrna","obruba","obrys","obsah","obsluha","obstarat","obuv","obvaz","obvinit","obvod","obvykle","obyvatel","obzor","ocas","ocel","ocenit","ochladit","ochota","ochrana","ocitnout","odboj","odbyt","odchod","odcizit","odebrat","odeslat","odevzdat","odezva","odhadce","odhodit","odjet","odjinud","odkaz","odkoupit","odliv","odluka","odmlka","odolnost","odpad","odpis","odplout","odpor","odpustit","odpykat","odrazka","odsoudit","odstup","odsun","odtok","odtud","odvaha","odveta","odvolat","odvracet","odznak","ofina","ofsajd","ohlas","ohnisko","ohrada","ohrozit","ohryzek","okap","okenice","oklika","okno","okouzlit","okovy","okrasa","okres","okrsek","okruh","okupant","okurka","okusit","olejnina","olizovat","omak","omeleta","omezit","omladina","omlouvat","omluva","omyl","onehdy","opakovat","opasek","operace","opice","opilost","opisovat","opora","opozice","opravdu","oproti","orbital","orchestr","orgie","orlice","orloj","ortel","osada","oschnout","osika","osivo","oslava","oslepit","oslnit","oslovit","osnova","osoba","osolit","ospalec","osten","ostraha","ostuda","ostych","osvojit","oteplit","otisk","otop","otrhat","otrlost","otrok","otruby","otvor","ovanout","ovar","oves","ovlivnit","ovoce","oxid","ozdoba","pachatel","pacient","padouch","pahorek","pakt","palanda","palec","palivo","paluba","pamflet","pamlsek","panenka","panika","panna","panovat","panstvo","pantofle","paprika","parketa","parodie","parta","paruka","paryba","paseka","pasivita","pastelka","patent","patrona","pavouk","pazneht","pazourek","pecka","pedagog","pejsek","peklo","peloton","penalta","pendrek","penze","periskop","pero","pestrost","petarda","petice","petrolej","pevnina","pexeso","pianista","piha","pijavice","pikle","piknik","pilina","pilnost","pilulka","pinzeta","pipeta","pisatel","pistole","pitevna","pivnice","pivovar","placenta","plakat","plamen","planeta","plastika","platit","plavidlo","plaz","plech","plemeno","plenta","ples","pletivo","plevel","plivat","plnit","plno","plocha","plodina","plomba","plout","pluk","plyn","pobavit","pobyt","pochod","pocit","poctivec","podat","podcenit","podepsat","podhled","podivit","podklad","podmanit","podnik","podoba","podpora","podraz","podstata","podvod","podzim","poezie","pohanka","pohnutka","pohovor","pohroma","pohyb","pointa","pojistka","pojmout","pokazit","pokles","pokoj","pokrok","pokuta","pokyn","poledne","polibek","polknout","poloha","polynom","pomalu","pominout","pomlka","pomoc","pomsta","pomyslet","ponechat","ponorka","ponurost","popadat","popel","popisek","poplach","poprosit","popsat","popud","poradce","porce","porod","porucha","poryv","posadit","posed","posila","poskok","poslanec","posoudit","pospolu","postava","posudek","posyp","potah","potkan","potlesk","potomek","potrava","potupa","potvora","poukaz","pouto","pouzdro","povaha","povidla","povlak","povoz","povrch","povstat","povyk","povzdech","pozdrav","pozemek","poznatek","pozor","pozvat","pracovat","prahory","praktika","prales","praotec","praporek","prase","pravda","princip","prkno","probudit","procento","prodej","profese","prohra","projekt","prolomit","promile","pronikat","propad","prorok","prosba","proton","proutek","provaz","prskavka","prsten","prudkost","prut","prvek","prvohory","psanec","psovod","pstruh","ptactvo","puberta","puch","pudl","pukavec","puklina","pukrle","pult","pumpa","punc","pupen","pusa","pusinka","pustina","putovat","putyka","pyramida","pysk","pytel","racek","rachot","radiace","radnice","radon","raft","ragby","raketa","rakovina","rameno","rampouch","rande","rarach","rarita","rasovna","rastr","ratolest","razance","razidlo","reagovat","reakce","recept","redaktor","referent","reflex","rejnok","reklama","rekord","rekrut","rektor","reputace","revize","revma","revolver","rezerva","riskovat","riziko","robotika","rodokmen","rohovka","rokle","rokoko","romaneto","ropovod","ropucha","rorejs","rosol","rostlina","rotmistr","rotoped","rotunda","roubenka","roucho","roup","roura","rovina","rovnice","rozbor","rozchod","rozdat","rozeznat","rozhodce","rozinka","rozjezd","rozkaz","rozloha","rozmar","rozpad","rozruch","rozsah","roztok","rozum","rozvod","rubrika","ruchadlo","rukavice","rukopis","ryba","rybolov","rychlost","rydlo","rypadlo","rytina","ryzost","sadista","sahat","sako","samec","samizdat","samota","sanitka","sardinka","sasanka","satelit","sazba","sazenice","sbor","schovat","sebranka","secese","sedadlo","sediment","sedlo","sehnat","sejmout","sekera","sekta","sekunda","sekvoje","semeno","seno","servis","sesadit","seshora","seskok","seslat","sestra","sesuv","sesypat","setba","setina","setkat","setnout","setrvat","sever","seznam","shoda","shrnout","sifon","silnice","sirka","sirotek","sirup","situace","skafandr","skalisko","skanzen","skaut","skeptik","skica","skladba","sklenice","sklo","skluz","skoba","skokan","skoro","skripta","skrz","skupina","skvost","skvrna","slabika","sladidlo","slanina","slast","slavnost","sledovat","slepec","sleva","slezina","slib","slina","sliznice","slon","sloupek","slovo","sluch","sluha","slunce","slupka","slza","smaragd","smetana","smilstvo","smlouva","smog","smrad","smrk","smrtka","smutek","smysl","snad","snaha","snob","sobota","socha","sodovka","sokol","sopka","sotva","souboj","soucit","soudce","souhlas","soulad","soumrak","souprava","soused","soutok","souviset","spalovna","spasitel","spis","splav","spodek","spojenec","spolu","sponzor","spornost","spousta","sprcha","spustit","sranda","sraz","srdce","srna","srnec","srovnat","srpen","srst","srub","stanice","starosta","statika","stavba","stehno","stezka","stodola","stolek","stopa","storno","stoupat","strach","stres","strhnout","strom","struna","studna","stupnice","stvol","styk","subjekt","subtropy","suchar","sudost","sukno","sundat","sunout","surikata","surovina","svah","svalstvo","svetr","svatba","svazek","svisle","svitek","svoboda","svodidlo","svorka","svrab","sykavka","sykot","synek","synovec","sypat","sypkost","syrovost","sysel","sytost","tabletka","tabule","tahoun","tajemno","tajfun","tajga","tajit","tajnost","taktika","tamhle","tampon","tancovat","tanec","tanker","tapeta","tavenina","tazatel","technika","tehdy","tekutina","telefon","temnota","tendence","tenista","tenor","teplota","tepna","teprve","terapie","termoska","textil","ticho","tiskopis","titulek","tkadlec","tkanina","tlapka","tleskat","tlukot","tlupa","tmel","toaleta","topinka","topol","torzo","touha","toulec","tradice","traktor","tramp","trasa","traverza","trefit","trest","trezor","trhavina","trhlina","trochu","trojice","troska","trouba","trpce","trpitel","trpkost","trubec","truchlit","truhlice","trus","trvat","tudy","tuhnout","tuhost","tundra","turista","turnaj","tuzemsko","tvaroh","tvorba","tvrdost","tvrz","tygr","tykev","ubohost","uboze","ubrat","ubrousek","ubrus","ubytovna","ucho","uctivost","udivit","uhradit","ujednat","ujistit","ujmout","ukazatel","uklidnit","uklonit","ukotvit","ukrojit","ulice","ulita","ulovit","umyvadlo","unavit","uniforma","uniknout","upadnout","uplatnit","uplynout","upoutat","upravit","uran","urazit","usednout","usilovat","usmrtit","usnadnit","usnout","usoudit","ustlat","ustrnout","utahovat","utkat","utlumit","utonout","utopenec","utrousit","uvalit","uvolnit","uvozovka","uzdravit","uzel","uzenina","uzlina","uznat","vagon","valcha","valoun","vana","vandal","vanilka","varan","varhany","varovat","vcelku","vchod","vdova","vedro","vegetace","vejce","velbloud","veletrh","velitel","velmoc","velryba","venkov","veranda","verze","veselka","veskrze","vesnice","vespodu","vesta","veterina","veverka","vibrace","vichr","videohra","vidina","vidle","vila","vinice","viset","vitalita","vize","vizitka","vjezd","vklad","vkus","vlajka","vlak","vlasec","vlevo","vlhkost","vliv","vlnovka","vloupat","vnucovat","vnuk","voda","vodivost","vodoznak","vodstvo","vojensky","vojna","vojsko","volant","volba","volit","volno","voskovka","vozidlo","vozovna","vpravo","vrabec","vracet","vrah","vrata","vrba","vrcholek","vrhat","vrstva","vrtule","vsadit","vstoupit","vstup","vtip","vybavit","vybrat","vychovat","vydat","vydra","vyfotit","vyhledat","vyhnout","vyhodit","vyhradit","vyhubit","vyjasnit","vyjet","vyjmout","vyklopit","vykonat","vylekat","vymazat","vymezit","vymizet","vymyslet","vynechat","vynikat","vynutit","vypadat","vyplatit","vypravit","vypustit","vyrazit","vyrovnat","vyrvat","vyslovit","vysoko","vystavit","vysunout","vysypat","vytasit","vytesat","vytratit","vyvinout","vyvolat","vyvrhel","vyzdobit","vyznat","vzadu","vzbudit","vzchopit","vzdor","vzduch","vzdychat","vzestup","vzhledem","vzkaz","vzlykat","vznik","vzorek","vzpoura","vztah","vztek","xylofon","zabrat","zabydlet","zachovat","zadarmo","zadusit","zafoukat","zahltit","zahodit","zahrada","zahynout","zajatec","zajet","zajistit","zaklepat","zakoupit","zalepit","zamezit","zamotat","zamyslet","zanechat","zanikat","zaplatit","zapojit","zapsat","zarazit","zastavit","zasunout","zatajit","zatemnit","zatknout","zaujmout","zavalit","zavelet","zavinit","zavolat","zavrtat","zazvonit","zbavit","zbrusu","zbudovat","zbytek","zdaleka","zdarma","zdatnost","zdivo","zdobit","zdroj","zdvih","zdymadlo","zelenina","zeman","zemina","zeptat","zezadu","zezdola","zhatit","zhltnout","zhluboka","zhotovit","zhruba","zima","zimnice","zjemnit","zklamat","zkoumat","zkratka","zkumavka","zlato","zlehka","zloba","zlom","zlost","zlozvyk","zmapovat","zmar","zmatek","zmije","zmizet","zmocnit","zmodrat","zmrzlina","zmutovat","znak","znalost","znamenat","znovu","zobrazit","zotavit","zoubek","zoufale","zplodit","zpomalit","zprava","zprostit","zprudka","zprvu","zrada","zranit","zrcadlo","zrnitost","zrno","zrovna","zrychlit","zrzavost","zticha","ztratit","zubovina","zubr","zvednout","zvenku","zvesela","zvon","zvrat","zvukovod","zvyk"]');
  91323. /***/ }),
  91324. /***/ 24573:
  91325. /***/ ((module) => {
  91326. "use strict";
  91327. module.exports = JSON.parse('["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"]');
  91328. /***/ }),
  91329. /***/ 11848:
  91330. /***/ ((module) => {
  91331. "use strict";
  91332. module.exports = JSON.parse('["abaisser","abandon","abdiquer","abeille","abolir","aborder","aboutir","aboyer","abrasif","abreuver","abriter","abroger","abrupt","absence","absolu","absurde","abusif","abyssal","académie","acajou","acarien","accabler","accepter","acclamer","accolade","accroche","accuser","acerbe","achat","acheter","aciduler","acier","acompte","acquérir","acronyme","acteur","actif","actuel","adepte","adéquat","adhésif","adjectif","adjuger","admettre","admirer","adopter","adorer","adoucir","adresse","adroit","adulte","adverbe","aérer","aéronef","affaire","affecter","affiche","affreux","affubler","agacer","agencer","agile","agiter","agrafer","agréable","agrume","aider","aiguille","ailier","aimable","aisance","ajouter","ajuster","alarmer","alchimie","alerte","algèbre","algue","aliéner","aliment","alléger","alliage","allouer","allumer","alourdir","alpaga","altesse","alvéole","amateur","ambigu","ambre","aménager","amertume","amidon","amiral","amorcer","amour","amovible","amphibie","ampleur","amusant","analyse","anaphore","anarchie","anatomie","ancien","anéantir","angle","angoisse","anguleux","animal","annexer","annonce","annuel","anodin","anomalie","anonyme","anormal","antenne","antidote","anxieux","apaiser","apéritif","aplanir","apologie","appareil","appeler","apporter","appuyer","aquarium","aqueduc","arbitre","arbuste","ardeur","ardoise","argent","arlequin","armature","armement","armoire","armure","arpenter","arracher","arriver","arroser","arsenic","artériel","article","aspect","asphalte","aspirer","assaut","asservir","assiette","associer","assurer","asticot","astre","astuce","atelier","atome","atrium","atroce","attaque","attentif","attirer","attraper","aubaine","auberge","audace","audible","augurer","aurore","automne","autruche","avaler","avancer","avarice","avenir","averse","aveugle","aviateur","avide","avion","aviser","avoine","avouer","avril","axial","axiome","badge","bafouer","bagage","baguette","baignade","balancer","balcon","baleine","balisage","bambin","bancaire","bandage","banlieue","bannière","banquier","barbier","baril","baron","barque","barrage","bassin","bastion","bataille","bateau","batterie","baudrier","bavarder","belette","bélier","belote","bénéfice","berceau","berger","berline","bermuda","besace","besogne","bétail","beurre","biberon","bicycle","bidule","bijou","bilan","bilingue","billard","binaire","biologie","biopsie","biotype","biscuit","bison","bistouri","bitume","bizarre","blafard","blague","blanchir","blessant","blinder","blond","bloquer","blouson","bobard","bobine","boire","boiser","bolide","bonbon","bondir","bonheur","bonifier","bonus","bordure","borne","botte","boucle","boueux","bougie","boulon","bouquin","bourse","boussole","boutique","boxeur","branche","brasier","brave","brebis","brèche","breuvage","bricoler","brigade","brillant","brioche","brique","brochure","broder","bronzer","brousse","broyeur","brume","brusque","brutal","bruyant","buffle","buisson","bulletin","bureau","burin","bustier","butiner","butoir","buvable","buvette","cabanon","cabine","cachette","cadeau","cadre","caféine","caillou","caisson","calculer","calepin","calibre","calmer","calomnie","calvaire","camarade","caméra","camion","campagne","canal","caneton","canon","cantine","canular","capable","caporal","caprice","capsule","capter","capuche","carabine","carbone","caresser","caribou","carnage","carotte","carreau","carton","cascade","casier","casque","cassure","causer","caution","cavalier","caverne","caviar","cédille","ceinture","céleste","cellule","cendrier","censurer","central","cercle","cérébral","cerise","cerner","cerveau","cesser","chagrin","chaise","chaleur","chambre","chance","chapitre","charbon","chasseur","chaton","chausson","chavirer","chemise","chenille","chéquier","chercher","cheval","chien","chiffre","chignon","chimère","chiot","chlorure","chocolat","choisir","chose","chouette","chrome","chute","cigare","cigogne","cimenter","cinéma","cintrer","circuler","cirer","cirque","citerne","citoyen","citron","civil","clairon","clameur","claquer","classe","clavier","client","cligner","climat","clivage","cloche","clonage","cloporte","cobalt","cobra","cocasse","cocotier","coder","codifier","coffre","cogner","cohésion","coiffer","coincer","colère","colibri","colline","colmater","colonel","combat","comédie","commande","compact","concert","conduire","confier","congeler","connoter","consonne","contact","convexe","copain","copie","corail","corbeau","cordage","corniche","corpus","correct","cortège","cosmique","costume","coton","coude","coupure","courage","couteau","couvrir","coyote","crabe","crainte","cravate","crayon","créature","créditer","crémeux","creuser","crevette","cribler","crier","cristal","critère","croire","croquer","crotale","crucial","cruel","crypter","cubique","cueillir","cuillère","cuisine","cuivre","culminer","cultiver","cumuler","cupide","curatif","curseur","cyanure","cycle","cylindre","cynique","daigner","damier","danger","danseur","dauphin","débattre","débiter","déborder","débrider","débutant","décaler","décembre","déchirer","décider","déclarer","décorer","décrire","décupler","dédale","déductif","déesse","défensif","défiler","défrayer","dégager","dégivrer","déglutir","dégrafer","déjeuner","délice","déloger","demander","demeurer","démolir","dénicher","dénouer","dentelle","dénuder","départ","dépenser","déphaser","déplacer","déposer","déranger","dérober","désastre","descente","désert","désigner","désobéir","dessiner","destrier","détacher","détester","détourer","détresse","devancer","devenir","deviner","devoir","diable","dialogue","diamant","dicter","différer","digérer","digital","digne","diluer","dimanche","diminuer","dioxyde","directif","diriger","discuter","disposer","dissiper","distance","divertir","diviser","docile","docteur","dogme","doigt","domaine","domicile","dompter","donateur","donjon","donner","dopamine","dortoir","dorure","dosage","doseur","dossier","dotation","douanier","double","douceur","douter","doyen","dragon","draper","dresser","dribbler","droiture","duperie","duplexe","durable","durcir","dynastie","éblouir","écarter","écharpe","échelle","éclairer","éclipse","éclore","écluse","école","économie","écorce","écouter","écraser","écrémer","écrivain","écrou","écume","écureuil","édifier","éduquer","effacer","effectif","effigie","effort","effrayer","effusion","égaliser","égarer","éjecter","élaborer","élargir","électron","élégant","éléphant","élève","éligible","élitisme","éloge","élucider","éluder","emballer","embellir","embryon","émeraude","émission","emmener","émotion","émouvoir","empereur","employer","emporter","emprise","émulsion","encadrer","enchère","enclave","encoche","endiguer","endosser","endroit","enduire","énergie","enfance","enfermer","enfouir","engager","engin","englober","énigme","enjamber","enjeu","enlever","ennemi","ennuyeux","enrichir","enrobage","enseigne","entasser","entendre","entier","entourer","entraver","énumérer","envahir","enviable","envoyer","enzyme","éolien","épaissir","épargne","épatant","épaule","épicerie","épidémie","épier","épilogue","épine","épisode","épitaphe","époque","épreuve","éprouver","épuisant","équerre","équipe","ériger","érosion","erreur","éruption","escalier","espadon","espèce","espiègle","espoir","esprit","esquiver","essayer","essence","essieu","essorer","estime","estomac","estrade","étagère","étaler","étanche","étatique","éteindre","étendoir","éternel","éthanol","éthique","ethnie","étirer","étoffer","étoile","étonnant","étourdir","étrange","étroit","étude","euphorie","évaluer","évasion","éventail","évidence","éviter","évolutif","évoquer","exact","exagérer","exaucer","exceller","excitant","exclusif","excuse","exécuter","exemple","exercer","exhaler","exhorter","exigence","exiler","exister","exotique","expédier","explorer","exposer","exprimer","exquis","extensif","extraire","exulter","fable","fabuleux","facette","facile","facture","faiblir","falaise","fameux","famille","farceur","farfelu","farine","farouche","fasciner","fatal","fatigue","faucon","fautif","faveur","favori","fébrile","féconder","fédérer","félin","femme","fémur","fendoir","féodal","fermer","féroce","ferveur","festival","feuille","feutre","février","fiasco","ficeler","fictif","fidèle","figure","filature","filetage","filière","filleul","filmer","filou","filtrer","financer","finir","fiole","firme","fissure","fixer","flairer","flamme","flasque","flatteur","fléau","flèche","fleur","flexion","flocon","flore","fluctuer","fluide","fluvial","folie","fonderie","fongible","fontaine","forcer","forgeron","formuler","fortune","fossile","foudre","fougère","fouiller","foulure","fourmi","fragile","fraise","franchir","frapper","frayeur","frégate","freiner","frelon","frémir","frénésie","frère","friable","friction","frisson","frivole","froid","fromage","frontal","frotter","fruit","fugitif","fuite","fureur","furieux","furtif","fusion","futur","gagner","galaxie","galerie","gambader","garantir","gardien","garnir","garrigue","gazelle","gazon","géant","gélatine","gélule","gendarme","général","génie","genou","gentil","géologie","géomètre","géranium","germe","gestuel","geyser","gibier","gicler","girafe","givre","glace","glaive","glisser","globe","gloire","glorieux","golfeur","gomme","gonfler","gorge","gorille","goudron","gouffre","goulot","goupille","gourmand","goutte","graduel","graffiti","graine","grand","grappin","gratuit","gravir","grenat","griffure","griller","grimper","grogner","gronder","grotte","groupe","gruger","grutier","gruyère","guépard","guerrier","guide","guimauve","guitare","gustatif","gymnaste","gyrostat","habitude","hachoir","halte","hameau","hangar","hanneton","haricot","harmonie","harpon","hasard","hélium","hématome","herbe","hérisson","hermine","héron","hésiter","heureux","hiberner","hibou","hilarant","histoire","hiver","homard","hommage","homogène","honneur","honorer","honteux","horde","horizon","horloge","hormone","horrible","houleux","housse","hublot","huileux","humain","humble","humide","humour","hurler","hydromel","hygiène","hymne","hypnose","idylle","ignorer","iguane","illicite","illusion","image","imbiber","imiter","immense","immobile","immuable","impact","impérial","implorer","imposer","imprimer","imputer","incarner","incendie","incident","incliner","incolore","indexer","indice","inductif","inédit","ineptie","inexact","infini","infliger","informer","infusion","ingérer","inhaler","inhiber","injecter","injure","innocent","inoculer","inonder","inscrire","insecte","insigne","insolite","inspirer","instinct","insulter","intact","intense","intime","intrigue","intuitif","inutile","invasion","inventer","inviter","invoquer","ironique","irradier","irréel","irriter","isoler","ivoire","ivresse","jaguar","jaillir","jambe","janvier","jardin","jauger","jaune","javelot","jetable","jeton","jeudi","jeunesse","joindre","joncher","jongler","joueur","jouissif","journal","jovial","joyau","joyeux","jubiler","jugement","junior","jupon","juriste","justice","juteux","juvénile","kayak","kimono","kiosque","label","labial","labourer","lacérer","lactose","lagune","laine","laisser","laitier","lambeau","lamelle","lampe","lanceur","langage","lanterne","lapin","largeur","larme","laurier","lavabo","lavoir","lecture","légal","léger","légume","lessive","lettre","levier","lexique","lézard","liasse","libérer","libre","licence","licorne","liège","lièvre","ligature","ligoter","ligue","limer","limite","limonade","limpide","linéaire","lingot","lionceau","liquide","lisière","lister","lithium","litige","littoral","livreur","logique","lointain","loisir","lombric","loterie","louer","lourd","loutre","louve","loyal","lubie","lucide","lucratif","lueur","lugubre","luisant","lumière","lunaire","lundi","luron","lutter","luxueux","machine","magasin","magenta","magique","maigre","maillon","maintien","mairie","maison","majorer","malaxer","maléfice","malheur","malice","mallette","mammouth","mandater","maniable","manquant","manteau","manuel","marathon","marbre","marchand","mardi","maritime","marqueur","marron","marteler","mascotte","massif","matériel","matière","matraque","maudire","maussade","mauve","maximal","méchant","méconnu","médaille","médecin","méditer","méduse","meilleur","mélange","mélodie","membre","mémoire","menacer","mener","menhir","mensonge","mentor","mercredi","mérite","merle","messager","mesure","métal","météore","méthode","métier","meuble","miauler","microbe","miette","mignon","migrer","milieu","million","mimique","mince","minéral","minimal","minorer","minute","miracle","miroiter","missile","mixte","mobile","moderne","moelleux","mondial","moniteur","monnaie","monotone","monstre","montagne","monument","moqueur","morceau","morsure","mortier","moteur","motif","mouche","moufle","moulin","mousson","mouton","mouvant","multiple","munition","muraille","murène","murmure","muscle","muséum","musicien","mutation","muter","mutuel","myriade","myrtille","mystère","mythique","nageur","nappe","narquois","narrer","natation","nation","nature","naufrage","nautique","navire","nébuleux","nectar","néfaste","négation","négliger","négocier","neige","nerveux","nettoyer","neurone","neutron","neveu","niche","nickel","nitrate","niveau","noble","nocif","nocturne","noirceur","noisette","nomade","nombreux","nommer","normatif","notable","notifier","notoire","nourrir","nouveau","novateur","novembre","novice","nuage","nuancer","nuire","nuisible","numéro","nuptial","nuque","nutritif","obéir","objectif","obliger","obscur","observer","obstacle","obtenir","obturer","occasion","occuper","océan","octobre","octroyer","octupler","oculaire","odeur","odorant","offenser","officier","offrir","ogive","oiseau","oisillon","olfactif","olivier","ombrage","omettre","onctueux","onduler","onéreux","onirique","opale","opaque","opérer","opinion","opportun","opprimer","opter","optique","orageux","orange","orbite","ordonner","oreille","organe","orgueil","orifice","ornement","orque","ortie","osciller","osmose","ossature","otarie","ouragan","ourson","outil","outrager","ouvrage","ovation","oxyde","oxygène","ozone","paisible","palace","palmarès","palourde","palper","panache","panda","pangolin","paniquer","panneau","panorama","pantalon","papaye","papier","papoter","papyrus","paradoxe","parcelle","paresse","parfumer","parler","parole","parrain","parsemer","partager","parure","parvenir","passion","pastèque","paternel","patience","patron","pavillon","pavoiser","payer","paysage","peigne","peintre","pelage","pélican","pelle","pelouse","peluche","pendule","pénétrer","pénible","pensif","pénurie","pépite","péplum","perdrix","perforer","période","permuter","perplexe","persil","perte","peser","pétale","petit","pétrir","peuple","pharaon","phobie","phoque","photon","phrase","physique","piano","pictural","pièce","pierre","pieuvre","pilote","pinceau","pipette","piquer","pirogue","piscine","piston","pivoter","pixel","pizza","placard","plafond","plaisir","planer","plaque","plastron","plateau","pleurer","plexus","pliage","plomb","plonger","pluie","plumage","pochette","poésie","poète","pointe","poirier","poisson","poivre","polaire","policier","pollen","polygone","pommade","pompier","ponctuel","pondérer","poney","portique","position","posséder","posture","potager","poteau","potion","pouce","poulain","poumon","pourpre","poussin","pouvoir","prairie","pratique","précieux","prédire","préfixe","prélude","prénom","présence","prétexte","prévoir","primitif","prince","prison","priver","problème","procéder","prodige","profond","progrès","proie","projeter","prologue","promener","propre","prospère","protéger","prouesse","proverbe","prudence","pruneau","psychose","public","puceron","puiser","pulpe","pulsar","punaise","punitif","pupitre","purifier","puzzle","pyramide","quasar","querelle","question","quiétude","quitter","quotient","racine","raconter","radieux","ragondin","raideur","raisin","ralentir","rallonge","ramasser","rapide","rasage","ratisser","ravager","ravin","rayonner","réactif","réagir","réaliser","réanimer","recevoir","réciter","réclamer","récolter","recruter","reculer","recycler","rédiger","redouter","refaire","réflexe","réformer","refrain","refuge","régalien","région","réglage","régulier","réitérer","rejeter","rejouer","relatif","relever","relief","remarque","remède","remise","remonter","remplir","remuer","renard","renfort","renifler","renoncer","rentrer","renvoi","replier","reporter","reprise","reptile","requin","réserve","résineux","résoudre","respect","rester","résultat","rétablir","retenir","réticule","retomber","retracer","réunion","réussir","revanche","revivre","révolte","révulsif","richesse","rideau","rieur","rigide","rigoler","rincer","riposter","risible","risque","rituel","rival","rivière","rocheux","romance","rompre","ronce","rondin","roseau","rosier","rotatif","rotor","rotule","rouge","rouille","rouleau","routine","royaume","ruban","rubis","ruche","ruelle","rugueux","ruiner","ruisseau","ruser","rustique","rythme","sabler","saboter","sabre","sacoche","safari","sagesse","saisir","salade","salive","salon","saluer","samedi","sanction","sanglier","sarcasme","sardine","saturer","saugrenu","saumon","sauter","sauvage","savant","savonner","scalpel","scandale","scélérat","scénario","sceptre","schéma","science","scinder","score","scrutin","sculpter","séance","sécable","sécher","secouer","sécréter","sédatif","séduire","seigneur","séjour","sélectif","semaine","sembler","semence","séminal","sénateur","sensible","sentence","séparer","séquence","serein","sergent","sérieux","serrure","sérum","service","sésame","sévir","sevrage","sextuple","sidéral","siècle","siéger","siffler","sigle","signal","silence","silicium","simple","sincère","sinistre","siphon","sirop","sismique","situer","skier","social","socle","sodium","soigneux","soldat","soleil","solitude","soluble","sombre","sommeil","somnoler","sonde","songeur","sonnette","sonore","sorcier","sortir","sosie","sottise","soucieux","soudure","souffle","soulever","soupape","source","soutirer","souvenir","spacieux","spatial","spécial","sphère","spiral","stable","station","sternum","stimulus","stipuler","strict","studieux","stupeur","styliste","sublime","substrat","subtil","subvenir","succès","sucre","suffixe","suggérer","suiveur","sulfate","superbe","supplier","surface","suricate","surmener","surprise","sursaut","survie","suspect","syllabe","symbole","symétrie","synapse","syntaxe","système","tabac","tablier","tactile","tailler","talent","talisman","talonner","tambour","tamiser","tangible","tapis","taquiner","tarder","tarif","tartine","tasse","tatami","tatouage","taupe","taureau","taxer","témoin","temporel","tenaille","tendre","teneur","tenir","tension","terminer","terne","terrible","tétine","texte","thème","théorie","thérapie","thorax","tibia","tiède","timide","tirelire","tiroir","tissu","titane","titre","tituber","toboggan","tolérant","tomate","tonique","tonneau","toponyme","torche","tordre","tornade","torpille","torrent","torse","tortue","totem","toucher","tournage","tousser","toxine","traction","trafic","tragique","trahir","train","trancher","travail","trèfle","tremper","trésor","treuil","triage","tribunal","tricoter","trilogie","triomphe","tripler","triturer","trivial","trombone","tronc","tropical","troupeau","tuile","tulipe","tumulte","tunnel","turbine","tuteur","tutoyer","tuyau","tympan","typhon","typique","tyran","ubuesque","ultime","ultrason","unanime","unifier","union","unique","unitaire","univers","uranium","urbain","urticant","usage","usine","usuel","usure","utile","utopie","vacarme","vaccin","vagabond","vague","vaillant","vaincre","vaisseau","valable","valise","vallon","valve","vampire","vanille","vapeur","varier","vaseux","vassal","vaste","vecteur","vedette","végétal","véhicule","veinard","véloce","vendredi","vénérer","venger","venimeux","ventouse","verdure","vérin","vernir","verrou","verser","vertu","veston","vétéran","vétuste","vexant","vexer","viaduc","viande","victoire","vidange","vidéo","vignette","vigueur","vilain","village","vinaigre","violon","vipère","virement","virtuose","virus","visage","viseur","vision","visqueux","visuel","vital","vitesse","viticole","vitrine","vivace","vivipare","vocation","voguer","voile","voisin","voiture","volaille","volcan","voltiger","volume","vorace","vortex","voter","vouloir","voyage","voyelle","wagon","xénon","yacht","zèbre","zénith","zeste","zoologie"]');
  91333. /***/ }),
  91334. /***/ 72841:
  91335. /***/ ((module) => {
  91336. "use strict";
  91337. module.exports = JSON.parse('["abaco","abbaglio","abbinato","abete","abisso","abolire","abrasivo","abrogato","accadere","accenno","accusato","acetone","achille","acido","acqua","acre","acrilico","acrobata","acuto","adagio","addebito","addome","adeguato","aderire","adipe","adottare","adulare","affabile","affetto","affisso","affranto","aforisma","afoso","africano","agave","agente","agevole","aggancio","agire","agitare","agonismo","agricolo","agrumeto","aguzzo","alabarda","alato","albatro","alberato","albo","albume","alce","alcolico","alettone","alfa","algebra","aliante","alibi","alimento","allagato","allegro","allievo","allodola","allusivo","almeno","alogeno","alpaca","alpestre","altalena","alterno","alticcio","altrove","alunno","alveolo","alzare","amalgama","amanita","amarena","ambito","ambrato","ameba","america","ametista","amico","ammasso","ammenda","ammirare","ammonito","amore","ampio","ampliare","amuleto","anacardo","anagrafe","analista","anarchia","anatra","anca","ancella","ancora","andare","andrea","anello","angelo","angolare","angusto","anima","annegare","annidato","anno","annuncio","anonimo","anticipo","anzi","apatico","apertura","apode","apparire","appetito","appoggio","approdo","appunto","aprile","arabica","arachide","aragosta","araldica","arancio","aratura","arazzo","arbitro","archivio","ardito","arenile","argento","argine","arguto","aria","armonia","arnese","arredato","arringa","arrosto","arsenico","arso","artefice","arzillo","asciutto","ascolto","asepsi","asettico","asfalto","asino","asola","aspirato","aspro","assaggio","asse","assoluto","assurdo","asta","astenuto","astice","astratto","atavico","ateismo","atomico","atono","attesa","attivare","attorno","attrito","attuale","ausilio","austria","autista","autonomo","autunno","avanzato","avere","avvenire","avviso","avvolgere","azione","azoto","azzimo","azzurro","babele","baccano","bacino","baco","badessa","badilata","bagnato","baita","balcone","baldo","balena","ballata","balzano","bambino","bandire","baraonda","barbaro","barca","baritono","barlume","barocco","basilico","basso","batosta","battuto","baule","bava","bavosa","becco","beffa","belgio","belva","benda","benevole","benigno","benzina","bere","berlina","beta","bibita","bici","bidone","bifido","biga","bilancia","bimbo","binocolo","biologo","bipede","bipolare","birbante","birra","biscotto","bisesto","bisnonno","bisonte","bisturi","bizzarro","blando","blatta","bollito","bonifico","bordo","bosco","botanico","bottino","bozzolo","braccio","bradipo","brama","branca","bravura","bretella","brevetto","brezza","briglia","brillante","brindare","broccolo","brodo","bronzina","brullo","bruno","bubbone","buca","budino","buffone","buio","bulbo","buono","burlone","burrasca","bussola","busta","cadetto","caduco","calamaro","calcolo","calesse","calibro","calmo","caloria","cambusa","camerata","camicia","cammino","camola","campale","canapa","candela","cane","canino","canotto","cantina","capace","capello","capitolo","capogiro","cappero","capra","capsula","carapace","carcassa","cardo","carisma","carovana","carretto","cartolina","casaccio","cascata","caserma","caso","cassone","castello","casuale","catasta","catena","catrame","cauto","cavillo","cedibile","cedrata","cefalo","celebre","cellulare","cena","cenone","centesimo","ceramica","cercare","certo","cerume","cervello","cesoia","cespo","ceto","chela","chiaro","chicca","chiedere","chimera","china","chirurgo","chitarra","ciao","ciclismo","cifrare","cigno","cilindro","ciottolo","circa","cirrosi","citrico","cittadino","ciuffo","civetta","civile","classico","clinica","cloro","cocco","codardo","codice","coerente","cognome","collare","colmato","colore","colposo","coltivato","colza","coma","cometa","commando","comodo","computer","comune","conciso","condurre","conferma","congelare","coniuge","connesso","conoscere","consumo","continuo","convegno","coperto","copione","coppia","copricapo","corazza","cordata","coricato","cornice","corolla","corpo","corredo","corsia","cortese","cosmico","costante","cottura","covato","cratere","cravatta","creato","credere","cremoso","crescita","creta","criceto","crinale","crisi","critico","croce","cronaca","crostata","cruciale","crusca","cucire","cuculo","cugino","cullato","cupola","curatore","cursore","curvo","cuscino","custode","dado","daino","dalmata","damerino","daniela","dannoso","danzare","datato","davanti","davvero","debutto","decennio","deciso","declino","decollo","decreto","dedicato","definito","deforme","degno","delegare","delfino","delirio","delta","demenza","denotato","dentro","deposito","derapata","derivare","deroga","descritto","deserto","desiderio","desumere","detersivo","devoto","diametro","dicembre","diedro","difeso","diffuso","digerire","digitale","diluvio","dinamico","dinnanzi","dipinto","diploma","dipolo","diradare","dire","dirotto","dirupo","disagio","discreto","disfare","disgelo","disposto","distanza","disumano","dito","divano","divelto","dividere","divorato","doblone","docente","doganale","dogma","dolce","domato","domenica","dominare","dondolo","dono","dormire","dote","dottore","dovuto","dozzina","drago","druido","dubbio","dubitare","ducale","duna","duomo","duplice","duraturo","ebano","eccesso","ecco","eclissi","economia","edera","edicola","edile","editoria","educare","egemonia","egli","egoismo","egregio","elaborato","elargire","elegante","elencato","eletto","elevare","elfico","elica","elmo","elsa","eluso","emanato","emblema","emesso","emiro","emotivo","emozione","empirico","emulo","endemico","enduro","energia","enfasi","enoteca","entrare","enzima","epatite","epilogo","episodio","epocale","eppure","equatore","erario","erba","erboso","erede","eremita","erigere","ermetico","eroe","erosivo","errante","esagono","esame","esanime","esaudire","esca","esempio","esercito","esibito","esigente","esistere","esito","esofago","esortato","esoso","espanso","espresso","essenza","esso","esteso","estimare","estonia","estroso","esultare","etilico","etnico","etrusco","etto","euclideo","europa","evaso","evidenza","evitato","evoluto","evviva","fabbrica","faccenda","fachiro","falco","famiglia","fanale","fanfara","fango","fantasma","fare","farfalla","farinoso","farmaco","fascia","fastoso","fasullo","faticare","fato","favoloso","febbre","fecola","fede","fegato","felpa","feltro","femmina","fendere","fenomeno","fermento","ferro","fertile","fessura","festivo","fetta","feudo","fiaba","fiducia","fifa","figurato","filo","finanza","finestra","finire","fiore","fiscale","fisico","fiume","flacone","flamenco","flebo","flemma","florido","fluente","fluoro","fobico","focaccia","focoso","foderato","foglio","folata","folclore","folgore","fondente","fonetico","fonia","fontana","forbito","forchetta","foresta","formica","fornaio","foro","fortezza","forzare","fosfato","fosso","fracasso","frana","frassino","fratello","freccetta","frenata","fresco","frigo","frollino","fronde","frugale","frutta","fucilata","fucsia","fuggente","fulmine","fulvo","fumante","fumetto","fumoso","fune","funzione","fuoco","furbo","furgone","furore","fuso","futile","gabbiano","gaffe","galateo","gallina","galoppo","gambero","gamma","garanzia","garbo","garofano","garzone","gasdotto","gasolio","gastrico","gatto","gaudio","gazebo","gazzella","geco","gelatina","gelso","gemello","gemmato","gene","genitore","gennaio","genotipo","gergo","ghepardo","ghiaccio","ghisa","giallo","gilda","ginepro","giocare","gioiello","giorno","giove","girato","girone","gittata","giudizio","giurato","giusto","globulo","glutine","gnomo","gobba","golf","gomito","gommone","gonfio","gonna","governo","gracile","grado","grafico","grammo","grande","grattare","gravoso","grazia","greca","gregge","grifone","grigio","grinza","grotta","gruppo","guadagno","guaio","guanto","guardare","gufo","guidare","ibernato","icona","identico","idillio","idolo","idra","idrico","idrogeno","igiene","ignaro","ignorato","ilare","illeso","illogico","illudere","imballo","imbevuto","imbocco","imbuto","immane","immerso","immolato","impacco","impeto","impiego","importo","impronta","inalare","inarcare","inattivo","incanto","incendio","inchino","incisivo","incluso","incontro","incrocio","incubo","indagine","india","indole","inedito","infatti","infilare","inflitto","ingaggio","ingegno","inglese","ingordo","ingrosso","innesco","inodore","inoltrare","inondato","insano","insetto","insieme","insonnia","insulina","intasato","intero","intonaco","intuito","inumidire","invalido","invece","invito","iperbole","ipnotico","ipotesi","ippica","iride","irlanda","ironico","irrigato","irrorare","isolato","isotopo","isterico","istituto","istrice","italia","iterare","labbro","labirinto","lacca","lacerato","lacrima","lacuna","laddove","lago","lampo","lancetta","lanterna","lardoso","larga","laringe","lastra","latenza","latino","lattuga","lavagna","lavoro","legale","leggero","lembo","lentezza","lenza","leone","lepre","lesivo","lessato","lesto","letterale","leva","levigato","libero","lido","lievito","lilla","limatura","limitare","limpido","lineare","lingua","liquido","lira","lirica","lisca","lite","litigio","livrea","locanda","lode","logica","lombare","londra","longevo","loquace","lorenzo","loto","lotteria","luce","lucidato","lumaca","luminoso","lungo","lupo","luppolo","lusinga","lusso","lutto","macabro","macchina","macero","macinato","madama","magico","maglia","magnete","magro","maiolica","malafede","malgrado","malinteso","malsano","malto","malumore","mana","mancia","mandorla","mangiare","manifesto","mannaro","manovra","mansarda","mantide","manubrio","mappa","maratona","marcire","maretta","marmo","marsupio","maschera","massaia","mastino","materasso","matricola","mattone","maturo","mazurca","meandro","meccanico","mecenate","medesimo","meditare","mega","melassa","melis","melodia","meninge","meno","mensola","mercurio","merenda","merlo","meschino","mese","messere","mestolo","metallo","metodo","mettere","miagolare","mica","micelio","michele","microbo","midollo","miele","migliore","milano","milite","mimosa","minerale","mini","minore","mirino","mirtillo","miscela","missiva","misto","misurare","mitezza","mitigare","mitra","mittente","mnemonico","modello","modifica","modulo","mogano","mogio","mole","molosso","monastero","monco","mondina","monetario","monile","monotono","monsone","montato","monviso","mora","mordere","morsicato","mostro","motivato","motosega","motto","movenza","movimento","mozzo","mucca","mucosa","muffa","mughetto","mugnaio","mulatto","mulinello","multiplo","mummia","munto","muovere","murale","musa","muscolo","musica","mutevole","muto","nababbo","nafta","nanometro","narciso","narice","narrato","nascere","nastrare","naturale","nautica","naviglio","nebulosa","necrosi","negativo","negozio","nemmeno","neofita","neretto","nervo","nessuno","nettuno","neutrale","neve","nevrotico","nicchia","ninfa","nitido","nobile","nocivo","nodo","nome","nomina","nordico","normale","norvegese","nostrano","notare","notizia","notturno","novella","nucleo","nulla","numero","nuovo","nutrire","nuvola","nuziale","oasi","obbedire","obbligo","obelisco","oblio","obolo","obsoleto","occasione","occhio","occidente","occorrere","occultare","ocra","oculato","odierno","odorare","offerta","offrire","offuscato","oggetto","oggi","ognuno","olandese","olfatto","oliato","oliva","ologramma","oltre","omaggio","ombelico","ombra","omega","omissione","ondoso","onere","onice","onnivoro","onorevole","onta","operato","opinione","opposto","oracolo","orafo","ordine","orecchino","orefice","orfano","organico","origine","orizzonte","orma","ormeggio","ornativo","orologio","orrendo","orribile","ortensia","ortica","orzata","orzo","osare","oscurare","osmosi","ospedale","ospite","ossa","ossidare","ostacolo","oste","otite","otre","ottagono","ottimo","ottobre","ovale","ovest","ovino","oviparo","ovocito","ovunque","ovviare","ozio","pacchetto","pace","pacifico","padella","padrone","paese","paga","pagina","palazzina","palesare","pallido","palo","palude","pandoro","pannello","paolo","paonazzo","paprica","parabola","parcella","parere","pargolo","pari","parlato","parola","partire","parvenza","parziale","passivo","pasticca","patacca","patologia","pattume","pavone","peccato","pedalare","pedonale","peggio","peloso","penare","pendice","penisola","pennuto","penombra","pensare","pentola","pepe","pepita","perbene","percorso","perdonato","perforare","pergamena","periodo","permesso","perno","perplesso","persuaso","pertugio","pervaso","pesatore","pesista","peso","pestifero","petalo","pettine","petulante","pezzo","piacere","pianta","piattino","piccino","picozza","piega","pietra","piffero","pigiama","pigolio","pigro","pila","pilifero","pillola","pilota","pimpante","pineta","pinna","pinolo","pioggia","piombo","piramide","piretico","pirite","pirolisi","pitone","pizzico","placebo","planare","plasma","platano","plenario","pochezza","poderoso","podismo","poesia","poggiare","polenta","poligono","pollice","polmonite","polpetta","polso","poltrona","polvere","pomice","pomodoro","ponte","popoloso","porfido","poroso","porpora","porre","portata","posa","positivo","possesso","postulato","potassio","potere","pranzo","prassi","pratica","precluso","predica","prefisso","pregiato","prelievo","premere","prenotare","preparato","presenza","pretesto","prevalso","prima","principe","privato","problema","procura","produrre","profumo","progetto","prolunga","promessa","pronome","proposta","proroga","proteso","prova","prudente","prugna","prurito","psiche","pubblico","pudica","pugilato","pugno","pulce","pulito","pulsante","puntare","pupazzo","pupilla","puro","quadro","qualcosa","quasi","querela","quota","raccolto","raddoppio","radicale","radunato","raffica","ragazzo","ragione","ragno","ramarro","ramingo","ramo","randagio","rantolare","rapato","rapina","rappreso","rasatura","raschiato","rasente","rassegna","rastrello","rata","ravveduto","reale","recepire","recinto","recluta","recondito","recupero","reddito","redimere","regalato","registro","regola","regresso","relazione","remare","remoto","renna","replica","reprimere","reputare","resa","residente","responso","restauro","rete","retina","retorica","rettifica","revocato","riassunto","ribadire","ribelle","ribrezzo","ricarica","ricco","ricevere","riciclato","ricordo","ricreduto","ridicolo","ridurre","rifasare","riflesso","riforma","rifugio","rigare","rigettato","righello","rilassato","rilevato","rimanere","rimbalzo","rimedio","rimorchio","rinascita","rincaro","rinforzo","rinnovo","rinomato","rinsavito","rintocco","rinuncia","rinvenire","riparato","ripetuto","ripieno","riportare","ripresa","ripulire","risata","rischio","riserva","risibile","riso","rispetto","ristoro","risultato","risvolto","ritardo","ritegno","ritmico","ritrovo","riunione","riva","riverso","rivincita","rivolto","rizoma","roba","robotico","robusto","roccia","roco","rodaggio","rodere","roditore","rogito","rollio","romantico","rompere","ronzio","rosolare","rospo","rotante","rotondo","rotula","rovescio","rubizzo","rubrica","ruga","rullino","rumine","rumoroso","ruolo","rupe","russare","rustico","sabato","sabbiare","sabotato","sagoma","salasso","saldatura","salgemma","salivare","salmone","salone","saltare","saluto","salvo","sapere","sapido","saporito","saraceno","sarcasmo","sarto","sassoso","satellite","satira","satollo","saturno","savana","savio","saziato","sbadiglio","sbalzo","sbancato","sbarra","sbattere","sbavare","sbendare","sbirciare","sbloccato","sbocciato","sbrinare","sbruffone","sbuffare","scabroso","scadenza","scala","scambiare","scandalo","scapola","scarso","scatenare","scavato","scelto","scenico","scettro","scheda","schiena","sciarpa","scienza","scindere","scippo","sciroppo","scivolo","sclerare","scodella","scolpito","scomparto","sconforto","scoprire","scorta","scossone","scozzese","scriba","scrollare","scrutinio","scuderia","scultore","scuola","scuro","scusare","sdebitare","sdoganare","seccatura","secondo","sedano","seggiola","segnalato","segregato","seguito","selciato","selettivo","sella","selvaggio","semaforo","sembrare","seme","seminato","sempre","senso","sentire","sepolto","sequenza","serata","serbato","sereno","serio","serpente","serraglio","servire","sestina","setola","settimana","sfacelo","sfaldare","sfamato","sfarzoso","sfaticato","sfera","sfida","sfilato","sfinge","sfocato","sfoderare","sfogo","sfoltire","sforzato","sfratto","sfruttato","sfuggito","sfumare","sfuso","sgabello","sgarbato","sgonfiare","sgorbio","sgrassato","sguardo","sibilo","siccome","sierra","sigla","signore","silenzio","sillaba","simbolo","simpatico","simulato","sinfonia","singolo","sinistro","sino","sintesi","sinusoide","sipario","sisma","sistole","situato","slitta","slogatura","sloveno","smarrito","smemorato","smentito","smeraldo","smilzo","smontare","smottato","smussato","snellire","snervato","snodo","sobbalzo","sobrio","soccorso","sociale","sodale","soffitto","sogno","soldato","solenne","solido","sollazzo","solo","solubile","solvente","somatico","somma","sonda","sonetto","sonnifero","sopire","soppeso","sopra","sorgere","sorpasso","sorriso","sorso","sorteggio","sorvolato","sospiro","sosta","sottile","spada","spalla","spargere","spatola","spavento","spazzola","specie","spedire","spegnere","spelatura","speranza","spessore","spettrale","spezzato","spia","spigoloso","spillato","spinoso","spirale","splendido","sportivo","sposo","spranga","sprecare","spronato","spruzzo","spuntino","squillo","sradicare","srotolato","stabile","stacco","staffa","stagnare","stampato","stantio","starnuto","stasera","statuto","stelo","steppa","sterzo","stiletto","stima","stirpe","stivale","stizzoso","stonato","storico","strappo","stregato","stridulo","strozzare","strutto","stuccare","stufo","stupendo","subentro","succoso","sudore","suggerito","sugo","sultano","suonare","superbo","supporto","surgelato","surrogato","sussurro","sutura","svagare","svedese","sveglio","svelare","svenuto","svezia","sviluppo","svista","svizzera","svolta","svuotare","tabacco","tabulato","tacciare","taciturno","tale","talismano","tampone","tannino","tara","tardivo","targato","tariffa","tarpare","tartaruga","tasto","tattico","taverna","tavolata","tazza","teca","tecnico","telefono","temerario","tempo","temuto","tendone","tenero","tensione","tentacolo","teorema","terme","terrazzo","terzetto","tesi","tesserato","testato","tetro","tettoia","tifare","tigella","timbro","tinto","tipico","tipografo","tiraggio","tiro","titanio","titolo","titubante","tizio","tizzone","toccare","tollerare","tolto","tombola","tomo","tonfo","tonsilla","topazio","topologia","toppa","torba","tornare","torrone","tortora","toscano","tossire","tostatura","totano","trabocco","trachea","trafila","tragedia","tralcio","tramonto","transito","trapano","trarre","trasloco","trattato","trave","treccia","tremolio","trespolo","tributo","tricheco","trifoglio","trillo","trincea","trio","tristezza","triturato","trivella","tromba","trono","troppo","trottola","trovare","truccato","tubatura","tuffato","tulipano","tumulto","tunisia","turbare","turchino","tuta","tutela","ubicato","uccello","uccisore","udire","uditivo","uffa","ufficio","uguale","ulisse","ultimato","umano","umile","umorismo","uncinetto","ungere","ungherese","unicorno","unificato","unisono","unitario","unte","uovo","upupa","uragano","urgenza","urlo","usanza","usato","uscito","usignolo","usuraio","utensile","utilizzo","utopia","vacante","vaccinato","vagabondo","vagliato","valanga","valgo","valico","valletta","valoroso","valutare","valvola","vampata","vangare","vanitoso","vano","vantaggio","vanvera","vapore","varano","varcato","variante","vasca","vedetta","vedova","veduto","vegetale","veicolo","velcro","velina","velluto","veloce","venato","vendemmia","vento","verace","verbale","vergogna","verifica","vero","verruca","verticale","vescica","vessillo","vestale","veterano","vetrina","vetusto","viandante","vibrante","vicenda","vichingo","vicinanza","vidimare","vigilia","vigneto","vigore","vile","villano","vimini","vincitore","viola","vipera","virgola","virologo","virulento","viscoso","visione","vispo","vissuto","visura","vita","vitello","vittima","vivanda","vivido","viziare","voce","voga","volatile","volere","volpe","voragine","vulcano","zampogna","zanna","zappato","zattera","zavorra","zefiro","zelante","zelo","zenzero","zerbino","zibetto","zinco","zircone","zitto","zolla","zotico","zucchero","zufolo","zulu","zuppa"]');
  91338. /***/ }),
  91339. /***/ 94472:
  91340. /***/ ((module) => {
  91341. "use strict";
  91342. module.exports = JSON.parse('["あいこくしん","あいさつ","あいだ","あおぞら","あかちゃん","あきる","あけがた","あける","あこがれる","あさい","あさひ","あしあと","あじわう","あずかる","あずき","あそぶ","あたえる","あたためる","あたりまえ","あたる","あつい","あつかう","あっしゅく","あつまり","あつめる","あてな","あてはまる","あひる","あぶら","あぶる","あふれる","あまい","あまど","あまやかす","あまり","あみもの","あめりか","あやまる","あゆむ","あらいぐま","あらし","あらすじ","あらためる","あらゆる","あらわす","ありがとう","あわせる","あわてる","あんい","あんがい","あんこ","あんぜん","あんてい","あんない","あんまり","いいだす","いおん","いがい","いがく","いきおい","いきなり","いきもの","いきる","いくじ","いくぶん","いけばな","いけん","いこう","いこく","いこつ","いさましい","いさん","いしき","いじゅう","いじょう","いじわる","いずみ","いずれ","いせい","いせえび","いせかい","いせき","いぜん","いそうろう","いそがしい","いだい","いだく","いたずら","いたみ","いたりあ","いちおう","いちじ","いちど","いちば","いちぶ","いちりゅう","いつか","いっしゅん","いっせい","いっそう","いったん","いっち","いってい","いっぽう","いてざ","いてん","いどう","いとこ","いない","いなか","いねむり","いのち","いのる","いはつ","いばる","いはん","いびき","いひん","いふく","いへん","いほう","いみん","いもうと","いもたれ","いもり","いやがる","いやす","いよかん","いよく","いらい","いらすと","いりぐち","いりょう","いれい","いれもの","いれる","いろえんぴつ","いわい","いわう","いわかん","いわば","いわゆる","いんげんまめ","いんさつ","いんしょう","いんよう","うえき","うえる","うおざ","うがい","うかぶ","うかべる","うきわ","うくらいな","うくれれ","うけたまわる","うけつけ","うけとる","うけもつ","うける","うごかす","うごく","うこん","うさぎ","うしなう","うしろがみ","うすい","うすぎ","うすぐらい","うすめる","うせつ","うちあわせ","うちがわ","うちき","うちゅう","うっかり","うつくしい","うったえる","うつる","うどん","うなぎ","うなじ","うなずく","うなる","うねる","うのう","うぶげ","うぶごえ","うまれる","うめる","うもう","うやまう","うよく","うらがえす","うらぐち","うらない","うりあげ","うりきれ","うるさい","うれしい","うれゆき","うれる","うろこ","うわき","うわさ","うんこう","うんちん","うんてん","うんどう","えいえん","えいが","えいきょう","えいご","えいせい","えいぶん","えいよう","えいわ","えおり","えがお","えがく","えきたい","えくせる","えしゃく","えすて","えつらん","えのぐ","えほうまき","えほん","えまき","えもじ","えもの","えらい","えらぶ","えりあ","えんえん","えんかい","えんぎ","えんげき","えんしゅう","えんぜつ","えんそく","えんちょう","えんとつ","おいかける","おいこす","おいしい","おいつく","おうえん","おうさま","おうじ","おうせつ","おうたい","おうふく","おうべい","おうよう","おえる","おおい","おおう","おおどおり","おおや","おおよそ","おかえり","おかず","おがむ","おかわり","おぎなう","おきる","おくさま","おくじょう","おくりがな","おくる","おくれる","おこす","おこなう","おこる","おさえる","おさない","おさめる","おしいれ","おしえる","おじぎ","おじさん","おしゃれ","おそらく","おそわる","おたがい","おたく","おだやか","おちつく","おっと","おつり","おでかけ","おとしもの","おとなしい","おどり","おどろかす","おばさん","おまいり","おめでとう","おもいで","おもう","おもたい","おもちゃ","おやつ","おやゆび","およぼす","おらんだ","おろす","おんがく","おんけい","おんしゃ","おんせん","おんだん","おんちゅう","おんどけい","かあつ","かいが","がいき","がいけん","がいこう","かいさつ","かいしゃ","かいすいよく","かいぜん","かいぞうど","かいつう","かいてん","かいとう","かいふく","がいへき","かいほう","かいよう","がいらい","かいわ","かえる","かおり","かかえる","かがく","かがし","かがみ","かくご","かくとく","かざる","がぞう","かたい","かたち","がちょう","がっきゅう","がっこう","がっさん","がっしょう","かなざわし","かのう","がはく","かぶか","かほう","かほご","かまう","かまぼこ","かめれおん","かゆい","かようび","からい","かるい","かろう","かわく","かわら","がんか","かんけい","かんこう","かんしゃ","かんそう","かんたん","かんち","がんばる","きあい","きあつ","きいろ","ぎいん","きうい","きうん","きえる","きおう","きおく","きおち","きおん","きかい","きかく","きかんしゃ","ききて","きくばり","きくらげ","きけんせい","きこう","きこえる","きこく","きさい","きさく","きさま","きさらぎ","ぎじかがく","ぎしき","ぎじたいけん","ぎじにってい","ぎじゅつしゃ","きすう","きせい","きせき","きせつ","きそう","きぞく","きぞん","きたえる","きちょう","きつえん","ぎっちり","きつつき","きつね","きてい","きどう","きどく","きない","きなが","きなこ","きぬごし","きねん","きのう","きのした","きはく","きびしい","きひん","きふく","きぶん","きぼう","きほん","きまる","きみつ","きむずかしい","きめる","きもだめし","きもち","きもの","きゃく","きやく","ぎゅうにく","きよう","きょうりゅう","きらい","きらく","きりん","きれい","きれつ","きろく","ぎろん","きわめる","ぎんいろ","きんかくじ","きんじょ","きんようび","ぐあい","くいず","くうかん","くうき","くうぐん","くうこう","ぐうせい","くうそう","ぐうたら","くうふく","くうぼ","くかん","くきょう","くげん","ぐこう","くさい","くさき","くさばな","くさる","くしゃみ","くしょう","くすのき","くすりゆび","くせげ","くせん","ぐたいてき","くださる","くたびれる","くちこみ","くちさき","くつした","ぐっすり","くつろぐ","くとうてん","くどく","くなん","くねくね","くのう","くふう","くみあわせ","くみたてる","くめる","くやくしょ","くらす","くらべる","くるま","くれる","くろう","くわしい","ぐんかん","ぐんしょく","ぐんたい","ぐんて","けあな","けいかく","けいけん","けいこ","けいさつ","げいじゅつ","けいたい","げいのうじん","けいれき","けいろ","けおとす","けおりもの","げきか","げきげん","げきだん","げきちん","げきとつ","げきは","げきやく","げこう","げこくじょう","げざい","けさき","げざん","けしき","けしごむ","けしょう","げすと","けたば","けちゃっぷ","けちらす","けつあつ","けつい","けつえき","けっこん","けつじょ","けっせき","けってい","けつまつ","げつようび","げつれい","けつろん","げどく","けとばす","けとる","けなげ","けなす","けなみ","けぬき","げねつ","けねん","けはい","げひん","けぶかい","げぼく","けまり","けみかる","けむし","けむり","けもの","けらい","けろけろ","けわしい","けんい","けんえつ","けんお","けんか","げんき","けんげん","けんこう","けんさく","けんしゅう","けんすう","げんそう","けんちく","けんてい","けんとう","けんない","けんにん","げんぶつ","けんま","けんみん","けんめい","けんらん","けんり","こあくま","こいぬ","こいびと","ごうい","こうえん","こうおん","こうかん","ごうきゅう","ごうけい","こうこう","こうさい","こうじ","こうすい","ごうせい","こうそく","こうたい","こうちゃ","こうつう","こうてい","こうどう","こうない","こうはい","ごうほう","ごうまん","こうもく","こうりつ","こえる","こおり","ごかい","ごがつ","ごかん","こくご","こくさい","こくとう","こくない","こくはく","こぐま","こけい","こける","ここのか","こころ","こさめ","こしつ","こすう","こせい","こせき","こぜん","こそだて","こたい","こたえる","こたつ","こちょう","こっか","こつこつ","こつばん","こつぶ","こてい","こてん","ことがら","ことし","ことば","ことり","こなごな","こねこね","このまま","このみ","このよ","ごはん","こひつじ","こふう","こふん","こぼれる","ごまあぶら","こまかい","ごますり","こまつな","こまる","こむぎこ","こもじ","こもち","こもの","こもん","こやく","こやま","こゆう","こゆび","こよい","こよう","こりる","これくしょん","ころっけ","こわもて","こわれる","こんいん","こんかい","こんき","こんしゅう","こんすい","こんだて","こんとん","こんなん","こんびに","こんぽん","こんまけ","こんや","こんれい","こんわく","ざいえき","さいかい","さいきん","ざいげん","ざいこ","さいしょ","さいせい","ざいたく","ざいちゅう","さいてき","ざいりょう","さうな","さかいし","さがす","さかな","さかみち","さがる","さぎょう","さくし","さくひん","さくら","さこく","さこつ","さずかる","ざせき","さたん","さつえい","ざつおん","ざっか","ざつがく","さっきょく","ざっし","さつじん","ざっそう","さつたば","さつまいも","さてい","さといも","さとう","さとおや","さとし","さとる","さのう","さばく","さびしい","さべつ","さほう","さほど","さます","さみしい","さみだれ","さむけ","さめる","さやえんどう","さゆう","さよう","さよく","さらだ","ざるそば","さわやか","さわる","さんいん","さんか","さんきゃく","さんこう","さんさい","ざんしょ","さんすう","さんせい","さんそ","さんち","さんま","さんみ","さんらん","しあい","しあげ","しあさって","しあわせ","しいく","しいん","しうち","しえい","しおけ","しかい","しかく","じかん","しごと","しすう","じだい","したうけ","したぎ","したて","したみ","しちょう","しちりん","しっかり","しつじ","しつもん","してい","してき","してつ","じてん","じどう","しなぎれ","しなもの","しなん","しねま","しねん","しのぐ","しのぶ","しはい","しばかり","しはつ","しはらい","しはん","しひょう","しふく","じぶん","しへい","しほう","しほん","しまう","しまる","しみん","しむける","じむしょ","しめい","しめる","しもん","しゃいん","しゃうん","しゃおん","じゃがいも","しやくしょ","しゃくほう","しゃけん","しゃこ","しゃざい","しゃしん","しゃせん","しゃそう","しゃたい","しゃちょう","しゃっきん","じゃま","しゃりん","しゃれい","じゆう","じゅうしょ","しゅくはく","じゅしん","しゅっせき","しゅみ","しゅらば","じゅんばん","しょうかい","しょくたく","しょっけん","しょどう","しょもつ","しらせる","しらべる","しんか","しんこう","じんじゃ","しんせいじ","しんちく","しんりん","すあげ","すあし","すあな","ずあん","すいえい","すいか","すいとう","ずいぶん","すいようび","すうがく","すうじつ","すうせん","すおどり","すきま","すくう","すくない","すける","すごい","すこし","ずさん","すずしい","すすむ","すすめる","すっかり","ずっしり","ずっと","すてき","すてる","すねる","すのこ","すはだ","すばらしい","ずひょう","ずぶぬれ","すぶり","すふれ","すべて","すべる","ずほう","すぼん","すまい","すめし","すもう","すやき","すらすら","するめ","すれちがう","すろっと","すわる","すんぜん","すんぽう","せあぶら","せいかつ","せいげん","せいじ","せいよう","せおう","せかいかん","せきにん","せきむ","せきゆ","せきらんうん","せけん","せこう","せすじ","せたい","せたけ","せっかく","せっきゃく","ぜっく","せっけん","せっこつ","せっさたくま","せつぞく","せつだん","せつでん","せっぱん","せつび","せつぶん","せつめい","せつりつ","せなか","せのび","せはば","せびろ","せぼね","せまい","せまる","せめる","せもたれ","せりふ","ぜんあく","せんい","せんえい","せんか","せんきょ","せんく","せんげん","ぜんご","せんさい","せんしゅ","せんすい","せんせい","せんぞ","せんたく","せんちょう","せんてい","せんとう","せんぬき","せんねん","せんぱい","ぜんぶ","ぜんぽう","せんむ","せんめんじょ","せんもん","せんやく","せんゆう","せんよう","ぜんら","ぜんりゃく","せんれい","せんろ","そあく","そいとげる","そいね","そうがんきょう","そうき","そうご","そうしん","そうだん","そうなん","そうび","そうめん","そうり","そえもの","そえん","そがい","そげき","そこう","そこそこ","そざい","そしな","そせい","そせん","そそぐ","そだてる","そつう","そつえん","そっかん","そつぎょう","そっけつ","そっこう","そっせん","そっと","そとがわ","そとづら","そなえる","そなた","そふぼ","そぼく","そぼろ","そまつ","そまる","そむく","そむりえ","そめる","そもそも","そよかぜ","そらまめ","そろう","そんかい","そんけい","そんざい","そんしつ","そんぞく","そんちょう","ぞんび","ぞんぶん","そんみん","たあい","たいいん","たいうん","たいえき","たいおう","だいがく","たいき","たいぐう","たいけん","たいこ","たいざい","だいじょうぶ","だいすき","たいせつ","たいそう","だいたい","たいちょう","たいてい","だいどころ","たいない","たいねつ","たいのう","たいはん","だいひょう","たいふう","たいへん","たいほ","たいまつばな","たいみんぐ","たいむ","たいめん","たいやき","たいよう","たいら","たいりょく","たいる","たいわん","たうえ","たえる","たおす","たおる","たおれる","たかい","たかね","たきび","たくさん","たこく","たこやき","たさい","たしざん","だじゃれ","たすける","たずさわる","たそがれ","たたかう","たたく","ただしい","たたみ","たちばな","だっかい","だっきゃく","だっこ","だっしゅつ","だったい","たてる","たとえる","たなばた","たにん","たぬき","たのしみ","たはつ","たぶん","たべる","たぼう","たまご","たまる","だむる","ためいき","ためす","ためる","たもつ","たやすい","たよる","たらす","たりきほんがん","たりょう","たりる","たると","たれる","たれんと","たろっと","たわむれる","だんあつ","たんい","たんおん","たんか","たんき","たんけん","たんご","たんさん","たんじょうび","だんせい","たんそく","たんたい","だんち","たんてい","たんとう","だんな","たんにん","だんねつ","たんのう","たんぴん","だんぼう","たんまつ","たんめい","だんれつ","だんろ","だんわ","ちあい","ちあん","ちいき","ちいさい","ちえん","ちかい","ちから","ちきゅう","ちきん","ちけいず","ちけん","ちこく","ちさい","ちしき","ちしりょう","ちせい","ちそう","ちたい","ちたん","ちちおや","ちつじょ","ちてき","ちてん","ちぬき","ちぬり","ちのう","ちひょう","ちへいせん","ちほう","ちまた","ちみつ","ちみどろ","ちめいど","ちゃんこなべ","ちゅうい","ちゆりょく","ちょうし","ちょさくけん","ちらし","ちらみ","ちりがみ","ちりょう","ちるど","ちわわ","ちんたい","ちんもく","ついか","ついたち","つうか","つうじょう","つうはん","つうわ","つかう","つかれる","つくね","つくる","つけね","つける","つごう","つたえる","つづく","つつじ","つつむ","つとめる","つながる","つなみ","つねづね","つのる","つぶす","つまらない","つまる","つみき","つめたい","つもり","つもる","つよい","つるぼ","つるみく","つわもの","つわり","てあし","てあて","てあみ","ていおん","ていか","ていき","ていけい","ていこく","ていさつ","ていし","ていせい","ていたい","ていど","ていねい","ていひょう","ていへん","ていぼう","てうち","ておくれ","てきとう","てくび","でこぼこ","てさぎょう","てさげ","てすり","てそう","てちがい","てちょう","てつがく","てつづき","でっぱ","てつぼう","てつや","でぬかえ","てぬき","てぬぐい","てのひら","てはい","てぶくろ","てふだ","てほどき","てほん","てまえ","てまきずし","てみじか","てみやげ","てらす","てれび","てわけ","てわたし","でんあつ","てんいん","てんかい","てんき","てんぐ","てんけん","てんごく","てんさい","てんし","てんすう","でんち","てんてき","てんとう","てんない","てんぷら","てんぼうだい","てんめつ","てんらんかい","でんりょく","でんわ","どあい","といれ","どうかん","とうきゅう","どうぐ","とうし","とうむぎ","とおい","とおか","とおく","とおす","とおる","とかい","とかす","ときおり","ときどき","とくい","とくしゅう","とくてん","とくに","とくべつ","とけい","とける","とこや","とさか","としょかん","とそう","とたん","とちゅう","とっきゅう","とっくん","とつぜん","とつにゅう","とどける","ととのえる","とない","となえる","となり","とのさま","とばす","どぶがわ","とほう","とまる","とめる","ともだち","ともる","どようび","とらえる","とんかつ","どんぶり","ないかく","ないこう","ないしょ","ないす","ないせん","ないそう","なおす","ながい","なくす","なげる","なこうど","なさけ","なたでここ","なっとう","なつやすみ","ななおし","なにごと","なにもの","なにわ","なのか","なふだ","なまいき","なまえ","なまみ","なみだ","なめらか","なめる","なやむ","ならう","ならび","ならぶ","なれる","なわとび","なわばり","にあう","にいがた","にうけ","におい","にかい","にがて","にきび","にくしみ","にくまん","にげる","にさんかたんそ","にしき","にせもの","にちじょう","にちようび","にっか","にっき","にっけい","にっこう","にっさん","にっしょく","にっすう","にっせき","にってい","になう","にほん","にまめ","にもつ","にやり","にゅういん","にりんしゃ","にわとり","にんい","にんか","にんき","にんげん","にんしき","にんずう","にんそう","にんたい","にんち","にんてい","にんにく","にんぷ","にんまり","にんむ","にんめい","にんよう","ぬいくぎ","ぬかす","ぬぐいとる","ぬぐう","ぬくもり","ぬすむ","ぬまえび","ぬめり","ぬらす","ぬんちゃく","ねあげ","ねいき","ねいる","ねいろ","ねぐせ","ねくたい","ねくら","ねこぜ","ねこむ","ねさげ","ねすごす","ねそべる","ねだん","ねつい","ねっしん","ねつぞう","ねったいぎょ","ねぶそく","ねふだ","ねぼう","ねほりはほり","ねまき","ねまわし","ねみみ","ねむい","ねむたい","ねもと","ねらう","ねわざ","ねんいり","ねんおし","ねんかん","ねんきん","ねんぐ","ねんざ","ねんし","ねんちゃく","ねんど","ねんぴ","ねんぶつ","ねんまつ","ねんりょう","ねんれい","のいず","のおづま","のがす","のきなみ","のこぎり","のこす","のこる","のせる","のぞく","のぞむ","のたまう","のちほど","のっく","のばす","のはら","のべる","のぼる","のみもの","のやま","のらいぬ","のらねこ","のりもの","のりゆき","のれん","のんき","ばあい","はあく","ばあさん","ばいか","ばいく","はいけん","はいご","はいしん","はいすい","はいせん","はいそう","はいち","ばいばい","はいれつ","はえる","はおる","はかい","ばかり","はかる","はくしゅ","はけん","はこぶ","はさみ","はさん","はしご","ばしょ","はしる","はせる","ぱそこん","はそん","はたん","はちみつ","はつおん","はっかく","はづき","はっきり","はっくつ","はっけん","はっこう","はっさん","はっしん","はったつ","はっちゅう","はってん","はっぴょう","はっぽう","はなす","はなび","はにかむ","はぶらし","はみがき","はむかう","はめつ","はやい","はやし","はらう","はろうぃん","はわい","はんい","はんえい","はんおん","はんかく","はんきょう","ばんぐみ","はんこ","はんしゃ","はんすう","はんだん","ぱんち","ぱんつ","はんてい","はんとし","はんのう","はんぱ","はんぶん","はんぺん","はんぼうき","はんめい","はんらん","はんろん","ひいき","ひうん","ひえる","ひかく","ひかり","ひかる","ひかん","ひくい","ひけつ","ひこうき","ひこく","ひさい","ひさしぶり","ひさん","びじゅつかん","ひしょ","ひそか","ひそむ","ひたむき","ひだり","ひたる","ひつぎ","ひっこし","ひっし","ひつじゅひん","ひっす","ひつぜん","ぴったり","ぴっちり","ひつよう","ひてい","ひとごみ","ひなまつり","ひなん","ひねる","ひはん","ひびく","ひひょう","ひほう","ひまわり","ひまん","ひみつ","ひめい","ひめじし","ひやけ","ひやす","ひよう","びょうき","ひらがな","ひらく","ひりつ","ひりょう","ひるま","ひるやすみ","ひれい","ひろい","ひろう","ひろき","ひろゆき","ひんかく","ひんけつ","ひんこん","ひんしゅ","ひんそう","ぴんち","ひんぱん","びんぼう","ふあん","ふいうち","ふうけい","ふうせん","ぷうたろう","ふうとう","ふうふ","ふえる","ふおん","ふかい","ふきん","ふくざつ","ふくぶくろ","ふこう","ふさい","ふしぎ","ふじみ","ふすま","ふせい","ふせぐ","ふそく","ぶたにく","ふたん","ふちょう","ふつう","ふつか","ふっかつ","ふっき","ふっこく","ぶどう","ふとる","ふとん","ふのう","ふはい","ふひょう","ふへん","ふまん","ふみん","ふめつ","ふめん","ふよう","ふりこ","ふりる","ふるい","ふんいき","ぶんがく","ぶんぐ","ふんしつ","ぶんせき","ふんそう","ぶんぽう","へいあん","へいおん","へいがい","へいき","へいげん","へいこう","へいさ","へいしゃ","へいせつ","へいそ","へいたく","へいてん","へいねつ","へいわ","へきが","へこむ","べにいろ","べにしょうが","へらす","へんかん","べんきょう","べんごし","へんさい","へんたい","べんり","ほあん","ほいく","ぼうぎょ","ほうこく","ほうそう","ほうほう","ほうもん","ほうりつ","ほえる","ほおん","ほかん","ほきょう","ぼきん","ほくろ","ほけつ","ほけん","ほこう","ほこる","ほしい","ほしつ","ほしゅ","ほしょう","ほせい","ほそい","ほそく","ほたて","ほたる","ぽちぶくろ","ほっきょく","ほっさ","ほったん","ほとんど","ほめる","ほんい","ほんき","ほんけ","ほんしつ","ほんやく","まいにち","まかい","まかせる","まがる","まける","まこと","まさつ","まじめ","ますく","まぜる","まつり","まとめ","まなぶ","まぬけ","まねく","まほう","まもる","まゆげ","まよう","まろやか","まわす","まわり","まわる","まんが","まんきつ","まんぞく","まんなか","みいら","みうち","みえる","みがく","みかた","みかん","みけん","みこん","みじかい","みすい","みすえる","みせる","みっか","みつかる","みつける","みてい","みとめる","みなと","みなみかさい","みねらる","みのう","みのがす","みほん","みもと","みやげ","みらい","みりょく","みわく","みんか","みんぞく","むいか","むえき","むえん","むかい","むかう","むかえ","むかし","むぎちゃ","むける","むげん","むさぼる","むしあつい","むしば","むじゅん","むしろ","むすう","むすこ","むすぶ","むすめ","むせる","むせん","むちゅう","むなしい","むのう","むやみ","むよう","むらさき","むりょう","むろん","めいあん","めいうん","めいえん","めいかく","めいきょく","めいさい","めいし","めいそう","めいぶつ","めいれい","めいわく","めぐまれる","めざす","めした","めずらしい","めだつ","めまい","めやす","めんきょ","めんせき","めんどう","もうしあげる","もうどうけん","もえる","もくし","もくてき","もくようび","もちろん","もどる","もらう","もんく","もんだい","やおや","やける","やさい","やさしい","やすい","やすたろう","やすみ","やせる","やそう","やたい","やちん","やっと","やっぱり","やぶる","やめる","ややこしい","やよい","やわらかい","ゆうき","ゆうびんきょく","ゆうべ","ゆうめい","ゆけつ","ゆしゅつ","ゆせん","ゆそう","ゆたか","ゆちゃく","ゆでる","ゆにゅう","ゆびわ","ゆらい","ゆれる","ようい","ようか","ようきゅう","ようじ","ようす","ようちえん","よかぜ","よかん","よきん","よくせい","よくぼう","よけい","よごれる","よさん","よしゅう","よそう","よそく","よっか","よてい","よどがわく","よねつ","よやく","よゆう","よろこぶ","よろしい","らいう","らくがき","らくご","らくさつ","らくだ","らしんばん","らせん","らぞく","らたい","らっか","られつ","りえき","りかい","りきさく","りきせつ","りくぐん","りくつ","りけん","りこう","りせい","りそう","りそく","りてん","りねん","りゆう","りゅうがく","りよう","りょうり","りょかん","りょくちゃ","りょこう","りりく","りれき","りろん","りんご","るいけい","るいさい","るいじ","るいせき","るすばん","るりがわら","れいかん","れいぎ","れいせい","れいぞうこ","れいとう","れいぼう","れきし","れきだい","れんあい","れんけい","れんこん","れんさい","れんしゅう","れんぞく","れんらく","ろうか","ろうご","ろうじん","ろうそく","ろくが","ろこつ","ろじうら","ろしゅつ","ろせん","ろてん","ろめん","ろれつ","ろんぎ","ろんぱ","ろんぶん","ろんり","わかす","わかめ","わかやま","わかれる","わしつ","わじまし","わすれもの","わらう","われる"]');
  91343. /***/ }),
  91344. /***/ 8013:
  91345. /***/ ((module) => {
  91346. "use strict";
  91347. module.exports = JSON.parse('["가격","가끔","가난","가능","가득","가르침","가뭄","가방","가상","가슴","가운데","가을","가이드","가입","가장","가정","가족","가죽","각오","각자","간격","간부","간섭","간장","간접","간판","갈등","갈비","갈색","갈증","감각","감기","감소","감수성","감자","감정","갑자기","강남","강당","강도","강력히","강변","강북","강사","강수량","강아지","강원도","강의","강제","강조","같이","개구리","개나리","개방","개별","개선","개성","개인","객관적","거실","거액","거울","거짓","거품","걱정","건강","건물","건설","건조","건축","걸음","검사","검토","게시판","게임","겨울","견해","결과","결국","결론","결석","결승","결심","결정","결혼","경계","경고","경기","경력","경복궁","경비","경상도","경영","경우","경쟁","경제","경주","경찰","경치","경향","경험","계곡","계단","계란","계산","계속","계약","계절","계층","계획","고객","고구려","고궁","고급","고등학생","고무신","고민","고양이","고장","고전","고집","고춧가루","고통","고향","곡식","골목","골짜기","골프","공간","공개","공격","공군","공급","공기","공동","공무원","공부","공사","공식","공업","공연","공원","공장","공짜","공책","공통","공포","공항","공휴일","과목","과일","과장","과정","과학","관객","관계","관광","관념","관람","관련","관리","관습","관심","관점","관찰","광경","광고","광장","광주","괴로움","굉장히","교과서","교문","교복","교실","교양","교육","교장","교직","교통","교환","교훈","구경","구름","구멍","구별","구분","구석","구성","구속","구역","구입","구청","구체적","국가","국기","국내","국립","국물","국민","국수","국어","국왕","국적","국제","국회","군대","군사","군인","궁극적","권리","권위","권투","귀국","귀신","규정","규칙","균형","그날","그냥","그늘","그러나","그룹","그릇","그림","그제서야","그토록","극복","극히","근거","근교","근래","근로","근무","근본","근원","근육","근처","글씨","글자","금강산","금고","금년","금메달","금액","금연","금요일","금지","긍정적","기간","기관","기념","기능","기독교","기둥","기록","기름","기법","기본","기분","기쁨","기숙사","기술","기억","기업","기온","기운","기원","기적","기준","기침","기혼","기획","긴급","긴장","길이","김밥","김치","김포공항","깍두기","깜빡","깨달음","깨소금","껍질","꼭대기","꽃잎","나들이","나란히","나머지","나물","나침반","나흘","낙엽","난방","날개","날씨","날짜","남녀","남대문","남매","남산","남자","남편","남학생","낭비","낱말","내년","내용","내일","냄비","냄새","냇물","냉동","냉면","냉방","냉장고","넥타이","넷째","노동","노란색","노력","노인","녹음","녹차","녹화","논리","논문","논쟁","놀이","농구","농담","농민","농부","농업","농장","농촌","높이","눈동자","눈물","눈썹","뉴욕","느낌","늑대","능동적","능력","다방","다양성","다음","다이어트","다행","단계","단골","단독","단맛","단순","단어","단위","단점","단체","단추","단편","단풍","달걀","달러","달력","달리","닭고기","담당","담배","담요","담임","답변","답장","당근","당분간","당연히","당장","대규모","대낮","대단히","대답","대도시","대략","대량","대륙","대문","대부분","대신","대응","대장","대전","대접","대중","대책","대출","대충","대통령","대학","대한민국","대합실","대형","덩어리","데이트","도대체","도덕","도둑","도망","도서관","도심","도움","도입","도자기","도저히","도전","도중","도착","독감","독립","독서","독일","독창적","동화책","뒷모습","뒷산","딸아이","마누라","마늘","마당","마라톤","마련","마무리","마사지","마약","마요네즈","마을","마음","마이크","마중","마지막","마찬가지","마찰","마흔","막걸리","막내","막상","만남","만두","만세","만약","만일","만점","만족","만화","많이","말기","말씀","말투","맘대로","망원경","매년","매달","매력","매번","매스컴","매일","매장","맥주","먹이","먼저","먼지","멀리","메일","며느리","며칠","면담","멸치","명단","명령","명예","명의","명절","명칭","명함","모금","모니터","모델","모든","모범","모습","모양","모임","모조리","모집","모퉁이","목걸이","목록","목사","목소리","목숨","목적","목표","몰래","몸매","몸무게","몸살","몸속","몸짓","몸통","몹시","무관심","무궁화","무더위","무덤","무릎","무슨","무엇","무역","무용","무조건","무지개","무척","문구","문득","문법","문서","문제","문학","문화","물가","물건","물결","물고기","물론","물리학","물음","물질","물체","미국","미디어","미사일","미술","미역","미용실","미움","미인","미팅","미혼","민간","민족","민주","믿음","밀가루","밀리미터","밑바닥","바가지","바구니","바나나","바늘","바닥","바닷가","바람","바이러스","바탕","박물관","박사","박수","반대","반드시","반말","반발","반성","반응","반장","반죽","반지","반찬","받침","발가락","발걸음","발견","발달","발레","발목","발바닥","발생","발음","발자국","발전","발톱","발표","밤하늘","밥그릇","밥맛","밥상","밥솥","방금","방면","방문","방바닥","방법","방송","방식","방안","방울","방지","방학","방해","방향","배경","배꼽","배달","배드민턴","백두산","백색","백성","백인","백제","백화점","버릇","버섯","버튼","번개","번역","번지","번호","벌금","벌레","벌써","범위","범인","범죄","법률","법원","법적","법칙","베이징","벨트","변경","변동","변명","변신","변호사","변화","별도","별명","별일","병실","병아리","병원","보관","보너스","보라색","보람","보름","보상","보안","보자기","보장","보전","보존","보통","보편적","보험","복도","복사","복숭아","복습","볶음","본격적","본래","본부","본사","본성","본인","본질","볼펜","봉사","봉지","봉투","부근","부끄러움","부담","부동산","부문","부분","부산","부상","부엌","부인","부작용","부장","부정","부족","부지런히","부친","부탁","부품","부회장","북부","북한","분노","분량","분리","분명","분석","분야","분위기","분필","분홍색","불고기","불과","불교","불꽃","불만","불법","불빛","불안","불이익","불행","브랜드","비극","비난","비닐","비둘기","비디오","비로소","비만","비명","비밀","비바람","비빔밥","비상","비용","비율","비중","비타민","비판","빌딩","빗물","빗방울","빗줄기","빛깔","빨간색","빨래","빨리","사건","사계절","사나이","사냥","사람","사랑","사립","사모님","사물","사방","사상","사생활","사설","사슴","사실","사업","사용","사월","사장","사전","사진","사촌","사춘기","사탕","사투리","사흘","산길","산부인과","산업","산책","살림","살인","살짝","삼계탕","삼국","삼십","삼월","삼촌","상관","상금","상대","상류","상반기","상상","상식","상업","상인","상자","상점","상처","상추","상태","상표","상품","상황","새벽","색깔","색연필","생각","생명","생물","생방송","생산","생선","생신","생일","생활","서랍","서른","서명","서민","서비스","서양","서울","서적","서점","서쪽","서클","석사","석유","선거","선물","선배","선생","선수","선원","선장","선전","선택","선풍기","설거지","설날","설렁탕","설명","설문","설사","설악산","설치","설탕","섭씨","성공","성당","성명","성별","성인","성장","성적","성질","성함","세금","세미나","세상","세월","세종대왕","세탁","센터","센티미터","셋째","소규모","소극적","소금","소나기","소년","소득","소망","소문","소설","소속","소아과","소용","소원","소음","소중히","소지품","소질","소풍","소형","속담","속도","속옷","손가락","손길","손녀","손님","손등","손목","손뼉","손실","손질","손톱","손해","솔직히","솜씨","송아지","송이","송편","쇠고기","쇼핑","수건","수년","수단","수돗물","수동적","수면","수명","수박","수상","수석","수술","수시로","수업","수염","수영","수입","수준","수집","수출","수컷","수필","수학","수험생","수화기","숙녀","숙소","숙제","순간","순서","순수","순식간","순위","숟가락","술병","술집","숫자","스님","스물","스스로","스승","스웨터","스위치","스케이트","스튜디오","스트레스","스포츠","슬쩍","슬픔","습관","습기","승객","승리","승부","승용차","승진","시각","시간","시골","시금치","시나리오","시댁","시리즈","시멘트","시민","시부모","시선","시설","시스템","시아버지","시어머니","시월","시인","시일","시작","시장","시절","시점","시중","시즌","시집","시청","시합","시험","식구","식기","식당","식량","식료품","식물","식빵","식사","식생활","식초","식탁","식품","신고","신규","신념","신문","신발","신비","신사","신세","신용","신제품","신청","신체","신화","실감","실내","실력","실례","실망","실수","실습","실시","실장","실정","실질적","실천","실체","실컷","실태","실패","실험","실현","심리","심부름","심사","심장","심정","심판","쌍둥이","씨름","씨앗","아가씨","아나운서","아드님","아들","아쉬움","아스팔트","아시아","아울러","아저씨","아줌마","아직","아침","아파트","아프리카","아픔","아홉","아흔","악기","악몽","악수","안개","안경","안과","안내","안녕","안동","안방","안부","안주","알루미늄","알코올","암시","암컷","압력","앞날","앞문","애인","애정","액수","앨범","야간","야단","야옹","약간","약국","약속","약수","약점","약품","약혼녀","양념","양력","양말","양배추","양주","양파","어둠","어려움","어른","어젯밤","어쨌든","어쩌다가","어쩐지","언니","언덕","언론","언어","얼굴","얼른","얼음","얼핏","엄마","업무","업종","업체","엉덩이","엉망","엉터리","엊그제","에너지","에어컨","엔진","여건","여고생","여관","여군","여권","여대생","여덟","여동생","여든","여론","여름","여섯","여성","여왕","여인","여전히","여직원","여학생","여행","역사","역시","역할","연결","연구","연극","연기","연락","연설","연세","연속","연습","연애","연예인","연인","연장","연주","연출","연필","연합","연휴","열기","열매","열쇠","열심히","열정","열차","열흘","염려","엽서","영국","영남","영상","영양","영역","영웅","영원히","영하","영향","영혼","영화","옆구리","옆방","옆집","예감","예금","예방","예산","예상","예선","예술","예습","예식장","예약","예전","예절","예정","예컨대","옛날","오늘","오락","오랫동안","오렌지","오로지","오른발","오븐","오십","오염","오월","오전","오직","오징어","오페라","오피스텔","오히려","옥상","옥수수","온갖","온라인","온몸","온종일","온통","올가을","올림픽","올해","옷차림","와이셔츠","와인","완성","완전","왕비","왕자","왜냐하면","왠지","외갓집","외국","외로움","외삼촌","외출","외침","외할머니","왼발","왼손","왼쪽","요금","요일","요즘","요청","용기","용서","용어","우산","우선","우승","우연히","우정","우체국","우편","운동","운명","운반","운전","운행","울산","울음","움직임","웃어른","웃음","워낙","원고","원래","원서","원숭이","원인","원장","원피스","월급","월드컵","월세","월요일","웨이터","위반","위법","위성","위원","위험","위협","윗사람","유난히","유럽","유명","유물","유산","유적","유치원","유학","유행","유형","육군","육상","육십","육체","은행","음력","음료","음반","음성","음식","음악","음주","의견","의논","의문","의복","의식","의심","의외로","의욕","의원","의학","이것","이곳","이념","이놈","이달","이대로","이동","이렇게","이력서","이론적","이름","이민","이발소","이별","이불","이빨","이상","이성","이슬","이야기","이용","이웃","이월","이윽고","이익","이전","이중","이튿날","이틀","이혼","인간","인격","인공","인구","인근","인기","인도","인류","인물","인생","인쇄","인연","인원","인재","인종","인천","인체","인터넷","인하","인형","일곱","일기","일단","일대","일등","일반","일본","일부","일상","일생","일손","일요일","일월","일정","일종","일주일","일찍","일체","일치","일행","일회용","임금","임무","입대","입력","입맛","입사","입술","입시","입원","입장","입학","자가용","자격","자극","자동","자랑","자부심","자식","자신","자연","자원","자율","자전거","자정","자존심","자판","작가","작년","작성","작업","작용","작은딸","작품","잔디","잔뜩","잔치","잘못","잠깐","잠수함","잠시","잠옷","잠자리","잡지","장관","장군","장기간","장래","장례","장르","장마","장면","장모","장미","장비","장사","장소","장식","장애인","장인","장점","장차","장학금","재능","재빨리","재산","재생","재작년","재정","재채기","재판","재학","재활용","저것","저고리","저곳","저녁","저런","저렇게","저번","저울","저절로","저축","적극","적당히","적성","적용","적응","전개","전공","전기","전달","전라도","전망","전문","전반","전부","전세","전시","전용","전자","전쟁","전주","전철","전체","전통","전혀","전후","절대","절망","절반","절약","절차","점검","점수","점심","점원","점점","점차","접근","접시","접촉","젓가락","정거장","정도","정류장","정리","정말","정면","정문","정반대","정보","정부","정비","정상","정성","정오","정원","정장","정지","정치","정확히","제공","제과점","제대로","제목","제발","제법","제삿날","제안","제일","제작","제주도","제출","제품","제한","조각","조건","조금","조깅","조명","조미료","조상","조선","조용히","조절","조정","조직","존댓말","존재","졸업","졸음","종교","종로","종류","종소리","종업원","종종","종합","좌석","죄인","주관적","주름","주말","주머니","주먹","주문","주민","주방","주변","주식","주인","주일","주장","주전자","주택","준비","줄거리","줄기","줄무늬","중간","중계방송","중국","중년","중단","중독","중반","중부","중세","중소기업","중순","중앙","중요","중학교","즉석","즉시","즐거움","증가","증거","증권","증상","증세","지각","지갑","지경","지극히","지금","지급","지능","지름길","지리산","지방","지붕","지식","지역","지우개","지원","지적","지점","지진","지출","직선","직업","직원","직장","진급","진동","진로","진료","진리","진짜","진찰","진출","진통","진행","질문","질병","질서","짐작","집단","집안","집중","짜증","찌꺼기","차남","차라리","차량","차림","차별","차선","차츰","착각","찬물","찬성","참가","참기름","참새","참석","참여","참외","참조","찻잔","창가","창고","창구","창문","창밖","창작","창조","채널","채점","책가방","책방","책상","책임","챔피언","처벌","처음","천국","천둥","천장","천재","천천히","철도","철저히","철학","첫날","첫째","청년","청바지","청소","청춘","체계","체력","체온","체육","체중","체험","초등학생","초반","초밥","초상화","초순","초여름","초원","초저녁","초점","초청","초콜릿","촛불","총각","총리","총장","촬영","최근","최상","최선","최신","최악","최종","추석","추억","추진","추천","추측","축구","축소","축제","축하","출근","출발","출산","출신","출연","출입","출장","출판","충격","충고","충돌","충분히","충청도","취업","취직","취향","치약","친구","친척","칠십","칠월","칠판","침대","침묵","침실","칫솔","칭찬","카메라","카운터","칼국수","캐릭터","캠퍼스","캠페인","커튼","컨디션","컬러","컴퓨터","코끼리","코미디","콘서트","콜라","콤플렉스","콩나물","쾌감","쿠데타","크림","큰길","큰딸","큰소리","큰아들","큰어머니","큰일","큰절","클래식","클럽","킬로","타입","타자기","탁구","탁자","탄생","태권도","태양","태풍","택시","탤런트","터널","터미널","테니스","테스트","테이블","텔레비전","토론","토마토","토요일","통계","통과","통로","통신","통역","통일","통장","통제","통증","통합","통화","퇴근","퇴원","퇴직금","튀김","트럭","특급","특별","특성","특수","특징","특히","튼튼히","티셔츠","파란색","파일","파출소","판결","판단","판매","판사","팔십","팔월","팝송","패션","팩스","팩시밀리","팬티","퍼센트","페인트","편견","편의","편지","편히","평가","평균","평생","평소","평양","평일","평화","포스터","포인트","포장","포함","표면","표정","표준","표현","품목","품질","풍경","풍속","풍습","프랑스","프린터","플라스틱","피곤","피망","피아노","필름","필수","필요","필자","필통","핑계","하느님","하늘","하드웨어","하룻밤","하반기","하숙집","하순","하여튼","하지만","하천","하품","하필","학과","학교","학급","학기","학년","학력","학번","학부모","학비","학생","학술","학습","학용품","학원","학위","학자","학점","한계","한글","한꺼번에","한낮","한눈","한동안","한때","한라산","한마디","한문","한번","한복","한식","한여름","한쪽","할머니","할아버지","할인","함께","함부로","합격","합리적","항공","항구","항상","항의","해결","해군","해답","해당","해물","해석","해설","해수욕장","해안","핵심","핸드백","햄버거","햇볕","햇살","행동","행복","행사","행운","행위","향기","향상","향수","허락","허용","헬기","현관","현금","현대","현상","현실","현장","현재","현지","혈액","협력","형부","형사","형수","형식","형제","형태","형편","혜택","호기심","호남","호랑이","호박","호텔","호흡","혹시","홀로","홈페이지","홍보","홍수","홍차","화면","화분","화살","화요일","화장","화학","확보","확인","확장","확정","환갑","환경","환영","환율","환자","활기","활동","활발히","활용","활짝","회견","회관","회복","회색","회원","회장","회전","횟수","횡단보도","효율적","후반","후춧가루","훈련","훨씬","휴식","휴일","흉내","흐름","흑백","흑인","흔적","흔히","흥미","흥분","희곡","희망","희생","흰색","힘껏"]');
  91348. /***/ }),
  91349. /***/ 71945:
  91350. /***/ ((module) => {
  91351. "use strict";
  91352. module.exports = JSON.parse('["abacate","abaixo","abalar","abater","abduzir","abelha","aberto","abismo","abotoar","abranger","abreviar","abrigar","abrupto","absinto","absoluto","absurdo","abutre","acabado","acalmar","acampar","acanhar","acaso","aceitar","acelerar","acenar","acervo","acessar","acetona","achatar","acidez","acima","acionado","acirrar","aclamar","aclive","acolhida","acomodar","acoplar","acordar","acumular","acusador","adaptar","adega","adentro","adepto","adequar","aderente","adesivo","adeus","adiante","aditivo","adjetivo","adjunto","admirar","adorar","adquirir","adubo","adverso","advogado","aeronave","afastar","aferir","afetivo","afinador","afivelar","aflito","afluente","afrontar","agachar","agarrar","agasalho","agenciar","agilizar","agiota","agitado","agora","agradar","agreste","agrupar","aguardar","agulha","ajoelhar","ajudar","ajustar","alameda","alarme","alastrar","alavanca","albergue","albino","alcatra","aldeia","alecrim","alegria","alertar","alface","alfinete","algum","alheio","aliar","alicate","alienar","alinhar","aliviar","almofada","alocar","alpiste","alterar","altitude","alucinar","alugar","aluno","alusivo","alvo","amaciar","amador","amarelo","amassar","ambas","ambiente","ameixa","amenizar","amido","amistoso","amizade","amolador","amontoar","amoroso","amostra","amparar","ampliar","ampola","anagrama","analisar","anarquia","anatomia","andaime","anel","anexo","angular","animar","anjo","anomalia","anotado","ansioso","anterior","anuidade","anunciar","anzol","apagador","apalpar","apanhado","apego","apelido","apertada","apesar","apetite","apito","aplauso","aplicada","apoio","apontar","aposta","aprendiz","aprovar","aquecer","arame","aranha","arara","arcada","ardente","areia","arejar","arenito","aresta","argiloso","argola","arma","arquivo","arraial","arrebate","arriscar","arroba","arrumar","arsenal","arterial","artigo","arvoredo","asfaltar","asilado","aspirar","assador","assinar","assoalho","assunto","astral","atacado","atadura","atalho","atarefar","atear","atender","aterro","ateu","atingir","atirador","ativo","atoleiro","atracar","atrevido","atriz","atual","atum","auditor","aumentar","aura","aurora","autismo","autoria","autuar","avaliar","avante","avaria","avental","avesso","aviador","avisar","avulso","axila","azarar","azedo","azeite","azulejo","babar","babosa","bacalhau","bacharel","bacia","bagagem","baiano","bailar","baioneta","bairro","baixista","bajular","baleia","baliza","balsa","banal","bandeira","banho","banir","banquete","barato","barbado","baronesa","barraca","barulho","baseado","bastante","batata","batedor","batida","batom","batucar","baunilha","beber","beijo","beirada","beisebol","beldade","beleza","belga","beliscar","bendito","bengala","benzer","berimbau","berlinda","berro","besouro","bexiga","bezerro","bico","bicudo","bienal","bifocal","bifurcar","bigorna","bilhete","bimestre","bimotor","biologia","biombo","biosfera","bipolar","birrento","biscoito","bisneto","bispo","bissexto","bitola","bizarro","blindado","bloco","bloquear","boato","bobagem","bocado","bocejo","bochecha","boicotar","bolada","boletim","bolha","bolo","bombeiro","bonde","boneco","bonita","borbulha","borda","boreal","borracha","bovino","boxeador","branco","brasa","braveza","breu","briga","brilho","brincar","broa","brochura","bronzear","broto","bruxo","bucha","budismo","bufar","bule","buraco","busca","busto","buzina","cabana","cabelo","cabide","cabo","cabrito","cacau","cacetada","cachorro","cacique","cadastro","cadeado","cafezal","caiaque","caipira","caixote","cajado","caju","calafrio","calcular","caldeira","calibrar","calmante","calota","camada","cambista","camisa","camomila","campanha","camuflar","canavial","cancelar","caneta","canguru","canhoto","canivete","canoa","cansado","cantar","canudo","capacho","capela","capinar","capotar","capricho","captador","capuz","caracol","carbono","cardeal","careca","carimbar","carneiro","carpete","carreira","cartaz","carvalho","casaco","casca","casebre","castelo","casulo","catarata","cativar","caule","causador","cautelar","cavalo","caverna","cebola","cedilha","cegonha","celebrar","celular","cenoura","censo","centeio","cercar","cerrado","certeiro","cerveja","cetim","cevada","chacota","chaleira","chamado","chapada","charme","chatice","chave","chefe","chegada","cheiro","cheque","chicote","chifre","chinelo","chocalho","chover","chumbo","chutar","chuva","cicatriz","ciclone","cidade","cidreira","ciente","cigana","cimento","cinto","cinza","ciranda","circuito","cirurgia","citar","clareza","clero","clicar","clone","clube","coado","coagir","cobaia","cobertor","cobrar","cocada","coelho","coentro","coeso","cogumelo","coibir","coifa","coiote","colar","coleira","colher","colidir","colmeia","colono","coluna","comando","combinar","comentar","comitiva","comover","complexo","comum","concha","condor","conectar","confuso","congelar","conhecer","conjugar","consumir","contrato","convite","cooperar","copeiro","copiador","copo","coquetel","coragem","cordial","corneta","coronha","corporal","correio","cortejo","coruja","corvo","cosseno","costela","cotonete","couro","couve","covil","cozinha","cratera","cravo","creche","credor","creme","crer","crespo","criada","criminal","crioulo","crise","criticar","crosta","crua","cruzeiro","cubano","cueca","cuidado","cujo","culatra","culminar","culpar","cultura","cumprir","cunhado","cupido","curativo","curral","cursar","curto","cuspir","custear","cutelo","damasco","datar","debater","debitar","deboche","debulhar","decalque","decimal","declive","decote","decretar","dedal","dedicado","deduzir","defesa","defumar","degelo","degrau","degustar","deitado","deixar","delator","delegado","delinear","delonga","demanda","demitir","demolido","dentista","depenado","depilar","depois","depressa","depurar","deriva","derramar","desafio","desbotar","descanso","desenho","desfiado","desgaste","desigual","deslize","desmamar","desova","despesa","destaque","desviar","detalhar","detentor","detonar","detrito","deusa","dever","devido","devotado","dezena","diagrama","dialeto","didata","difuso","digitar","dilatado","diluente","diminuir","dinastia","dinheiro","diocese","direto","discreta","disfarce","disparo","disquete","dissipar","distante","ditador","diurno","diverso","divisor","divulgar","dizer","dobrador","dolorido","domador","dominado","donativo","donzela","dormente","dorsal","dosagem","dourado","doutor","drenagem","drible","drogaria","duelar","duende","dueto","duplo","duquesa","durante","duvidoso","eclodir","ecoar","ecologia","edificar","edital","educado","efeito","efetivar","ejetar","elaborar","eleger","eleitor","elenco","elevador","eliminar","elogiar","embargo","embolado","embrulho","embutido","emenda","emergir","emissor","empatia","empenho","empinado","empolgar","emprego","empurrar","emulador","encaixe","encenado","enchente","encontro","endeusar","endossar","enfaixar","enfeite","enfim","engajado","engenho","englobar","engomado","engraxar","enguia","enjoar","enlatar","enquanto","enraizar","enrolado","enrugar","ensaio","enseada","ensino","ensopado","entanto","enteado","entidade","entortar","entrada","entulho","envergar","enviado","envolver","enxame","enxerto","enxofre","enxuto","epiderme","equipar","ereto","erguido","errata","erva","ervilha","esbanjar","esbelto","escama","escola","escrita","escuta","esfinge","esfolar","esfregar","esfumado","esgrima","esmalte","espanto","espelho","espiga","esponja","espreita","espumar","esquerda","estaca","esteira","esticar","estofado","estrela","estudo","esvaziar","etanol","etiqueta","euforia","europeu","evacuar","evaporar","evasivo","eventual","evidente","evoluir","exagero","exalar","examinar","exato","exausto","excesso","excitar","exclamar","executar","exemplo","exibir","exigente","exonerar","expandir","expelir","expirar","explanar","exposto","expresso","expulsar","externo","extinto","extrato","fabricar","fabuloso","faceta","facial","fada","fadiga","faixa","falar","falta","familiar","fandango","fanfarra","fantoche","fardado","farelo","farinha","farofa","farpa","fartura","fatia","fator","favorita","faxina","fazenda","fechado","feijoada","feirante","felino","feminino","fenda","feno","fera","feriado","ferrugem","ferver","festejar","fetal","feudal","fiapo","fibrose","ficar","ficheiro","figurado","fileira","filho","filme","filtrar","firmeza","fisgada","fissura","fita","fivela","fixador","fixo","flacidez","flamingo","flanela","flechada","flora","flutuar","fluxo","focal","focinho","fofocar","fogo","foguete","foice","folgado","folheto","forjar","formiga","forno","forte","fosco","fossa","fragata","fralda","frango","frasco","fraterno","freira","frente","fretar","frieza","friso","fritura","fronha","frustrar","fruteira","fugir","fulano","fuligem","fundar","fungo","funil","furador","furioso","futebol","gabarito","gabinete","gado","gaiato","gaiola","gaivota","galega","galho","galinha","galocha","ganhar","garagem","garfo","gargalo","garimpo","garoupa","garrafa","gasoduto","gasto","gata","gatilho","gaveta","gazela","gelado","geleia","gelo","gemada","gemer","gemido","generoso","gengiva","genial","genoma","genro","geologia","gerador","germinar","gesso","gestor","ginasta","gincana","gingado","girafa","girino","glacial","glicose","global","glorioso","goela","goiaba","golfe","golpear","gordura","gorjeta","gorro","gostoso","goteira","governar","gracejo","gradual","grafite","gralha","grampo","granada","gratuito","graveto","graxa","grego","grelhar","greve","grilo","grisalho","gritaria","grosso","grotesco","grudado","grunhido","gruta","guache","guarani","guaxinim","guerrear","guiar","guincho","guisado","gula","guloso","guru","habitar","harmonia","haste","haver","hectare","herdar","heresia","hesitar","hiato","hibernar","hidratar","hiena","hino","hipismo","hipnose","hipoteca","hoje","holofote","homem","honesto","honrado","hormonal","hospedar","humorado","iate","ideia","idoso","ignorado","igreja","iguana","ileso","ilha","iludido","iluminar","ilustrar","imagem","imediato","imenso","imersivo","iminente","imitador","imortal","impacto","impedir","implante","impor","imprensa","impune","imunizar","inalador","inapto","inativo","incenso","inchar","incidir","incluir","incolor","indeciso","indireto","indutor","ineficaz","inerente","infantil","infestar","infinito","inflamar","informal","infrator","ingerir","inibido","inicial","inimigo","injetar","inocente","inodoro","inovador","inox","inquieto","inscrito","inseto","insistir","inspetor","instalar","insulto","intacto","integral","intimar","intocado","intriga","invasor","inverno","invicto","invocar","iogurte","iraniano","ironizar","irreal","irritado","isca","isento","isolado","isqueiro","italiano","janeiro","jangada","janta","jararaca","jardim","jarro","jasmim","jato","javali","jazida","jejum","joaninha","joelhada","jogador","joia","jornal","jorrar","jovem","juba","judeu","judoca","juiz","julgador","julho","jurado","jurista","juro","justa","labareda","laboral","lacre","lactante","ladrilho","lagarta","lagoa","laje","lamber","lamentar","laminar","lampejo","lanche","lapidar","lapso","laranja","lareira","largura","lasanha","lastro","lateral","latido","lavanda","lavoura","lavrador","laxante","lazer","lealdade","lebre","legado","legendar","legista","leigo","leiloar","leitura","lembrete","leme","lenhador","lentilha","leoa","lesma","leste","letivo","letreiro","levar","leveza","levitar","liberal","libido","liderar","ligar","ligeiro","limitar","limoeiro","limpador","linda","linear","linhagem","liquidez","listagem","lisura","litoral","livro","lixa","lixeira","locador","locutor","lojista","lombo","lona","longe","lontra","lorde","lotado","loteria","loucura","lousa","louvar","luar","lucidez","lucro","luneta","lustre","lutador","luva","macaco","macete","machado","macio","madeira","madrinha","magnata","magreza","maior","mais","malandro","malha","malote","maluco","mamilo","mamoeiro","mamute","manada","mancha","mandato","manequim","manhoso","manivela","manobrar","mansa","manter","manusear","mapeado","maquinar","marcador","maresia","marfim","margem","marinho","marmita","maroto","marquise","marreco","martelo","marujo","mascote","masmorra","massagem","mastigar","matagal","materno","matinal","matutar","maxilar","medalha","medida","medusa","megafone","meiga","melancia","melhor","membro","memorial","menino","menos","mensagem","mental","merecer","mergulho","mesada","mesclar","mesmo","mesquita","mestre","metade","meteoro","metragem","mexer","mexicano","micro","migalha","migrar","milagre","milenar","milhar","mimado","minerar","minhoca","ministro","minoria","miolo","mirante","mirtilo","misturar","mocidade","moderno","modular","moeda","moer","moinho","moita","moldura","moleza","molho","molinete","molusco","montanha","moqueca","morango","morcego","mordomo","morena","mosaico","mosquete","mostarda","motel","motim","moto","motriz","muda","muito","mulata","mulher","multar","mundial","munido","muralha","murcho","muscular","museu","musical","nacional","nadador","naja","namoro","narina","narrado","nascer","nativa","natureza","navalha","navegar","navio","neblina","nebuloso","negativa","negociar","negrito","nervoso","neta","neural","nevasca","nevoeiro","ninar","ninho","nitidez","nivelar","nobreza","noite","noiva","nomear","nominal","nordeste","nortear","notar","noticiar","noturno","novelo","novilho","novo","nublado","nudez","numeral","nupcial","nutrir","nuvem","obcecado","obedecer","objetivo","obrigado","obscuro","obstetra","obter","obturar","ocidente","ocioso","ocorrer","oculista","ocupado","ofegante","ofensiva","oferenda","oficina","ofuscado","ogiva","olaria","oleoso","olhar","oliveira","ombro","omelete","omisso","omitir","ondulado","oneroso","ontem","opcional","operador","oponente","oportuno","oposto","orar","orbitar","ordem","ordinal","orfanato","orgasmo","orgulho","oriental","origem","oriundo","orla","ortodoxo","orvalho","oscilar","ossada","osso","ostentar","otimismo","ousadia","outono","outubro","ouvido","ovelha","ovular","oxidar","oxigenar","pacato","paciente","pacote","pactuar","padaria","padrinho","pagar","pagode","painel","pairar","paisagem","palavra","palestra","palheta","palito","palmada","palpitar","pancada","panela","panfleto","panqueca","pantanal","papagaio","papelada","papiro","parafina","parcial","pardal","parede","partida","pasmo","passado","pastel","patamar","patente","patinar","patrono","paulada","pausar","peculiar","pedalar","pedestre","pediatra","pedra","pegada","peitoral","peixe","pele","pelicano","penca","pendurar","peneira","penhasco","pensador","pente","perceber","perfeito","pergunta","perito","permitir","perna","perplexo","persiana","pertence","peruca","pescado","pesquisa","pessoa","petiscar","piada","picado","piedade","pigmento","pilastra","pilhado","pilotar","pimenta","pincel","pinguim","pinha","pinote","pintar","pioneiro","pipoca","piquete","piranha","pires","pirueta","piscar","pistola","pitanga","pivete","planta","plaqueta","platina","plebeu","plumagem","pluvial","pneu","poda","poeira","poetisa","polegada","policiar","poluente","polvilho","pomar","pomba","ponderar","pontaria","populoso","porta","possuir","postal","pote","poupar","pouso","povoar","praia","prancha","prato","praxe","prece","predador","prefeito","premiar","prensar","preparar","presilha","pretexto","prevenir","prezar","primata","princesa","prisma","privado","processo","produto","profeta","proibido","projeto","prometer","propagar","prosa","protetor","provador","publicar","pudim","pular","pulmonar","pulseira","punhal","punir","pupilo","pureza","puxador","quadra","quantia","quarto","quase","quebrar","queda","queijo","quente","querido","quimono","quina","quiosque","rabanada","rabisco","rachar","racionar","radial","raiar","rainha","raio","raiva","rajada","ralado","ramal","ranger","ranhura","rapadura","rapel","rapidez","raposa","raquete","raridade","rasante","rascunho","rasgar","raspador","rasteira","rasurar","ratazana","ratoeira","realeza","reanimar","reaver","rebaixar","rebelde","rebolar","recado","recente","recheio","recibo","recordar","recrutar","recuar","rede","redimir","redonda","reduzida","reenvio","refinar","refletir","refogar","refresco","refugiar","regalia","regime","regra","reinado","reitor","rejeitar","relativo","remador","remendo","remorso","renovado","reparo","repelir","repleto","repolho","represa","repudiar","requerer","resenha","resfriar","resgatar","residir","resolver","respeito","ressaca","restante","resumir","retalho","reter","retirar","retomada","retratar","revelar","revisor","revolta","riacho","rica","rigidez","rigoroso","rimar","ringue","risada","risco","risonho","robalo","rochedo","rodada","rodeio","rodovia","roedor","roleta","romano","roncar","rosado","roseira","rosto","rota","roteiro","rotina","rotular","rouco","roupa","roxo","rubro","rugido","rugoso","ruivo","rumo","rupestre","russo","sabor","saciar","sacola","sacudir","sadio","safira","saga","sagrada","saibro","salada","saleiro","salgado","saliva","salpicar","salsicha","saltar","salvador","sambar","samurai","sanar","sanfona","sangue","sanidade","sapato","sarda","sargento","sarjeta","saturar","saudade","saxofone","sazonal","secar","secular","seda","sedento","sediado","sedoso","sedutor","segmento","segredo","segundo","seiva","seleto","selvagem","semanal","semente","senador","senhor","sensual","sentado","separado","sereia","seringa","serra","servo","setembro","setor","sigilo","silhueta","silicone","simetria","simpatia","simular","sinal","sincero","singular","sinopse","sintonia","sirene","siri","situado","soberano","sobra","socorro","sogro","soja","solda","soletrar","solteiro","sombrio","sonata","sondar","sonegar","sonhador","sono","soprano","soquete","sorrir","sorteio","sossego","sotaque","soterrar","sovado","sozinho","suavizar","subida","submerso","subsolo","subtrair","sucata","sucesso","suco","sudeste","sufixo","sugador","sugerir","sujeito","sulfato","sumir","suor","superior","suplicar","suposto","suprimir","surdina","surfista","surpresa","surreal","surtir","suspiro","sustento","tabela","tablete","tabuada","tacho","tagarela","talher","talo","talvez","tamanho","tamborim","tampa","tangente","tanto","tapar","tapioca","tardio","tarefa","tarja","tarraxa","tatuagem","taurino","taxativo","taxista","teatral","tecer","tecido","teclado","tedioso","teia","teimar","telefone","telhado","tempero","tenente","tensor","tentar","termal","terno","terreno","tese","tesoura","testado","teto","textura","texugo","tiara","tigela","tijolo","timbrar","timidez","tingido","tinteiro","tiragem","titular","toalha","tocha","tolerar","tolice","tomada","tomilho","tonel","tontura","topete","tora","torcido","torneio","torque","torrada","torto","tostar","touca","toupeira","toxina","trabalho","tracejar","tradutor","trafegar","trajeto","trama","trancar","trapo","traseiro","tratador","travar","treino","tremer","trepidar","trevo","triagem","tribo","triciclo","tridente","trilogia","trindade","triplo","triturar","triunfal","trocar","trombeta","trova","trunfo","truque","tubular","tucano","tudo","tulipa","tupi","turbo","turma","turquesa","tutelar","tutorial","uivar","umbigo","unha","unidade","uniforme","urologia","urso","urtiga","urubu","usado","usina","usufruir","vacina","vadiar","vagaroso","vaidoso","vala","valente","validade","valores","vantagem","vaqueiro","varanda","vareta","varrer","vascular","vasilha","vassoura","vazar","vazio","veado","vedar","vegetar","veicular","veleiro","velhice","veludo","vencedor","vendaval","venerar","ventre","verbal","verdade","vereador","vergonha","vermelho","verniz","versar","vertente","vespa","vestido","vetorial","viaduto","viagem","viajar","viatura","vibrador","videira","vidraria","viela","viga","vigente","vigiar","vigorar","vilarejo","vinco","vinheta","vinil","violeta","virada","virtude","visitar","visto","vitral","viveiro","vizinho","voador","voar","vogal","volante","voleibol","voltagem","volumoso","vontade","vulto","vuvuzela","xadrez","xarope","xeque","xeretar","xerife","xingar","zangado","zarpar","zebu","zelador","zombar","zoologia","zumbido"]');
  91353. /***/ }),
  91354. /***/ 80659:
  91355. /***/ ((module) => {
  91356. "use strict";
  91357. module.exports = JSON.parse('["ábaco","abdomen","abeja","abierto","abogado","abono","aborto","abrazo","abrir","abuelo","abuso","acabar","academia","acceso","acción","aceite","acelga","acento","aceptar","ácido","aclarar","acné","acoger","acoso","activo","acto","actriz","actuar","acudir","acuerdo","acusar","adicto","admitir","adoptar","adorno","aduana","adulto","aéreo","afectar","afición","afinar","afirmar","ágil","agitar","agonía","agosto","agotar","agregar","agrio","agua","agudo","águila","aguja","ahogo","ahorro","aire","aislar","ajedrez","ajeno","ajuste","alacrán","alambre","alarma","alba","álbum","alcalde","aldea","alegre","alejar","alerta","aleta","alfiler","alga","algodón","aliado","aliento","alivio","alma","almeja","almíbar","altar","alteza","altivo","alto","altura","alumno","alzar","amable","amante","amapola","amargo","amasar","ámbar","ámbito","ameno","amigo","amistad","amor","amparo","amplio","ancho","anciano","ancla","andar","andén","anemia","ángulo","anillo","ánimo","anís","anotar","antena","antiguo","antojo","anual","anular","anuncio","añadir","añejo","año","apagar","aparato","apetito","apio","aplicar","apodo","aporte","apoyo","aprender","aprobar","apuesta","apuro","arado","araña","arar","árbitro","árbol","arbusto","archivo","arco","arder","ardilla","arduo","área","árido","aries","armonía","arnés","aroma","arpa","arpón","arreglo","arroz","arruga","arte","artista","asa","asado","asalto","ascenso","asegurar","aseo","asesor","asiento","asilo","asistir","asno","asombro","áspero","astilla","astro","astuto","asumir","asunto","atajo","ataque","atar","atento","ateo","ático","atleta","átomo","atraer","atroz","atún","audaz","audio","auge","aula","aumento","ausente","autor","aval","avance","avaro","ave","avellana","avena","avestruz","avión","aviso","ayer","ayuda","ayuno","azafrán","azar","azote","azúcar","azufre","azul","baba","babor","bache","bahía","baile","bajar","balanza","balcón","balde","bambú","banco","banda","baño","barba","barco","barniz","barro","báscula","bastón","basura","batalla","batería","batir","batuta","baúl","bazar","bebé","bebida","bello","besar","beso","bestia","bicho","bien","bingo","blanco","bloque","blusa","boa","bobina","bobo","boca","bocina","boda","bodega","boina","bola","bolero","bolsa","bomba","bondad","bonito","bono","bonsái","borde","borrar","bosque","bote","botín","bóveda","bozal","bravo","brazo","brecha","breve","brillo","brinco","brisa","broca","broma","bronce","brote","bruja","brusco","bruto","buceo","bucle","bueno","buey","bufanda","bufón","búho","buitre","bulto","burbuja","burla","burro","buscar","butaca","buzón","caballo","cabeza","cabina","cabra","cacao","cadáver","cadena","caer","café","caída","caimán","caja","cajón","cal","calamar","calcio","caldo","calidad","calle","calma","calor","calvo","cama","cambio","camello","camino","campo","cáncer","candil","canela","canguro","canica","canto","caña","cañón","caoba","caos","capaz","capitán","capote","captar","capucha","cara","carbón","cárcel","careta","carga","cariño","carne","carpeta","carro","carta","casa","casco","casero","caspa","castor","catorce","catre","caudal","causa","cazo","cebolla","ceder","cedro","celda","célebre","celoso","célula","cemento","ceniza","centro","cerca","cerdo","cereza","cero","cerrar","certeza","césped","cetro","chacal","chaleco","champú","chancla","chapa","charla","chico","chiste","chivo","choque","choza","chuleta","chupar","ciclón","ciego","cielo","cien","cierto","cifra","cigarro","cima","cinco","cine","cinta","ciprés","circo","ciruela","cisne","cita","ciudad","clamor","clan","claro","clase","clave","cliente","clima","clínica","cobre","cocción","cochino","cocina","coco","código","codo","cofre","coger","cohete","cojín","cojo","cola","colcha","colegio","colgar","colina","collar","colmo","columna","combate","comer","comida","cómodo","compra","conde","conejo","conga","conocer","consejo","contar","copa","copia","corazón","corbata","corcho","cordón","corona","correr","coser","cosmos","costa","cráneo","cráter","crear","crecer","creído","crema","cría","crimen","cripta","crisis","cromo","crónica","croqueta","crudo","cruz","cuadro","cuarto","cuatro","cubo","cubrir","cuchara","cuello","cuento","cuerda","cuesta","cueva","cuidar","culebra","culpa","culto","cumbre","cumplir","cuna","cuneta","cuota","cupón","cúpula","curar","curioso","curso","curva","cutis","dama","danza","dar","dardo","dátil","deber","débil","década","decir","dedo","defensa","definir","dejar","delfín","delgado","delito","demora","denso","dental","deporte","derecho","derrota","desayuno","deseo","desfile","desnudo","destino","desvío","detalle","detener","deuda","día","diablo","diadema","diamante","diana","diario","dibujo","dictar","diente","dieta","diez","difícil","digno","dilema","diluir","dinero","directo","dirigir","disco","diseño","disfraz","diva","divino","doble","doce","dolor","domingo","don","donar","dorado","dormir","dorso","dos","dosis","dragón","droga","ducha","duda","duelo","dueño","dulce","dúo","duque","durar","dureza","duro","ébano","ebrio","echar","eco","ecuador","edad","edición","edificio","editor","educar","efecto","eficaz","eje","ejemplo","elefante","elegir","elemento","elevar","elipse","élite","elixir","elogio","eludir","embudo","emitir","emoción","empate","empeño","empleo","empresa","enano","encargo","enchufe","encía","enemigo","enero","enfado","enfermo","engaño","enigma","enlace","enorme","enredo","ensayo","enseñar","entero","entrar","envase","envío","época","equipo","erizo","escala","escena","escolar","escribir","escudo","esencia","esfera","esfuerzo","espada","espejo","espía","esposa","espuma","esquí","estar","este","estilo","estufa","etapa","eterno","ética","etnia","evadir","evaluar","evento","evitar","exacto","examen","exceso","excusa","exento","exigir","exilio","existir","éxito","experto","explicar","exponer","extremo","fábrica","fábula","fachada","fácil","factor","faena","faja","falda","fallo","falso","faltar","fama","familia","famoso","faraón","farmacia","farol","farsa","fase","fatiga","fauna","favor","fax","febrero","fecha","feliz","feo","feria","feroz","fértil","fervor","festín","fiable","fianza","fiar","fibra","ficción","ficha","fideo","fiebre","fiel","fiera","fiesta","figura","fijar","fijo","fila","filete","filial","filtro","fin","finca","fingir","finito","firma","flaco","flauta","flecha","flor","flota","fluir","flujo","flúor","fobia","foca","fogata","fogón","folio","folleto","fondo","forma","forro","fortuna","forzar","fosa","foto","fracaso","frágil","franja","frase","fraude","freír","freno","fresa","frío","frito","fruta","fuego","fuente","fuerza","fuga","fumar","función","funda","furgón","furia","fusil","fútbol","futuro","gacela","gafas","gaita","gajo","gala","galería","gallo","gamba","ganar","gancho","ganga","ganso","garaje","garza","gasolina","gastar","gato","gavilán","gemelo","gemir","gen","género","genio","gente","geranio","gerente","germen","gesto","gigante","gimnasio","girar","giro","glaciar","globo","gloria","gol","golfo","goloso","golpe","goma","gordo","gorila","gorra","gota","goteo","gozar","grada","gráfico","grano","grasa","gratis","grave","grieta","grillo","gripe","gris","grito","grosor","grúa","grueso","grumo","grupo","guante","guapo","guardia","guerra","guía","guiño","guion","guiso","guitarra","gusano","gustar","haber","hábil","hablar","hacer","hacha","hada","hallar","hamaca","harina","haz","hazaña","hebilla","hebra","hecho","helado","helio","hembra","herir","hermano","héroe","hervir","hielo","hierro","hígado","higiene","hijo","himno","historia","hocico","hogar","hoguera","hoja","hombre","hongo","honor","honra","hora","hormiga","horno","hostil","hoyo","hueco","huelga","huerta","hueso","huevo","huida","huir","humano","húmedo","humilde","humo","hundir","huracán","hurto","icono","ideal","idioma","ídolo","iglesia","iglú","igual","ilegal","ilusión","imagen","imán","imitar","impar","imperio","imponer","impulso","incapaz","índice","inerte","infiel","informe","ingenio","inicio","inmenso","inmune","innato","insecto","instante","interés","íntimo","intuir","inútil","invierno","ira","iris","ironía","isla","islote","jabalí","jabón","jamón","jarabe","jardín","jarra","jaula","jazmín","jefe","jeringa","jinete","jornada","joroba","joven","joya","juerga","jueves","juez","jugador","jugo","juguete","juicio","junco","jungla","junio","juntar","júpiter","jurar","justo","juvenil","juzgar","kilo","koala","labio","lacio","lacra","lado","ladrón","lagarto","lágrima","laguna","laico","lamer","lámina","lámpara","lana","lancha","langosta","lanza","lápiz","largo","larva","lástima","lata","látex","latir","laurel","lavar","lazo","leal","lección","leche","lector","leer","legión","legumbre","lejano","lengua","lento","leña","león","leopardo","lesión","letal","letra","leve","leyenda","libertad","libro","licor","líder","lidiar","lienzo","liga","ligero","lima","límite","limón","limpio","lince","lindo","línea","lingote","lino","linterna","líquido","liso","lista","litera","litio","litro","llaga","llama","llanto","llave","llegar","llenar","llevar","llorar","llover","lluvia","lobo","loción","loco","locura","lógica","logro","lombriz","lomo","lonja","lote","lucha","lucir","lugar","lujo","luna","lunes","lupa","lustro","luto","luz","maceta","macho","madera","madre","maduro","maestro","mafia","magia","mago","maíz","maldad","maleta","malla","malo","mamá","mambo","mamut","manco","mando","manejar","manga","maniquí","manjar","mano","manso","manta","mañana","mapa","máquina","mar","marco","marea","marfil","margen","marido","mármol","marrón","martes","marzo","masa","máscara","masivo","matar","materia","matiz","matriz","máximo","mayor","mazorca","mecha","medalla","medio","médula","mejilla","mejor","melena","melón","memoria","menor","mensaje","mente","menú","mercado","merengue","mérito","mes","mesón","meta","meter","método","metro","mezcla","miedo","miel","miembro","miga","mil","milagro","militar","millón","mimo","mina","minero","mínimo","minuto","miope","mirar","misa","miseria","misil","mismo","mitad","mito","mochila","moción","moda","modelo","moho","mojar","molde","moler","molino","momento","momia","monarca","moneda","monja","monto","moño","morada","morder","moreno","morir","morro","morsa","mortal","mosca","mostrar","motivo","mover","móvil","mozo","mucho","mudar","mueble","muela","muerte","muestra","mugre","mujer","mula","muleta","multa","mundo","muñeca","mural","muro","músculo","museo","musgo","música","muslo","nácar","nación","nadar","naipe","naranja","nariz","narrar","nasal","natal","nativo","natural","náusea","naval","nave","navidad","necio","néctar","negar","negocio","negro","neón","nervio","neto","neutro","nevar","nevera","nicho","nido","niebla","nieto","niñez","niño","nítido","nivel","nobleza","noche","nómina","noria","norma","norte","nota","noticia","novato","novela","novio","nube","nuca","núcleo","nudillo","nudo","nuera","nueve","nuez","nulo","número","nutria","oasis","obeso","obispo","objeto","obra","obrero","observar","obtener","obvio","oca","ocaso","océano","ochenta","ocho","ocio","ocre","octavo","octubre","oculto","ocupar","ocurrir","odiar","odio","odisea","oeste","ofensa","oferta","oficio","ofrecer","ogro","oído","oír","ojo","ola","oleada","olfato","olivo","olla","olmo","olor","olvido","ombligo","onda","onza","opaco","opción","ópera","opinar","oponer","optar","óptica","opuesto","oración","orador","oral","órbita","orca","orden","oreja","órgano","orgía","orgullo","oriente","origen","orilla","oro","orquesta","oruga","osadía","oscuro","osezno","oso","ostra","otoño","otro","oveja","óvulo","óxido","oxígeno","oyente","ozono","pacto","padre","paella","página","pago","país","pájaro","palabra","palco","paleta","pálido","palma","paloma","palpar","pan","panal","pánico","pantera","pañuelo","papá","papel","papilla","paquete","parar","parcela","pared","parir","paro","párpado","parque","párrafo","parte","pasar","paseo","pasión","paso","pasta","pata","patio","patria","pausa","pauta","pavo","payaso","peatón","pecado","pecera","pecho","pedal","pedir","pegar","peine","pelar","peldaño","pelea","peligro","pellejo","pelo","peluca","pena","pensar","peñón","peón","peor","pepino","pequeño","pera","percha","perder","pereza","perfil","perico","perla","permiso","perro","persona","pesa","pesca","pésimo","pestaña","pétalo","petróleo","pez","pezuña","picar","pichón","pie","piedra","pierna","pieza","pijama","pilar","piloto","pimienta","pino","pintor","pinza","piña","piojo","pipa","pirata","pisar","piscina","piso","pista","pitón","pizca","placa","plan","plata","playa","plaza","pleito","pleno","plomo","pluma","plural","pobre","poco","poder","podio","poema","poesía","poeta","polen","policía","pollo","polvo","pomada","pomelo","pomo","pompa","poner","porción","portal","posada","poseer","posible","poste","potencia","potro","pozo","prado","precoz","pregunta","premio","prensa","preso","previo","primo","príncipe","prisión","privar","proa","probar","proceso","producto","proeza","profesor","programa","prole","promesa","pronto","propio","próximo","prueba","público","puchero","pudor","pueblo","puerta","puesto","pulga","pulir","pulmón","pulpo","pulso","puma","punto","puñal","puño","pupa","pupila","puré","quedar","queja","quemar","querer","queso","quieto","química","quince","quitar","rábano","rabia","rabo","ración","radical","raíz","rama","rampa","rancho","rango","rapaz","rápido","rapto","rasgo","raspa","rato","rayo","raza","razón","reacción","realidad","rebaño","rebote","recaer","receta","rechazo","recoger","recreo","recto","recurso","red","redondo","reducir","reflejo","reforma","refrán","refugio","regalo","regir","regla","regreso","rehén","reino","reír","reja","relato","relevo","relieve","relleno","reloj","remar","remedio","remo","rencor","rendir","renta","reparto","repetir","reposo","reptil","res","rescate","resina","respeto","resto","resumen","retiro","retorno","retrato","reunir","revés","revista","rey","rezar","rico","riego","rienda","riesgo","rifa","rígido","rigor","rincón","riñón","río","riqueza","risa","ritmo","rito","rizo","roble","roce","rociar","rodar","rodeo","rodilla","roer","rojizo","rojo","romero","romper","ron","ronco","ronda","ropa","ropero","rosa","rosca","rostro","rotar","rubí","rubor","rudo","rueda","rugir","ruido","ruina","ruleta","rulo","rumbo","rumor","ruptura","ruta","rutina","sábado","saber","sabio","sable","sacar","sagaz","sagrado","sala","saldo","salero","salir","salmón","salón","salsa","salto","salud","salvar","samba","sanción","sandía","sanear","sangre","sanidad","sano","santo","sapo","saque","sardina","sartén","sastre","satán","sauna","saxofón","sección","seco","secreto","secta","sed","seguir","seis","sello","selva","semana","semilla","senda","sensor","señal","señor","separar","sepia","sequía","ser","serie","sermón","servir","sesenta","sesión","seta","setenta","severo","sexo","sexto","sidra","siesta","siete","siglo","signo","sílaba","silbar","silencio","silla","símbolo","simio","sirena","sistema","sitio","situar","sobre","socio","sodio","sol","solapa","soldado","soledad","sólido","soltar","solución","sombra","sondeo","sonido","sonoro","sonrisa","sopa","soplar","soporte","sordo","sorpresa","sorteo","sostén","sótano","suave","subir","suceso","sudor","suegra","suelo","sueño","suerte","sufrir","sujeto","sultán","sumar","superar","suplir","suponer","supremo","sur","surco","sureño","surgir","susto","sutil","tabaco","tabique","tabla","tabú","taco","tacto","tajo","talar","talco","talento","talla","talón","tamaño","tambor","tango","tanque","tapa","tapete","tapia","tapón","taquilla","tarde","tarea","tarifa","tarjeta","tarot","tarro","tarta","tatuaje","tauro","taza","tazón","teatro","techo","tecla","técnica","tejado","tejer","tejido","tela","teléfono","tema","temor","templo","tenaz","tender","tener","tenis","tenso","teoría","terapia","terco","término","ternura","terror","tesis","tesoro","testigo","tetera","texto","tez","tibio","tiburón","tiempo","tienda","tierra","tieso","tigre","tijera","tilde","timbre","tímido","timo","tinta","tío","típico","tipo","tira","tirón","titán","títere","título","tiza","toalla","tobillo","tocar","tocino","todo","toga","toldo","tomar","tono","tonto","topar","tope","toque","tórax","torero","tormenta","torneo","toro","torpedo","torre","torso","tortuga","tos","tosco","toser","tóxico","trabajo","tractor","traer","tráfico","trago","traje","tramo","trance","trato","trauma","trazar","trébol","tregua","treinta","tren","trepar","tres","tribu","trigo","tripa","triste","triunfo","trofeo","trompa","tronco","tropa","trote","trozo","truco","trueno","trufa","tubería","tubo","tuerto","tumba","tumor","túnel","túnica","turbina","turismo","turno","tutor","ubicar","úlcera","umbral","unidad","unir","universo","uno","untar","uña","urbano","urbe","urgente","urna","usar","usuario","útil","utopía","uva","vaca","vacío","vacuna","vagar","vago","vaina","vajilla","vale","válido","valle","valor","válvula","vampiro","vara","variar","varón","vaso","vecino","vector","vehículo","veinte","vejez","vela","velero","veloz","vena","vencer","venda","veneno","vengar","venir","venta","venus","ver","verano","verbo","verde","vereda","verja","verso","verter","vía","viaje","vibrar","vicio","víctima","vida","vídeo","vidrio","viejo","viernes","vigor","vil","villa","vinagre","vino","viñedo","violín","viral","virgo","virtud","visor","víspera","vista","vitamina","viudo","vivaz","vivero","vivir","vivo","volcán","volumen","volver","voraz","votar","voto","voz","vuelo","vulgar","yacer","yate","yegua","yema","yerno","yeso","yodo","yoga","yogur","zafiro","zanja","zapato","zarza","zona","zorro","zumo","zurdo"]');
  91358. /***/ }),
  91359. /***/ 44946:
  91360. /***/ ((module) => {
  91361. "use strict";
  91362. module.exports = JSON.parse('{"aes-128-ecb":{"cipher":"AES","key":128,"iv":0,"mode":"ECB","type":"block"},"aes-192-ecb":{"cipher":"AES","key":192,"iv":0,"mode":"ECB","type":"block"},"aes-256-ecb":{"cipher":"AES","key":256,"iv":0,"mode":"ECB","type":"block"},"aes-128-cbc":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes-192-cbc":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes-256-cbc":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes128":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes192":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes256":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes-128-cfb":{"cipher":"AES","key":128,"iv":16,"mode":"CFB","type":"stream"},"aes-192-cfb":{"cipher":"AES","key":192,"iv":16,"mode":"CFB","type":"stream"},"aes-256-cfb":{"cipher":"AES","key":256,"iv":16,"mode":"CFB","type":"stream"},"aes-128-cfb8":{"cipher":"AES","key":128,"iv":16,"mode":"CFB8","type":"stream"},"aes-192-cfb8":{"cipher":"AES","key":192,"iv":16,"mode":"CFB8","type":"stream"},"aes-256-cfb8":{"cipher":"AES","key":256,"iv":16,"mode":"CFB8","type":"stream"},"aes-128-cfb1":{"cipher":"AES","key":128,"iv":16,"mode":"CFB1","type":"stream"},"aes-192-cfb1":{"cipher":"AES","key":192,"iv":16,"mode":"CFB1","type":"stream"},"aes-256-cfb1":{"cipher":"AES","key":256,"iv":16,"mode":"CFB1","type":"stream"},"aes-128-ofb":{"cipher":"AES","key":128,"iv":16,"mode":"OFB","type":"stream"},"aes-192-ofb":{"cipher":"AES","key":192,"iv":16,"mode":"OFB","type":"stream"},"aes-256-ofb":{"cipher":"AES","key":256,"iv":16,"mode":"OFB","type":"stream"},"aes-128-ctr":{"cipher":"AES","key":128,"iv":16,"mode":"CTR","type":"stream"},"aes-192-ctr":{"cipher":"AES","key":192,"iv":16,"mode":"CTR","type":"stream"},"aes-256-ctr":{"cipher":"AES","key":256,"iv":16,"mode":"CTR","type":"stream"},"aes-128-gcm":{"cipher":"AES","key":128,"iv":12,"mode":"GCM","type":"auth"},"aes-192-gcm":{"cipher":"AES","key":192,"iv":12,"mode":"GCM","type":"auth"},"aes-256-gcm":{"cipher":"AES","key":256,"iv":12,"mode":"GCM","type":"auth"}}');
  91363. /***/ }),
  91364. /***/ 75207:
  91365. /***/ ((module) => {
  91366. "use strict";
  91367. module.exports = JSON.parse('{"sha224WithRSAEncryption":{"sign":"rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"RSA-SHA224":{"sign":"ecdsa/rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"sha256WithRSAEncryption":{"sign":"rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"RSA-SHA256":{"sign":"ecdsa/rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"sha384WithRSAEncryption":{"sign":"rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"RSA-SHA384":{"sign":"ecdsa/rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"sha512WithRSAEncryption":{"sign":"rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA512":{"sign":"ecdsa/rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA1":{"sign":"rsa","hash":"sha1","id":"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{"sign":"ecdsa","hash":"sha1","id":""},"sha256":{"sign":"ecdsa","hash":"sha256","id":""},"sha224":{"sign":"ecdsa","hash":"sha224","id":""},"sha384":{"sign":"ecdsa","hash":"sha384","id":""},"sha512":{"sign":"ecdsa","hash":"sha512","id":""},"DSA-SHA":{"sign":"dsa","hash":"sha1","id":""},"DSA-SHA1":{"sign":"dsa","hash":"sha1","id":""},"DSA":{"sign":"dsa","hash":"sha1","id":""},"DSA-WITH-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-WITH-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-WITH-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-WITH-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-RIPEMD160":{"sign":"dsa","hash":"rmd160","id":""},"ripemd160WithRSA":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"RSA-RIPEMD160":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"md5WithRSAEncryption":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"},"RSA-MD5":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"}}');
  91368. /***/ }),
  91369. /***/ 1308:
  91370. /***/ ((module) => {
  91371. "use strict";
  91372. module.exports = JSON.parse('{"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}');
  91373. /***/ }),
  91374. /***/ 29799:
  91375. /***/ ((module) => {
  91376. "use strict";
  91377. module.exports = JSON.parse('{"modp1":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},"modp2":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},"modp5":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},"modp14":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},"modp15":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},"modp16":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},"modp17":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},"modp18":{"gen":"02","prime":"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}');
  91378. /***/ }),
  91379. /***/ 18597:
  91380. /***/ ((module) => {
  91381. "use strict";
  91382. module.exports = {"i8":"6.5.4"};
  91383. /***/ }),
  91384. /***/ 22562:
  91385. /***/ ((module) => {
  91386. "use strict";
  91387. module.exports = JSON.parse('{"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}');
  91388. /***/ }),
  91389. /***/ 38652:
  91390. /***/ ((module) => {
  91391. "use strict";
  91392. module.exports = JSON.parse('{"TYPES":{"Done":-1,"Unknown":-2,"NotPresent":0,"UInt16":1,"UInt32":2,"UInt64":3,"Hash128":4,"Hash256":5,"Amount":6,"Blob":7,"AccountID":8,"STObject":14,"STArray":15,"UInt8":16,"Hash160":17,"PathSet":18,"Vector256":19,"UInt96":20,"UInt192":21,"UInt384":22,"UInt512":23,"Transaction":10001,"LedgerEntry":10002,"Validation":10003,"Metadata":10004},"LEDGER_ENTRY_TYPES":{"Invalid":-1,"AccountRoot":97,"DirectoryNode":100,"RippleState":114,"Ticket":84,"SignerList":83,"Offer":111,"LedgerHashes":104,"Amendments":102,"FeeSettings":115,"Escrow":117,"PayChannel":120,"Check":67,"DepositPreauth":112,"NegativeUNL":78,"NFTokenPage":80,"NFTokenOffer":55,"Any":-3,"Child":-2,"Nickname":110,"Contract":99,"GeneratorMap":103},"FIELDS":[["Generic",{"nth":0,"isVLEncoded":false,"isSerialized":false,"isSigningField":false,"type":"Unknown"}],["Invalid",{"nth":-1,"isVLEncoded":false,"isSerialized":false,"isSigningField":false,"type":"Unknown"}],["ObjectEndMarker",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["ArrayEndMarker",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["hash",{"nth":257,"isVLEncoded":false,"isSerialized":false,"isSigningField":false,"type":"Hash256"}],["index",{"nth":258,"isVLEncoded":false,"isSerialized":false,"isSigningField":false,"type":"Hash256"}],["taker_gets_funded",{"nth":258,"isVLEncoded":false,"isSerialized":false,"isSigningField":false,"type":"Amount"}],["taker_pays_funded",{"nth":259,"isVLEncoded":false,"isSerialized":false,"isSigningField":false,"type":"Amount"}],["LedgerEntry",{"nth":1,"isVLEncoded":false,"isSerialized":false,"isSigningField":true,"type":"LedgerEntry"}],["Transaction",{"nth":1,"isVLEncoded":false,"isSerialized":false,"isSigningField":true,"type":"Transaction"}],["Validation",{"nth":1,"isVLEncoded":false,"isSerialized":false,"isSigningField":true,"type":"Validation"}],["Metadata",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Metadata"}],["CloseResolution",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt8"}],["Method",{"nth":2,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt8"}],["TransactionResult",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt8"}],["TickSize",{"nth":16,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt8"}],["UNLModifyDisabling",{"nth":17,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt8"}],["HookResult",{"nth":18,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt8"}],["LedgerEntryType",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["TransactionType",{"nth":2,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["SignerWeight",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["TransferFee",{"nth":4,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["Version",{"nth":16,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["HookStateChangeCount",{"nth":17,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["HookEmitCount",{"nth":18,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["HookExecutionIndex",{"nth":19,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["HookApiVersion",{"nth":20,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt16"}],["Flags",{"nth":2,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["SourceTag",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["Sequence",{"nth":4,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["PreviousTxnLgrSeq",{"nth":5,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["LedgerSequence",{"nth":6,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["CloseTime",{"nth":7,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["ParentCloseTime",{"nth":8,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["SigningTime",{"nth":9,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["Expiration",{"nth":10,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["TransferRate",{"nth":11,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["WalletSize",{"nth":12,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["OwnerCount",{"nth":13,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["DestinationTag",{"nth":14,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["HighQualityIn",{"nth":16,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["HighQualityOut",{"nth":17,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["LowQualityIn",{"nth":18,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["LowQualityOut",{"nth":19,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["QualityIn",{"nth":20,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["QualityOut",{"nth":21,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["StampEscrow",{"nth":22,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["BondAmount",{"nth":23,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["LoadFee",{"nth":24,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["OfferSequence",{"nth":25,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["FirstLedgerSequence",{"nth":26,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["LastLedgerSequence",{"nth":27,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["TransactionIndex",{"nth":28,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["OperationLimit",{"nth":29,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["ReferenceFeeUnits",{"nth":30,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["ReserveBase",{"nth":31,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["ReserveIncrement",{"nth":32,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["SetFlag",{"nth":33,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["ClearFlag",{"nth":34,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["SignerQuorum",{"nth":35,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["CancelAfter",{"nth":36,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["FinishAfter",{"nth":37,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["SignerListID",{"nth":38,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["SettleDelay",{"nth":39,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["TicketCount",{"nth":40,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["TicketSequence",{"nth":41,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["NFTokenTaxon",{"nth":42,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["MintedNFTokens",{"nth":43,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["BurnedNFTokens",{"nth":44,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["HookStateCount",{"nth":45,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["EmitGeneration",{"nth":46,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt32"}],["IndexNext",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["IndexPrevious",{"nth":2,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["BookNode",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["OwnerNode",{"nth":4,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["BaseFee",{"nth":5,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["ExchangeRate",{"nth":6,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["LowNode",{"nth":7,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["HighNode",{"nth":8,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["DestinationNode",{"nth":9,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["Cookie",{"nth":10,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["ServerVersion",{"nth":11,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["NFTokenOfferNode",{"nth":12,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["EmitBurden",{"nth":13,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["HookOn",{"nth":16,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["HookInstructionCount",{"nth":17,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["HookReturnCode",{"nth":18,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["ReferenceCount",{"nth":19,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"UInt64"}],["EmailHash",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash128"}],["TakerPaysCurrency",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash160"}],["TakerPaysIssuer",{"nth":2,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash160"}],["TakerGetsCurrency",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash160"}],["TakerGetsIssuer",{"nth":4,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash160"}],["LedgerHash",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["ParentHash",{"nth":2,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["TransactionHash",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["AccountHash",{"nth":4,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["PreviousTxnID",{"nth":5,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["LedgerIndex",{"nth":6,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["WalletLocator",{"nth":7,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["RootIndex",{"nth":8,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["AccountTxnID",{"nth":9,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["NFTokenID",{"nth":10,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["EmitParentTxnID",{"nth":11,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["EmitNonce",{"nth":12,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["EmitHookHash",{"nth":13,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["BookDirectory",{"nth":16,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["InvoiceID",{"nth":17,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["Nickname",{"nth":18,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["Amendment",{"nth":19,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["Digest",{"nth":21,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["Channel",{"nth":22,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["ConsensusHash",{"nth":23,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["CheckID",{"nth":24,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["ValidatedHash",{"nth":25,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["PreviousPageMin",{"nth":26,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["NextPageMin",{"nth":27,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["NFTokenBuyOffer",{"nth":28,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["NFTokenSellOffer",{"nth":29,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["HookStateKey",{"nth":30,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["HookHash",{"nth":31,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["HookNamespace",{"nth":32,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["HookSetTxnID",{"nth":33,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Hash256"}],["Amount",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["Balance",{"nth":2,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["LimitAmount",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["TakerPays",{"nth":4,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["TakerGets",{"nth":5,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["LowLimit",{"nth":6,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["HighLimit",{"nth":7,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["Fee",{"nth":8,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["SendMax",{"nth":9,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["DeliverMin",{"nth":10,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["MinimumOffer",{"nth":16,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["RippleEscrow",{"nth":17,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["DeliveredAmount",{"nth":18,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["NFTokenBrokerFee",{"nth":19,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"Amount"}],["PublicKey",{"nth":1,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["MessageKey",{"nth":2,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["SigningPubKey",{"nth":3,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["TxnSignature",{"nth":4,"isVLEncoded":true,"isSerialized":true,"isSigningField":false,"type":"Blob"}],["URI",{"nth":5,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["Signature",{"nth":6,"isVLEncoded":true,"isSerialized":true,"isSigningField":false,"type":"Blob"}],["Domain",{"nth":7,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["FundCode",{"nth":8,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["RemoveCode",{"nth":9,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["ExpireCode",{"nth":10,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["CreateCode",{"nth":11,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["MemoType",{"nth":12,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["MemoData",{"nth":13,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["MemoFormat",{"nth":14,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["Fulfillment",{"nth":16,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["Condition",{"nth":17,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["MasterSignature",{"nth":18,"isVLEncoded":true,"isSerialized":true,"isSigningField":false,"type":"Blob"}],["UNLModifyValidator",{"nth":19,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["ValidatorToDisable",{"nth":20,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["ValidatorToReEnable",{"nth":21,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["HookStateData",{"nth":22,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["HookReturnString",{"nth":23,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["HookParameterName",{"nth":24,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["HookParameterValue",{"nth":25,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Blob"}],["Account",{"nth":1,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["Owner",{"nth":2,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["Destination",{"nth":3,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["Issuer",{"nth":4,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["Authorize",{"nth":5,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["Unauthorize",{"nth":6,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["RegularKey",{"nth":8,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["NFTokenMinter",{"nth":9,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["EmitCallback",{"nth":10,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["HookAccount",{"nth":16,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"AccountID"}],["Indexes",{"nth":1,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Vector256"}],["Hashes",{"nth":2,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Vector256"}],["Amendments",{"nth":3,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Vector256"}],["NFTokenOffers",{"nth":4,"isVLEncoded":true,"isSerialized":true,"isSigningField":true,"type":"Vector256"}],["Paths",{"nth":1,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"PathSet"}],["TransactionMetaData",{"nth":2,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["CreatedNode",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["DeletedNode",{"nth":4,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["ModifiedNode",{"nth":5,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["PreviousFields",{"nth":6,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["FinalFields",{"nth":7,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["NewFields",{"nth":8,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["TemplateEntry",{"nth":9,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["Memo",{"nth":10,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["SignerEntry",{"nth":11,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["NFToken",{"nth":12,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["EmitDetails",{"nth":13,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["Hook",{"nth":14,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["Signer",{"nth":16,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["Majority",{"nth":18,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["DisabledValidator",{"nth":19,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["EmittedTxn",{"nth":20,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["HookExecution",{"nth":21,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["HookDefinition",{"nth":22,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["HookParameter",{"nth":23,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["HookGrant",{"nth":24,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STObject"}],["Signers",{"nth":3,"isVLEncoded":false,"isSerialized":true,"isSigningField":false,"type":"STArray"}],["SignerEntries",{"nth":4,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["Template",{"nth":5,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["Necessary",{"nth":6,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["Sufficient",{"nth":7,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["AffectedNodes",{"nth":8,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["Memos",{"nth":9,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["NFTokens",{"nth":10,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["Hooks",{"nth":11,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["Majorities",{"nth":16,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["DisabledValidators",{"nth":17,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["HookExecutions",{"nth":18,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["HookParameters",{"nth":19,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}],["HookGrants",{"nth":20,"isVLEncoded":false,"isSerialized":true,"isSigningField":true,"type":"STArray"}]],"TRANSACTION_RESULTS":{"telLOCAL_ERROR":-399,"telBAD_DOMAIN":-398,"telBAD_PATH_COUNT":-397,"telBAD_PUBLIC_KEY":-396,"telFAILED_PROCESSING":-395,"telINSUF_FEE_P":-394,"telNO_DST_PARTIAL":-393,"telCAN_NOT_QUEUE":-392,"telCAN_NOT_QUEUE_BALANCE":-391,"telCAN_NOT_QUEUE_BLOCKS":-390,"telCAN_NOT_QUEUE_BLOCKED":-389,"telCAN_NOT_QUEUE_FEE":-388,"telCAN_NOT_QUEUE_FULL":-387,"temMALFORMED":-299,"temBAD_AMOUNT":-298,"temBAD_CURRENCY":-297,"temBAD_EXPIRATION":-296,"temBAD_FEE":-295,"temBAD_ISSUER":-294,"temBAD_LIMIT":-293,"temBAD_OFFER":-292,"temBAD_PATH":-291,"temBAD_PATH_LOOP":-290,"temBAD_REGKEY":-289,"temBAD_SEND_XRP_LIMIT":-288,"temBAD_SEND_XRP_MAX":-287,"temBAD_SEND_XRP_NO_DIRECT":-286,"temBAD_SEND_XRP_PARTIAL":-285,"temBAD_SEND_XRP_PATHS":-284,"temBAD_SEQUENCE":-283,"temBAD_SIGNATURE":-282,"temBAD_SRC_ACCOUNT":-281,"temBAD_TRANSFER_RATE":-280,"temDST_IS_SRC":-279,"temDST_NEEDED":-278,"temINVALID":-277,"temINVALID_FLAG":-276,"temREDUNDANT":-275,"temRIPPLE_EMPTY":-274,"temDISABLED":-273,"temBAD_SIGNER":-272,"temBAD_QUORUM":-271,"temBAD_WEIGHT":-270,"temBAD_TICK_SIZE":-269,"temINVALID_ACCOUNT_ID":-268,"temCANNOT_PREAUTH_SELF":-267,"temINVALID_COUNT":-266,"temUNCERTAIN":-265,"temUNKNOWN":-264,"temSEQ_AND_TICKET":-263,"temBAD_NFTOKEN_TRANSFER_FEE":-262,"tefFAILURE":-199,"tefALREADY":-198,"tefBAD_ADD_AUTH":-197,"tefBAD_AUTH":-196,"tefBAD_LEDGER":-195,"tefCREATED":-194,"tefEXCEPTION":-193,"tefINTERNAL":-192,"tefNO_AUTH_REQUIRED":-191,"tefPAST_SEQ":-190,"tefWRONG_PRIOR":-189,"tefMASTER_DISABLED":-188,"tefMAX_LEDGER":-187,"tefBAD_SIGNATURE":-186,"tefBAD_QUORUM":-185,"tefNOT_MULTI_SIGNING":-184,"tefBAD_AUTH_MASTER":-183,"tefINVARIANT_FAILED":-182,"tefTOO_BIG":-181,"tefNO_TICKET":-180,"tefNFTOKEN_IS_NOT_TRANSFERABLE":-179,"terRETRY":-99,"terFUNDS_SPENT":-98,"terINSUF_FEE_B":-97,"terNO_ACCOUNT":-96,"terNO_AUTH":-95,"terNO_LINE":-94,"terOWNERS":-93,"terPRE_SEQ":-92,"terLAST":-91,"terNO_RIPPLE":-90,"terQUEUED":-89,"terPRE_TICKET":-88,"tesSUCCESS":0,"tecCLAIM":100,"tecPATH_PARTIAL":101,"tecUNFUNDED_ADD":102,"tecUNFUNDED_OFFER":103,"tecUNFUNDED_PAYMENT":104,"tecFAILED_PROCESSING":105,"tecDIR_FULL":121,"tecINSUF_RESERVE_LINE":122,"tecINSUF_RESERVE_OFFER":123,"tecNO_DST":124,"tecNO_DST_INSUF_XRP":125,"tecNO_LINE_INSUF_RESERVE":126,"tecNO_LINE_REDUNDANT":127,"tecPATH_DRY":128,"tecUNFUNDED":129,"tecNO_ALTERNATIVE_KEY":130,"tecNO_REGULAR_KEY":131,"tecOWNERS":132,"tecNO_ISSUER":133,"tecNO_AUTH":134,"tecNO_LINE":135,"tecINSUFF_FEE":136,"tecFROZEN":137,"tecNO_TARGET":138,"tecNO_PERMISSION":139,"tecNO_ENTRY":140,"tecINSUFFICIENT_RESERVE":141,"tecNEED_MASTER_KEY":142,"tecDST_TAG_NEEDED":143,"tecINTERNAL":144,"tecOVERSIZE":145,"tecCRYPTOCONDITION_ERROR":146,"tecINVARIANT_FAILED":147,"tecEXPIRED":148,"tecDUPLICATE":149,"tecKILLED":150,"tecHAS_OBLIGATIONS":151,"tecTOO_SOON":152,"tecMAX_SEQUENCE_REACHED":154,"tecNO_SUITABLE_NFTOKEN_PAGE":155,"tecNFTOKEN_BUY_SELL_MISMATCH":156,"tecNFTOKEN_OFFER_TYPE_MISMATCH":157,"tecCANT_ACCEPT_OWN_NFTOKEN_OFFER":158,"tecINSUFFICIENT_FUNDS":159,"tecOBJECT_NOT_FOUND":160,"tecINSUFFICIENT_PAYMENT":161},"TRANSACTION_TYPES":{"Invalid":-1,"Payment":0,"EscrowCreate":1,"EscrowFinish":2,"AccountSet":3,"EscrowCancel":4,"SetRegularKey":5,"NickNameSet":6,"OfferCreate":7,"OfferCancel":8,"Contract":9,"TicketCreate":10,"TicketCancel":11,"SignerListSet":12,"PaymentChannelCreate":13,"PaymentChannelFund":14,"PaymentChannelClaim":15,"CheckCreate":16,"CheckCash":17,"CheckCancel":18,"DepositPreauth":19,"TrustSet":20,"AccountDelete":21,"SetHook":22,"NFTokenMint":25,"NFTokenBurn":26,"NFTokenCreateOffer":27,"NFTokenCancelOffer":28,"NFTokenAcceptOffer":29,"EnableAmendment":100,"SetFee":101,"UNLModify":102}}');
  91393. /***/ }),
  91394. /***/ 64171:
  91395. /***/ ((module) => {
  91396. "use strict";
  91397. module.exports = JSON.parse('["A","ABE","ACE","ACT","AD","ADA","ADD","AGO","AID","AIM","AIR","ALL","ALP","AM","AMY","AN","ANA","AND","ANN","ANT","ANY","APE","APS","APT","ARC","ARE","ARK","ARM","ART","AS","ASH","ASK","AT","ATE","AUG","AUK","AVE","AWE","AWK","AWL","AWN","AX","AYE","BAD","BAG","BAH","BAM","BAN","BAR","BAT","BAY","BE","BED","BEE","BEG","BEN","BET","BEY","BIB","BID","BIG","BIN","BIT","BOB","BOG","BON","BOO","BOP","BOW","BOY","BUB","BUD","BUG","BUM","BUN","BUS","BUT","BUY","BY","BYE","CAB","CAL","CAM","CAN","CAP","CAR","CAT","CAW","COD","COG","COL","CON","COO","COP","COT","COW","COY","CRY","CUB","CUE","CUP","CUR","CUT","DAB","DAD","DAM","DAN","DAR","DAY","DEE","DEL","DEN","DES","DEW","DID","DIE","DIG","DIN","DIP","DO","DOE","DOG","DON","DOT","DOW","DRY","DUB","DUD","DUE","DUG","DUN","EAR","EAT","ED","EEL","EGG","EGO","ELI","ELK","ELM","ELY","EM","END","EST","ETC","EVA","EVE","EWE","EYE","FAD","FAN","FAR","FAT","FAY","FED","FEE","FEW","FIB","FIG","FIN","FIR","FIT","FLO","FLY","FOE","FOG","FOR","FRY","FUM","FUN","FUR","GAB","GAD","GAG","GAL","GAM","GAP","GAS","GAY","GEE","GEL","GEM","GET","GIG","GIL","GIN","GO","GOT","GUM","GUN","GUS","GUT","GUY","GYM","GYP","HA","HAD","HAL","HAM","HAN","HAP","HAS","HAT","HAW","HAY","HE","HEM","HEN","HER","HEW","HEY","HI","HID","HIM","HIP","HIS","HIT","HO","HOB","HOC","HOE","HOG","HOP","HOT","HOW","HUB","HUE","HUG","HUH","HUM","HUT","I","ICY","IDA","IF","IKE","ILL","INK","INN","IO","ION","IQ","IRA","IRE","IRK","IS","IT","ITS","IVY","JAB","JAG","JAM","JAN","JAR","JAW","JAY","JET","JIG","JIM","JO","JOB","JOE","JOG","JOT","JOY","JUG","JUT","KAY","KEG","KEN","KEY","KID","KIM","KIN","KIT","LA","LAB","LAC","LAD","LAG","LAM","LAP","LAW","LAY","LEA","LED","LEE","LEG","LEN","LEO","LET","LEW","LID","LIE","LIN","LIP","LIT","LO","LOB","LOG","LOP","LOS","LOT","LOU","LOW","LOY","LUG","LYE","MA","MAC","MAD","MAE","MAN","MAO","MAP","MAT","MAW","MAY","ME","MEG","MEL","MEN","MET","MEW","MID","MIN","MIT","MOB","MOD","MOE","MOO","MOP","MOS","MOT","MOW","MUD","MUG","MUM","MY","NAB","NAG","NAN","NAP","NAT","NAY","NE","NED","NEE","NET","NEW","NIB","NIL","NIP","NIT","NO","NOB","NOD","NON","NOR","NOT","NOV","NOW","NU","NUN","NUT","O","OAF","OAK","OAR","OAT","ODD","ODE","OF","OFF","OFT","OH","OIL","OK","OLD","ON","ONE","OR","ORB","ORE","ORR","OS","OTT","OUR","OUT","OVA","OW","OWE","OWL","OWN","OX","PA","PAD","PAL","PAM","PAN","PAP","PAR","PAT","PAW","PAY","PEA","PEG","PEN","PEP","PER","PET","PEW","PHI","PI","PIE","PIN","PIT","PLY","PO","POD","POE","POP","POT","POW","PRO","PRY","PUB","PUG","PUN","PUP","PUT","QUO","RAG","RAM","RAN","RAP","RAT","RAW","RAY","REB","RED","REP","RET","RIB","RID","RIG","RIM","RIO","RIP","ROB","ROD","ROE","RON","ROT","ROW","ROY","RUB","RUE","RUG","RUM","RUN","RYE","SAC","SAD","SAG","SAL","SAM","SAN","SAP","SAT","SAW","SAY","SEA","SEC","SEE","SEN","SET","SEW","SHE","SHY","SIN","SIP","SIR","SIS","SIT","SKI","SKY","SLY","SO","SOB","SOD","SON","SOP","SOW","SOY","SPA","SPY","SUB","SUD","SUE","SUM","SUN","SUP","TAB","TAD","TAG","TAN","TAP","TAR","TEA","TED","TEE","TEN","THE","THY","TIC","TIE","TIM","TIN","TIP","TO","TOE","TOG","TOM","TON","TOO","TOP","TOW","TOY","TRY","TUB","TUG","TUM","TUN","TWO","UN","UP","US","USE","VAN","VAT","VET","VIE","WAD","WAG","WAR","WAS","WAY","WE","WEB","WED","WEE","WET","WHO","WHY","WIN","WIT","WOK","WON","WOO","WOW","WRY","WU","YAM","YAP","YAW","YE","YEA","YES","YET","YOU","ABED","ABEL","ABET","ABLE","ABUT","ACHE","ACID","ACME","ACRE","ACTA","ACTS","ADAM","ADDS","ADEN","AFAR","AFRO","AGEE","AHEM","AHOY","AIDA","AIDE","AIDS","AIRY","AJAR","AKIN","ALAN","ALEC","ALGA","ALIA","ALLY","ALMA","ALOE","ALSO","ALTO","ALUM","ALVA","AMEN","AMES","AMID","AMMO","AMOK","AMOS","AMRA","ANDY","ANEW","ANNA","ANNE","ANTE","ANTI","AQUA","ARAB","ARCH","AREA","ARGO","ARID","ARMY","ARTS","ARTY","ASIA","ASKS","ATOM","AUNT","AURA","AUTO","AVER","AVID","AVIS","AVON","AVOW","AWAY","AWRY","BABE","BABY","BACH","BACK","BADE","BAIL","BAIT","BAKE","BALD","BALE","BALI","BALK","BALL","BALM","BAND","BANE","BANG","BANK","BARB","BARD","BARE","BARK","BARN","BARR","BASE","BASH","BASK","BASS","BATE","BATH","BAWD","BAWL","BEAD","BEAK","BEAM","BEAN","BEAR","BEAT","BEAU","BECK","BEEF","BEEN","BEER","BEET","BELA","BELL","BELT","BEND","BENT","BERG","BERN","BERT","BESS","BEST","BETA","BETH","BHOY","BIAS","BIDE","BIEN","BILE","BILK","BILL","BIND","BING","BIRD","BITE","BITS","BLAB","BLAT","BLED","BLEW","BLOB","BLOC","BLOT","BLOW","BLUE","BLUM","BLUR","BOAR","BOAT","BOCA","BOCK","BODE","BODY","BOGY","BOHR","BOIL","BOLD","BOLO","BOLT","BOMB","BONA","BOND","BONE","BONG","BONN","BONY","BOOK","BOOM","BOON","BOOT","BORE","BORG","BORN","BOSE","BOSS","BOTH","BOUT","BOWL","BOYD","BRAD","BRAE","BRAG","BRAN","BRAY","BRED","BREW","BRIG","BRIM","BROW","BUCK","BUDD","BUFF","BULB","BULK","BULL","BUNK","BUNT","BUOY","BURG","BURL","BURN","BURR","BURT","BURY","BUSH","BUSS","BUST","BUSY","BYTE","CADY","CAFE","CAGE","CAIN","CAKE","CALF","CALL","CALM","CAME","CANE","CANT","CARD","CARE","CARL","CARR","CART","CASE","CASH","CASK","CAST","CAVE","CEIL","CELL","CENT","CERN","CHAD","CHAR","CHAT","CHAW","CHEF","CHEN","CHEW","CHIC","CHIN","CHOU","CHOW","CHUB","CHUG","CHUM","CITE","CITY","CLAD","CLAM","CLAN","CLAW","CLAY","CLOD","CLOG","CLOT","CLUB","CLUE","COAL","COAT","COCA","COCK","COCO","CODA","CODE","CODY","COED","COIL","COIN","COKE","COLA","COLD","COLT","COMA","COMB","COME","COOK","COOL","COON","COOT","CORD","CORE","CORK","CORN","COST","COVE","COWL","CRAB","CRAG","CRAM","CRAY","CREW","CRIB","CROW","CRUD","CUBA","CUBE","CUFF","CULL","CULT","CUNY","CURB","CURD","CURE","CURL","CURT","CUTS","DADE","DALE","DAME","DANA","DANE","DANG","DANK","DARE","DARK","DARN","DART","DASH","DATA","DATE","DAVE","DAVY","DAWN","DAYS","DEAD","DEAF","DEAL","DEAN","DEAR","DEBT","DECK","DEED","DEEM","DEER","DEFT","DEFY","DELL","DENT","DENY","DESK","DIAL","DICE","DIED","DIET","DIME","DINE","DING","DINT","DIRE","DIRT","DISC","DISH","DISK","DIVE","DOCK","DOES","DOLE","DOLL","DOLT","DOME","DONE","DOOM","DOOR","DORA","DOSE","DOTE","DOUG","DOUR","DOVE","DOWN","DRAB","DRAG","DRAM","DRAW","DREW","DRUB","DRUG","DRUM","DUAL","DUCK","DUCT","DUEL","DUET","DUKE","DULL","DUMB","DUNE","DUNK","DUSK","DUST","DUTY","EACH","EARL","EARN","EASE","EAST","EASY","EBEN","ECHO","EDDY","EDEN","EDGE","EDGY","EDIT","EDNA","EGAN","ELAN","ELBA","ELLA","ELSE","EMIL","EMIT","EMMA","ENDS","ERIC","EROS","EVEN","EVER","EVIL","EYED","FACE","FACT","FADE","FAIL","FAIN","FAIR","FAKE","FALL","FAME","FANG","FARM","FAST","FATE","FAWN","FEAR","FEAT","FEED","FEEL","FEET","FELL","FELT","FEND","FERN","FEST","FEUD","FIEF","FIGS","FILE","FILL","FILM","FIND","FINE","FINK","FIRE","FIRM","FISH","FISK","FIST","FITS","FIVE","FLAG","FLAK","FLAM","FLAT","FLAW","FLEA","FLED","FLEW","FLIT","FLOC","FLOG","FLOW","FLUB","FLUE","FOAL","FOAM","FOGY","FOIL","FOLD","FOLK","FOND","FONT","FOOD","FOOL","FOOT","FORD","FORE","FORK","FORM","FORT","FOSS","FOUL","FOUR","FOWL","FRAU","FRAY","FRED","FREE","FRET","FREY","FROG","FROM","FUEL","FULL","FUME","FUND","FUNK","FURY","FUSE","FUSS","GAFF","GAGE","GAIL","GAIN","GAIT","GALA","GALE","GALL","GALT","GAME","GANG","GARB","GARY","GASH","GATE","GAUL","GAUR","GAVE","GAWK","GEAR","GELD","GENE","GENT","GERM","GETS","GIBE","GIFT","GILD","GILL","GILT","GINA","GIRD","GIRL","GIST","GIVE","GLAD","GLEE","GLEN","GLIB","GLOB","GLOM","GLOW","GLUE","GLUM","GLUT","GOAD","GOAL","GOAT","GOER","GOES","GOLD","GOLF","GONE","GONG","GOOD","GOOF","GORE","GORY","GOSH","GOUT","GOWN","GRAB","GRAD","GRAY","GREG","GREW","GREY","GRID","GRIM","GRIN","GRIT","GROW","GRUB","GULF","GULL","GUNK","GURU","GUSH","GUST","GWEN","GWYN","HAAG","HAAS","HACK","HAIL","HAIR","HALE","HALF","HALL","HALO","HALT","HAND","HANG","HANK","HANS","HARD","HARK","HARM","HART","HASH","HAST","HATE","HATH","HAUL","HAVE","HAWK","HAYS","HEAD","HEAL","HEAR","HEAT","HEBE","HECK","HEED","HEEL","HEFT","HELD","HELL","HELM","HERB","HERD","HERE","HERO","HERS","HESS","HEWN","HICK","HIDE","HIGH","HIKE","HILL","HILT","HIND","HINT","HIRE","HISS","HIVE","HOBO","HOCK","HOFF","HOLD","HOLE","HOLM","HOLT","HOME","HONE","HONK","HOOD","HOOF","HOOK","HOOT","HORN","HOSE","HOST","HOUR","HOVE","HOWE","HOWL","HOYT","HUCK","HUED","HUFF","HUGE","HUGH","HUGO","HULK","HULL","HUNK","HUNT","HURD","HURL","HURT","HUSH","HYDE","HYMN","IBIS","ICON","IDEA","IDLE","IFFY","INCA","INCH","INTO","IONS","IOTA","IOWA","IRIS","IRMA","IRON","ISLE","ITCH","ITEM","IVAN","JACK","JADE","JAIL","JAKE","JANE","JAVA","JEAN","JEFF","JERK","JESS","JEST","JIBE","JILL","JILT","JIVE","JOAN","JOBS","JOCK","JOEL","JOEY","JOHN","JOIN","JOKE","JOLT","JOVE","JUDD","JUDE","JUDO","JUDY","JUJU","JUKE","JULY","JUNE","JUNK","JUNO","JURY","JUST","JUTE","KAHN","KALE","KANE","KANT","KARL","KATE","KEEL","KEEN","KENO","KENT","KERN","KERR","KEYS","KICK","KILL","KIND","KING","KIRK","KISS","KITE","KLAN","KNEE","KNEW","KNIT","KNOB","KNOT","KNOW","KOCH","KONG","KUDO","KURD","KURT","KYLE","LACE","LACK","LACY","LADY","LAID","LAIN","LAIR","LAKE","LAMB","LAME","LAND","LANE","LANG","LARD","LARK","LASS","LAST","LATE","LAUD","LAVA","LAWN","LAWS","LAYS","LEAD","LEAF","LEAK","LEAN","LEAR","LEEK","LEER","LEFT","LEND","LENS","LENT","LEON","LESK","LESS","LEST","LETS","LIAR","LICE","LICK","LIED","LIEN","LIES","LIEU","LIFE","LIFT","LIKE","LILA","LILT","LILY","LIMA","LIMB","LIME","LIND","LINE","LINK","LINT","LION","LISA","LIST","LIVE","LOAD","LOAF","LOAM","LOAN","LOCK","LOFT","LOGE","LOIS","LOLA","LONE","LONG","LOOK","LOON","LOOT","LORD","LORE","LOSE","LOSS","LOST","LOUD","LOVE","LOWE","LUCK","LUCY","LUGE","LUKE","LULU","LUND","LUNG","LURA","LURE","LURK","LUSH","LUST","LYLE","LYNN","LYON","LYRA","MACE","MADE","MAGI","MAID","MAIL","MAIN","MAKE","MALE","MALI","MALL","MALT","MANA","MANN","MANY","MARC","MARE","MARK","MARS","MART","MARY","MASH","MASK","MASS","MAST","MATE","MATH","MAUL","MAYO","MEAD","MEAL","MEAN","MEAT","MEEK","MEET","MELD","MELT","MEMO","MEND","MENU","MERT","MESH","MESS","MICE","MIKE","MILD","MILE","MILK","MILL","MILT","MIMI","MIND","MINE","MINI","MINK","MINT","MIRE","MISS","MIST","MITE","MITT","MOAN","MOAT","MOCK","MODE","MOLD","MOLE","MOLL","MOLT","MONA","MONK","MONT","MOOD","MOON","MOOR","MOOT","MORE","MORN","MORT","MOSS","MOST","MOTH","MOVE","MUCH","MUCK","MUDD","MUFF","MULE","MULL","MURK","MUSH","MUST","MUTE","MUTT","MYRA","MYTH","NAGY","NAIL","NAIR","NAME","NARY","NASH","NAVE","NAVY","NEAL","NEAR","NEAT","NECK","NEED","NEIL","NELL","NEON","NERO","NESS","NEST","NEWS","NEWT","NIBS","NICE","NICK","NILE","NINA","NINE","NOAH","NODE","NOEL","NOLL","NONE","NOOK","NOON","NORM","NOSE","NOTE","NOUN","NOVA","NUDE","NULL","NUMB","OATH","OBEY","OBOE","ODIN","OHIO","OILY","OINT","OKAY","OLAF","OLDY","OLGA","OLIN","OMAN","OMEN","OMIT","ONCE","ONES","ONLY","ONTO","ONUS","ORAL","ORGY","OSLO","OTIS","OTTO","OUCH","OUST","OUTS","OVAL","OVEN","OVER","OWLY","OWNS","QUAD","QUIT","QUOD","RACE","RACK","RACY","RAFT","RAGE","RAID","RAIL","RAIN","RAKE","RANK","RANT","RARE","RASH","RATE","RAVE","RAYS","READ","REAL","REAM","REAR","RECK","REED","REEF","REEK","REEL","REID","REIN","RENA","REND","RENT","REST","RICE","RICH","RICK","RIDE","RIFT","RILL","RIME","RING","RINK","RISE","RISK","RITE","ROAD","ROAM","ROAR","ROBE","ROCK","RODE","ROIL","ROLL","ROME","ROOD","ROOF","ROOK","ROOM","ROOT","ROSA","ROSE","ROSS","ROSY","ROTH","ROUT","ROVE","ROWE","ROWS","RUBE","RUBY","RUDE","RUDY","RUIN","RULE","RUNG","RUNS","RUNT","RUSE","RUSH","RUSK","RUSS","RUST","RUTH","SACK","SAFE","SAGE","SAID","SAIL","SALE","SALK","SALT","SAME","SAND","SANE","SANG","SANK","SARA","SAUL","SAVE","SAYS","SCAN","SCAR","SCAT","SCOT","SEAL","SEAM","SEAR","SEAT","SEED","SEEK","SEEM","SEEN","SEES","SELF","SELL","SEND","SENT","SETS","SEWN","SHAG","SHAM","SHAW","SHAY","SHED","SHIM","SHIN","SHOD","SHOE","SHOT","SHOW","SHUN","SHUT","SICK","SIDE","SIFT","SIGH","SIGN","SILK","SILL","SILO","SILT","SINE","SING","SINK","SIRE","SITE","SITS","SITU","SKAT","SKEW","SKID","SKIM","SKIN","SKIT","SLAB","SLAM","SLAT","SLAY","SLED","SLEW","SLID","SLIM","SLIT","SLOB","SLOG","SLOT","SLOW","SLUG","SLUM","SLUR","SMOG","SMUG","SNAG","SNOB","SNOW","SNUB","SNUG","SOAK","SOAR","SOCK","SODA","SOFA","SOFT","SOIL","SOLD","SOME","SONG","SOON","SOOT","SORE","SORT","SOUL","SOUR","SOWN","STAB","STAG","STAN","STAR","STAY","STEM","STEW","STIR","STOW","STUB","STUN","SUCH","SUDS","SUIT","SULK","SUMS","SUNG","SUNK","SURE","SURF","SWAB","SWAG","SWAM","SWAN","SWAT","SWAY","SWIM","SWUM","TACK","TACT","TAIL","TAKE","TALE","TALK","TALL","TANK","TASK","TATE","TAUT","TEAL","TEAM","TEAR","TECH","TEEM","TEEN","TEET","TELL","TEND","TENT","TERM","TERN","TESS","TEST","THAN","THAT","THEE","THEM","THEN","THEY","THIN","THIS","THUD","THUG","TICK","TIDE","TIDY","TIED","TIER","TILE","TILL","TILT","TIME","TINA","TINE","TINT","TINY","TIRE","TOAD","TOGO","TOIL","TOLD","TOLL","TONE","TONG","TONY","TOOK","TOOL","TOOT","TORE","TORN","TOTE","TOUR","TOUT","TOWN","TRAG","TRAM","TRAY","TREE","TREK","TRIG","TRIM","TRIO","TROD","TROT","TROY","TRUE","TUBA","TUBE","TUCK","TUFT","TUNA","TUNE","TUNG","TURF","TURN","TUSK","TWIG","TWIN","TWIT","ULAN","UNIT","URGE","USED","USER","USES","UTAH","VAIL","VAIN","VALE","VARY","VASE","VAST","VEAL","VEDA","VEIL","VEIN","VEND","VENT","VERB","VERY","VETO","VICE","VIEW","VINE","VISE","VOID","VOLT","VOTE","WACK","WADE","WAGE","WAIL","WAIT","WAKE","WALE","WALK","WALL","WALT","WAND","WANE","WANG","WANT","WARD","WARM","WARN","WART","WASH","WAST","WATS","WATT","WAVE","WAVY","WAYS","WEAK","WEAL","WEAN","WEAR","WEED","WEEK","WEIR","WELD","WELL","WELT","WENT","WERE","WERT","WEST","WHAM","WHAT","WHEE","WHEN","WHET","WHOA","WHOM","WICK","WIFE","WILD","WILL","WIND","WINE","WING","WINK","WINO","WIRE","WISE","WISH","WITH","WOLF","WONT","WOOD","WOOL","WORD","WORE","WORK","WORM","WORN","WOVE","WRIT","WYNN","YALE","YANG","YANK","YARD","YARN","YAWL","YAWN","YEAH","YEAR","YELL","YOGA","YOKE"]');
  91398. /***/ })
  91399. /******/ });
  91400. /************************************************************************/
  91401. /******/ // The module cache
  91402. /******/ var __webpack_module_cache__ = {};
  91403. /******/
  91404. /******/ // The require function
  91405. /******/ function __webpack_require__(moduleId) {
  91406. /******/ // Check if module is in cache
  91407. /******/ var cachedModule = __webpack_module_cache__[moduleId];
  91408. /******/ if (cachedModule !== undefined) {
  91409. /******/ return cachedModule.exports;
  91410. /******/ }
  91411. /******/ // Create a new module (and put it into the cache)
  91412. /******/ var module = __webpack_module_cache__[moduleId] = {
  91413. /******/ id: moduleId,
  91414. /******/ loaded: false,
  91415. /******/ exports: {}
  91416. /******/ };
  91417. /******/
  91418. /******/ // Execute the module function
  91419. /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  91420. /******/
  91421. /******/ // Flag the module as loaded
  91422. /******/ module.loaded = true;
  91423. /******/
  91424. /******/ // Return the exports of the module
  91425. /******/ return module.exports;
  91426. /******/ }
  91427. /******/
  91428. /************************************************************************/
  91429. /******/ /* webpack/runtime/global */
  91430. /******/ (() => {
  91431. /******/ __webpack_require__.g = (function() {
  91432. /******/ if (typeof globalThis === 'object') return globalThis;
  91433. /******/ try {
  91434. /******/ return this || new Function('return this')();
  91435. /******/ } catch (e) {
  91436. /******/ if (typeof window === 'object') return window;
  91437. /******/ }
  91438. /******/ })();
  91439. /******/ })();
  91440. /******/
  91441. /******/ /* webpack/runtime/node module decorator */
  91442. /******/ (() => {
  91443. /******/ __webpack_require__.nmd = (module) => {
  91444. /******/ module.paths = [];
  91445. /******/ if (!module.children) module.children = [];
  91446. /******/ return module;
  91447. /******/ };
  91448. /******/ })();
  91449. /******/
  91450. /************************************************************************/
  91451. /******/
  91452. /******/ // startup
  91453. /******/ // Load entry module and return exports
  91454. /******/ // This entry module is referenced by other modules so it can't be inlined
  91455. /******/ var __webpack_exports__ = __webpack_require__(63607);
  91456. /******/ var __webpack_export_target__ = window;
  91457. /******/ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];
  91458. /******/ if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true });
  91459. /******/
  91460. /******/ })()
  91461. ;